--- imach/src/imach.c 2006/03/20 10:52:43 1.123 +++ imach/src/imach.c 2006/04/28 17:23:28 1.126 @@ -1,6 +1,20 @@ -/* $Id: imach.c,v 1.123 2006/03/20 10:52:43 brouard Exp $ +/* $Id: imach.c,v 1.126 2006/04/28 17:23:28 brouard Exp $ $State: Exp $ $Log: imach.c,v $ + Revision 1.126 2006/04/28 17:23:28 brouard + (Module): Yes the sum of survivors was wrong since + imach-114 because nhstepm was no more computed in the age + loop. Now we define nhstepma in the age loop. + Version 0.98h + + Revision 1.125 2006/04/04 15:20:31 lievre + Errors in calculation of health expectancies. Age was not initialized. + Forecasting file added. + + Revision 1.124 2006/03/22 17:13:53 lievre + Parameters are printed with %lf instead of %f (more numbers after the comma). + The log-likelihood is printed in the log file + Revision 1.123 2006/03/20 10:52:43 brouard * imach.c (Module): changed, corresponds to .htm file name. <head> headers where missing. @@ -357,11 +371,11 @@ extern int errno; #define ODIRSEPARATOR '/' #endif -/* $Id: imach.c,v 1.123 2006/03/20 10:52:43 brouard Exp $ */ +/* $Id: imach.c,v 1.126 2006/04/28 17:23:28 brouard Exp $ */ /* $State: Exp $ */ -char version[]="Imach version 0.98g, March 2006, INED-EUROREVES-Institut de longevite "; -char fullversion[]="$Revision: 1.123 $ $Date: 2006/03/20 10:52:43 $"; +char version[]="Imach version 0.98h, April 2006, INED-EUROREVES-Institut de longevite "; +char fullversion[]="$Revision: 1.126 $ $Date: 2006/04/28 17:23:28 $"; char strstart[80]; char optionfilext[10], optionfilefiname[FILENAMELENGTH]; int erreur, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */ @@ -1001,9 +1015,8 @@ void powell(double p[], double **xi, int last_time=curr_time; (void) gettimeofday(&curr_time,&tzp); printf("\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, curr_time.tv_sec-last_time.tv_sec, curr_time.tv_sec-start_time.tv_sec);fflush(stdout); - /* fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, curr_time.tv_sec-last_time.tv_sec, curr_time.tv_sec-start_time.tv_sec); - fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tv_sec-start_time.tv_sec); - */ + fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, curr_time.tv_sec-last_time.tv_sec, curr_time.tv_sec-start_time.tv_sec); fflush(ficlog); +/* fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tv_sec-start_time.tv_sec); */ for (i=1;i<=n;i++) { printf(" %d %.12f",i, p[i]); fprintf(ficlog," %d %.12lf",i, p[i]); @@ -2459,6 +2472,7 @@ void evsij(char fileres[], double ***eij { /* Health expectancies, no variances */ int i, j, nhstepm, hstepm, h, nstepm, k, cptj, cptj2, i2, j2; + int nhstepma, nstepma; /* Decreasing with age */ double age, agelim, hf; double ***p3mat; double eip; @@ -2505,18 +2519,28 @@ void evsij(char fileres[], double ***eij hstepm=hstepm/stepm; /* Typically in stepm units, if stepm=6 & estepm=24 , = 24/6 months = 4 */ agelim=AGESUP; - /* nhstepm age range expressed in number of stepm */ - nstepm=(int) rint((agelim-age)*YEARM/stepm); + /* If stepm=6 months */ + /* Computed by stepm unit matrices, product of hstepm matrices, stored + in an array of nhstepm length: nhstepm=10, hstepm=4, stepm=6 months */ + +/* nhstepm age range expressed in number of stepm */ + nstepm=(int) rint((agelim-bage)*YEARM/stepm); /* Biggest nstepm */ /* Typically if 20 years nstepm = 20*12/6=40 stepm */ /* if (stepm >= YEARM) hstepm=1;*/ nhstepm = nstepm/hstepm;/* Expressed in hstepm, typically nhstepm=40/4=10 */ p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); - for (age=bage; age<=fage; age ++){ /* If stepm=6 months */ - /* Computed by stepm unit matrices, product of hstepm matrices, stored - in an array of nhstepm length: nhstepm=10, hstepm=4, stepm=6 months */ + for (age=bage; age<=fage; age ++){ + nstepma=(int) rint((agelim-bage)*YEARM/stepm); /* Biggest nstepm */ + /* Typically if 20 years nstepm = 20*12/6=40 stepm */ + /* if (stepm >= YEARM) hstepm=1;*/ + nhstepma = nstepma/hstepm;/* Expressed in hstepm, typically nhstepma=40/4=10 */ + + /* If stepm=6 months */ + /* Computed by stepm unit matrices, product of hstepma matrices, stored + in an array of nhstepma length: nhstepma=10, hstepm=4, stepm=6 months */ - hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, cij); + hpxij(p3mat,nhstepma,age,hstepm,x,nlstate,stepm,oldm, savm, cij); hf=hstepm*stepm/YEARM; /* Duration of hstepm expressed in year unit. */ @@ -2558,6 +2582,7 @@ void cvevsij(char fileres[], double ***e to initial status i, ei. . */ int i, j, nhstepm, hstepm, h, nstepm, k, cptj, cptj2, i2, j2, ij, ji; + int nhstepma, nstepma; /* Decreasing with age */ double age, agelim, hf; double ***p3matp, ***p3matm, ***varhe; double **dnewm,**doldm; @@ -2631,7 +2656,7 @@ void cvevsij(char fileres[], double ***e /* If stepm=6 months */ /* nhstepm age range expressed in number of stepm */ agelim=AGESUP; - nstepm=(int) rint((agelim-age)*YEARM/stepm); + nstepm=(int) rint((agelim-bage)*YEARM/stepm); /* Typically if 20 years nstepm = 20*12/6=40 stepm */ /* if (stepm >= YEARM) hstepm=1;*/ nhstepm = nstepm/hstepm;/* Expressed in hstepm, typically nhstepm=40/4=10 */ @@ -2644,10 +2669,15 @@ void cvevsij(char fileres[], double ***e gm=matrix(0,nhstepm,1,nlstate*nlstate); for (age=bage; age<=fage; age ++){ - - /* Computed by stepm unit matrices, product of hstepm matrices, stored - in an array of nhstepm length: nhstepm=10, hstepm=4, stepm=6 months */ - + nstepma=(int) rint((agelim-bage)*YEARM/stepm); /* Biggest nstepm */ + /* Typically if 20 years nstepm = 20*12/6=40 stepm */ + /* if (stepm >= YEARM) hstepm=1;*/ + nhstepma = nstepma/hstepm;/* Expressed in hstepm, typically nhstepma=40/4=10 */ + + /* If stepm=6 months */ + /* Computed by stepm unit matrices, product of hstepma matrices, stored + in an array of nhstepma length: nhstepma=10, hstepm=4, stepm=6 months */ + hf=hstepm*stepm/YEARM; /* Duration of hstepm expressed in year unit. */ /* Computing Variances of health expectancies */ @@ -2698,6 +2728,7 @@ void cvevsij(char fileres[], double ***e varhe[ij][ji][(int)age] += doldm[ij][ji]*hf*hf; } } + /* Computing expectancies */ hpxij(p3matm,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, cij); for(i=1; i<=nlstate;i++) @@ -3481,9 +3512,11 @@ void printinghtml(char fileres[], char t subdirf2(fileres,"pl"),subdirf2(fileres,"pl")); fprintf(fichtm,"\ - (a) Life expectancies by health status at initial age, (b) health expectancies by health status at initial age: ei., eij . If one or more covariate are included, specific tables for each value of the covariate are output in sequences within the same file (estepm=%2d months): \ - <a href=\"%s\">%s</a> <br>\n</li>", + <a href=\"%s\">%s</a> <br>\n", estepm,subdirf2(fileres,"e"),subdirf2(fileres,"e")); - + fprintf(fichtm,"\ + - Population projections by age and states: \ + <a href=\"%s\">%s</a> <br>\n</li>", subdirf2(fileres,"f"),subdirf2(fileres,"f")); fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>"); @@ -5357,9 +5390,9 @@ Interval (in months) between two waves: fprintf(ficlog,"%d%d ",i,k); fprintf(ficres,"%1d%1d ",i,k); for(j=1; j <=ncovmodel; j++){ - printf("%f ",p[jk]); - fprintf(ficlog,"%f ",p[jk]); - fprintf(ficres,"%f ",p[jk]); + printf("%lf ",p[jk]); + fprintf(ficlog,"%lf ",p[jk]); + fprintf(ficres,"%lf ",p[jk]); jk++; } printf("\n");