|
|
| version 1.187, 2015/04/29 09:11:15 | version 1.193, 2015/08/04 07:17:42 |
|---|---|
| Line 1 | Line 1 |
| /* $Id$ | /* $Id$ |
| $State$ | $State$ |
| $Log$ | $Log$ |
| Revision 1.193 2015/08/04 07:17:42 brouard | |
| Summary: 0.98q4 | |
| Revision 1.192 2015/07/16 16:49:02 brouard | |
| Summary: Fixing some outputs | |
| Revision 1.191 2015/07/14 10:00:33 brouard | |
| Summary: Some fixes | |
| Revision 1.190 2015/05/05 08:51:13 brouard | |
| Summary: Adding digits in output parameters (7 digits instead of 6) | |
| Fix 1+age+. | |
| Revision 1.189 2015/04/30 14:45:16 brouard | |
| Summary: 0.98q2 | |
| Revision 1.188 2015/04/30 08:27:53 brouard | |
| *** empty log message *** | |
| Revision 1.187 2015/04/29 09:11:15 brouard | Revision 1.187 2015/04/29 09:11:15 brouard |
| *** empty log message *** | *** empty log message *** |
| Line 591 | Line 611 |
| /* #define DEBUG */ | /* #define DEBUG */ |
| /* #define DEBUGBRENT */ | /* #define DEBUGBRENT */ |
| #define POWELL /* Instead of NLOPT */ | #define POWELL /* Instead of NLOPT */ |
| #define POWELLF1F3 /* Skip test */ | |
| /* #define POWELLORIGINAL /\* Don't use Directest to decide new direction but original Powell test *\/ */ | /* #define POWELLORIGINAL /\* Don't use Directest to decide new direction but original Powell test *\/ */ |
| /* #define MNBRAKORIGINAL /\* Don't use mnbrak fix *\/ */ | /* #define MNBRAKORIGINAL /\* Don't use mnbrak fix *\/ */ |
| Line 678 typedef struct { | Line 699 typedef struct { |
| /* $Id$ */ | /* $Id$ */ |
| /* $State$ */ | /* $State$ */ |
| char version[]="Imach version 0.98q1, April 2015,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015"; | char version[]="Imach version 0.98q4, July 2015,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015"; |
| char fullversion[]="$Revision$ $Date$"; | char fullversion[]="$Revision$ $Date$"; |
| char strstart[80]; | char strstart[80]; |
| char optionfilext[10], optionfilefiname[FILENAMELENGTH]; | char optionfilext[10], optionfilefiname[FILENAMELENGTH]; |
| Line 813 int estepm; | Line 834 int estepm; |
| int m,nb; | int m,nb; |
| long *num; | long *num; |
| int firstpass=0, lastpass=4,*cod, *ncodemax, *Tage,*cens; | int firstpass=0, lastpass=4,*cod, *Tage,*cens; |
| int *ncodemax; /* ncodemax[j]= Number of modalities of the j th | |
| covariate for which somebody answered excluding | |
| undefined. Usually 2: 0 and 1. */ | |
| int *ncodemaxwundef; /* ncodemax[j]= Number of modalities of the j th | |
| covariate for which somebody answered including | |
| undefined. Usually 3: -1, 0 and 1. */ | |
| double **agev,*moisnais, *annais, *moisdc, *andc,**mint, **anint; | double **agev,*moisnais, *annais, *moisdc, *andc,**mint, **anint; |
| double **pmmij, ***probs; | double **pmmij, ***probs; |
| double *ageexmed,*agecens; | double *ageexmed,*agecens; |
| Line 1439 values at the three points, fa, fb , and | Line 1466 values at the three points, fa, fb , and |
| #endif | #endif |
| #ifdef MNBRAKORIGINAL | #ifdef MNBRAKORIGINAL |
| #else | #else |
| if (fu > *fc) { | /* if (fu > *fc) { */ |
| #ifdef DEBUG | /* #ifdef DEBUG */ |
| printf("mnbrak4 fu > fc \n"); | /* printf("mnbrak4 fu > fc \n"); */ |
| fprintf(ficlog, "mnbrak4 fu > fc\n"); | /* fprintf(ficlog, "mnbrak4 fu > fc\n"); */ |
| #endif | /* #endif */ |
| /* SHFT(u,*cx,*cx,u) /\* ie a=c, c=u and u=c; in that case, next SHFT(a,b,c,u) will give a=b=b, b=c=u, c=u=c and *\/ */ | /* /\* SHFT(u,*cx,*cx,u) /\\* ie a=c, c=u and u=c; in that case, next SHFT(a,b,c,u) will give a=b=b, b=c=u, c=u=c and *\\/ *\/ */ |
| /* SHFT(*fa,*fc,fu,*fc) /\* (b, u, c) is a bracket while test fb > fc will be fu > fc will exit *\/ */ | /* /\* SHFT(*fa,*fc,fu,*fc) /\\* (b, u, c) is a bracket while test fb > fc will be fu > fc will exit *\\/ *\/ */ |
| dum=u; /* Shifting c and u */ | /* dum=u; /\* Shifting c and u *\/ */ |
| u = *cx; | /* u = *cx; */ |
| *cx = dum; | /* *cx = dum; */ |
| dum = fu; | /* dum = fu; */ |
| fu = *fc; | /* fu = *fc; */ |
| *fc =dum; | /* *fc =dum; */ |
| } else { /* end */ | /* } else { /\* end *\/ */ |
| /* #ifdef DEBUG */ | |
| /* printf("mnbrak3 fu < fc \n"); */ | |
| /* fprintf(ficlog, "mnbrak3 fu < fc\n"); */ | |
| /* #endif */ | |
| /* dum=u; /\* Shifting c and u *\/ */ | |
| /* u = *cx; */ | |
| /* *cx = dum; */ | |
| /* dum = fu; */ | |
| /* fu = *fc; */ | |
| /* *fc =dum; */ | |
| /* } */ | |
| #ifdef DEBUG | #ifdef DEBUG |
| printf("mnbrak3 fu < fc \n"); | printf("mnbrak34 fu < or >= fc \n"); |
| fprintf(ficlog, "mnbrak3 fu < fc\n"); | fprintf(ficlog, "mnbrak34 fu < fc\n"); |
| #endif | #endif |
| dum=u; /* Shifting c and u */ | dum=u; /* Shifting c and u */ |
| u = *cx; | u = *cx; |
| *cx = dum; | *cx = dum; |
| dum = fu; | dum = fu; |
| fu = *fc; | fu = *fc; |
| *fc =dum; | *fc =dum; |
| } | |
| #endif | #endif |
| } else if ((*cx-u)*(u-ulim) > 0.0) { /* u is after c but before ulim */ | } else if ((*cx-u)*(u-ulim) > 0.0) { /* u is after c but before ulim */ |
| #ifdef DEBUG | #ifdef DEBUG |
| Line 1535 void linmin(double p[], double xi[], int | Line 1572 void linmin(double p[], double xi[], int |
| xicom[j]=xi[j]; | xicom[j]=xi[j]; |
| } | } |
| axs=0.0; | /* axs=0.0; */ |
| xxss=1; /* 1 and using scale */ | /* xxss=1; /\* 1 and using scale *\/ */ |
| xxs=1; | xxs=1; |
| do{ | /* do{ */ |
| ax=0.; | ax=0.; |
| xx= xxs; | xx= xxs; |
| mnbrak(&ax,&xx,&bx,&fa,&fx,&fb,f1dim); /* Outputs: xtx[j]=pcom[j]+(*xx)*xicom[j]; fx=f(xtx[j]) */ | mnbrak(&ax,&xx,&bx,&fa,&fx,&fb,f1dim); /* Outputs: xtx[j]=pcom[j]+(*xx)*xicom[j]; fx=f(xtx[j]) */ |
| Line 1548 void linmin(double p[], double xi[], int | Line 1585 void linmin(double p[], double xi[], int |
| /* Given input ax=axs and xx=xxs, xx might be too far from ax to get a finite f(xx) */ | /* Given input ax=axs and xx=xxs, xx might be too far from ax to get a finite f(xx) */ |
| /* Searches on line, outputs (ax, xx, bx) such that fx < min(fa and fb) */ | /* Searches on line, outputs (ax, xx, bx) such that fx < min(fa and fb) */ |
| /* Find a bracket a,x,b in direction n=xi ie xicom, order may change. Scale is [0:xxs*xi[j]] et non plus [0:xi[j]]*/ | /* Find a bracket a,x,b in direction n=xi ie xicom, order may change. Scale is [0:xxs*xi[j]] et non plus [0:xi[j]]*/ |
| if (fx != fx){ | /* if (fx != fx){ */ |
| xxs=xxs/scale; /* Trying a smaller xx, closer to initial ax=0 */ | /* xxs=xxs/scale; /\* Trying a smaller xx, closer to initial ax=0 *\/ */ |
| printf("\nLinmin NAN : input [axs=%lf:xxs=%lf], mnbrak outputs fx=%lf <(fb=%lf and fa=%lf) with xx=%lf in [ax=%lf:bx=%lf] \n", axs, xxs, fx,fb, fa, xx, ax, bx); | /* printf("\nLinmin NAN : input [axs=%lf:xxs=%lf], mnbrak outputs fx=%lf <(fb=%lf and fa=%lf) with xx=%lf in [ax=%lf:bx=%lf] \n", axs, xxs, fx,fb, fa, xx, ax, bx); */ |
| } | /* } */ |
| }while(fx != fx); | /* }while(fx != fx); */ |
| #ifdef DEBUGLINMIN | |
| printf("\nLinmin after mnbrak: ax=%12.7f xx=%12.7f bx=%12.7f fa=%12.2f fx=%12.2f fb=%12.2f\n", ax,xx,bx,fa,fx,fb); | |
| #endif | |
| *fret=brent(ax,xx,bx,f1dim,TOL,&xmin); /* Giving a bracketting triplet (ax, xx, bx), find a minimum, xmin, according to f1dim, *fret(xmin),*/ | *fret=brent(ax,xx,bx,f1dim,TOL,&xmin); /* Giving a bracketting triplet (ax, xx, bx), find a minimum, xmin, according to f1dim, *fret(xmin),*/ |
| /* fa = f(p[j] + ax * xi[j]), fx = f(p[j] + xx * xi[j]), fb = f(p[j] + bx * xi[j]) */ | /* fa = f(p[j] + ax * xi[j]), fx = f(p[j] + xx * xi[j]), fb = f(p[j] + bx * xi[j]) */ |
| /* fmin = f(p[j] + xmin * xi[j]) */ | /* fmin = f(p[j] + xmin * xi[j]) */ |
| Line 1563 void linmin(double p[], double xi[], int | Line 1603 void linmin(double p[], double xi[], int |
| printf("retour brent fret=%.12e xmin=%.12e\n",*fret,xmin); | printf("retour brent fret=%.12e xmin=%.12e\n",*fret,xmin); |
| fprintf(ficlog,"retour brent fret=%.12e xmin=%.12e\n",*fret,xmin); | fprintf(ficlog,"retour brent fret=%.12e xmin=%.12e\n",*fret,xmin); |
| #endif | #endif |
| #ifdef DEBUGLINMIN | |
| printf("linmin end "); | printf("linmin end "); |
| #endif | |
| for (j=1;j<=n;j++) { | for (j=1;j<=n;j++) { |
| printf(" before xi[%d]=%12.8f", j,xi[j]); | /* printf(" before xi[%d]=%12.8f", j,xi[j]); */ |
| xi[j] *= xmin; /* xi rescaled by xmin: if xmin=-1.237 and xi=(1,0,...,0) xi=(-1.237,0,...,0) */ | xi[j] *= xmin; /* xi rescaled by xmin: if xmin=-1.237 and xi=(1,0,...,0) xi=(-1.237,0,...,0) */ |
| if(xxs <1.0) | /* if(xxs <1.0) */ |
| printf(" after xi[%d]=%12.8f, xmin=%12.8f, ax=%12.8f, xx=%12.8f, bx=%12.8f, xxs=%12.8f", j,xi[j], xmin, ax, xx, bx,xxs ); | /* printf(" after xi[%d]=%12.8f, xmin=%12.8f, ax=%12.8f, xx=%12.8f, bx=%12.8f, xxs=%12.8f", j,xi[j], xmin, ax, xx, bx,xxs ); */ |
| p[j] += xi[j]; /* Parameters values are updated accordingly */ | p[j] += xi[j]; /* Parameters values are updated accordingly */ |
| } | } |
| printf("\n"); | /* printf("\n"); */ |
| #ifdef DEBUGLINMIN | |
| printf("Comparing last *frec(xmin=%12.8f)=%12.8f from Brent and frec(0.)=%12.8f \n", xmin, *fret, (*func)(p)); | |
| for (j=1;j<=n;j++) { | |
| printf(" xi[%d]= %12.7f p[%d]= %12.7f",j,xi[j],j,p[j]); | |
| if(j % ncovmodel == 0) | |
| printf("\n"); | |
| } | |
| #endif | |
| free_vector(xicom,1,n); | free_vector(xicom,1,n); |
| free_vector(pcom,1,n); | free_vector(pcom,1,n); |
| } | } |
| Line 1616 void powell(double p[], double **xi, int | Line 1666 void powell(double p[], double **xi, int |
| printf("\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, rcurr_time-rlast_time, rcurr_time-rstart_time);fflush(stdout); | printf("\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, rcurr_time-rlast_time, rcurr_time-rstart_time);fflush(stdout); |
| fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret,rcurr_time-rlast_time, rcurr_time-rstart_time); fflush(ficlog); | fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret,rcurr_time-rlast_time, rcurr_time-rstart_time); fflush(ficlog); |
| /* fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tm_sec-start_time.tm_sec); */ | /* fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tm_sec-start_time.tm_sec); */ |
| for (i=1;i<=n;i++) { | for (i=1;i<=n;i++) { |
| printf(" %d %.12f",i, p[i]); | printf(" %d %.12f",i, p[i]); |
| fprintf(ficlog," %d %.12lf",i, p[i]); | fprintf(ficlog," %d %.12lf",i, p[i]); |
| fprintf(ficrespow," %.12lf", p[i]); | fprintf(ficrespow," %.12lf", p[i]); |
| Line 1653 void powell(double p[], double **xi, int | Line 1703 void powell(double p[], double **xi, int |
| #endif | #endif |
| printf("%d",i);fflush(stdout); /* print direction (parameter) i */ | printf("%d",i);fflush(stdout); /* print direction (parameter) i */ |
| fprintf(ficlog,"%d",i);fflush(ficlog); | fprintf(ficlog,"%d",i);fflush(ficlog); |
| linmin(p,xit,n,fret,func); /* Point p[n]. xit[n] has been loaded for direction i as input. Outputs are fret(new point p) p is updated and xit rescaled */ | linmin(p,xit,n,fret,func); /* Point p[n]. xit[n] has been loaded for direction i as input.*/ |
| if (fabs(fptt-(*fret)) > del) { /* We are keeping the max gain on each of the n directions | /* Outputs are fret(new point p) p is updated and xit rescaled */ |
| because that direction will be replaced unless the gain del is small | if (fabs(fptt-(*fret)) > del) { /* We are keeping the max gain on each of the n directions */ |
| in comparison with the 'probable' gain, mu^2, with the last average direction. | /* because that direction will be replaced unless the gain del is small */ |
| Unless the n directions are conjugate some gain in the determinant may be obtained | /* in comparison with the 'probable' gain, mu^2, with the last average direction. */ |
| with the new direction. | /* Unless the n directions are conjugate some gain in the determinant may be obtained */ |
| */ | /* with the new direction. */ |
| del=fabs(fptt-(*fret)); | del=fabs(fptt-(*fret)); |
| ibig=i; | ibig=i; |
| } | } |
| Line 1680 void powell(double p[], double **xi, int | Line 1730 void powell(double p[], double **xi, int |
| #endif | #endif |
| } /* end loop on each direction i */ | } /* end loop on each direction i */ |
| /* Convergence test will use last linmin estimation (fret) and compare former iteration (fp) */ | /* Convergence test will use last linmin estimation (fret) and compare former iteration (fp) */ |
| /* But p and xit have been updated at the end of linmin and do not produce *fret any more! */ | /* But p and xit have been updated at the end of linmin, *fret corresponds to new p, xit */ |
| /* New value of last point Pn is not computed, P(n-1) */ | /* New value of last point Pn is not computed, P(n-1) */ |
| if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { /* Did we reach enough precision? */ | if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { /* Did we reach enough precision? */ |
| /* We could compare with a chi^2. chisquare(0.95,ddl=1)=3.84 */ | |
| /* By adding age*age in a model, the new -2LL should be lower and the difference follows a */ | |
| /* a chisquare statistics with 1 degree. To be significant at the 95% level, it should have */ | |
| /* decreased of more than 3.84 */ | |
| /* By adding age*age and V1*age the gain (-2LL) should be more than 5.99 (ddl=2) */ | |
| /* By using V1+V2+V3, the gain should be 7.82, compared with basic 1+age. */ | |
| /* By adding 10 parameters more the gain should be 18.31 */ | |
| /* Starting the program with initial values given by a former maximization will simply change */ | |
| /* the scales of the directions and the directions, because the are reset to canonical directions */ | |
| /* Thus the first calls to linmin will give new points and better maximizations until fp-(*fret) is */ | |
| /* under the tolerance value. If the tolerance is very small 1.e-9, it could last long. */ | |
| #ifdef DEBUG | #ifdef DEBUG |
| int k[2],l; | int k[2],l; |
| k[0]=1; | k[0]=1; |
| Line 1712 void powell(double p[], double **xi, int | Line 1774 void powell(double p[], double **xi, int |
| free_vector(ptt,1,n); | free_vector(ptt,1,n); |
| free_vector(pt,1,n); | free_vector(pt,1,n); |
| return; | return; |
| } | } /* enough precision */ |
| if (*iter == ITMAX) nrerror("powell exceeding maximum iterations."); | if (*iter == ITMAX) nrerror("powell exceeding maximum iterations."); |
| for (j=1;j<=n;j++) { /* Computes the extrapolated point P_0 + 2 (P_n-P_0) */ | for (j=1;j<=n;j++) { /* Computes the extrapolated point P_0 + 2 (P_n-P_0) */ |
| ptt[j]=2.0*p[j]-pt[j]; | ptt[j]=2.0*p[j]-pt[j]; |
| Line 1720 void powell(double p[], double **xi, int | Line 1782 void powell(double p[], double **xi, int |
| pt[j]=p[j]; | pt[j]=p[j]; |
| } | } |
| fptt=(*func)(ptt); /* f_3 */ | fptt=(*func)(ptt); /* f_3 */ |
| #ifdef POWELLF1F3 | |
| #else | |
| if (fptt < fp) { /* If extrapolated point is better, decide if we keep that new direction or not */ | if (fptt < fp) { /* If extrapolated point is better, decide if we keep that new direction or not */ |
| #endif | |
| /* (x1 f1=fp), (x2 f2=*fret), (x3 f3=fptt), (xm fm) */ | /* (x1 f1=fp), (x2 f2=*fret), (x3 f3=fptt), (xm fm) */ |
| /* From x1 (P0) distance of x2 is at h and x3 is 2h */ | /* From x1 (P0) distance of x2 is at h and x3 is 2h */ |
| /* Let f"(x2) be the 2nd derivative equal everywhere. */ | /* Let f"(x2) be the 2nd derivative equal everywhere. */ |
| Line 1749 void powell(double p[], double **xi, int | Line 1814 void powell(double p[], double **xi, int |
| if (t < 0.0) { /* Then we use it for new direction */ | if (t < 0.0) { /* Then we use it for new direction */ |
| #else | #else |
| if (directest*t < 0.0) { /* Contradiction between both tests */ | if (directest*t < 0.0) { /* Contradiction between both tests */ |
| printf("directest= %.12lf, t= %.12lf, f1= %.12lf,f2= %.12lf,f3= %.12lf, del= %.12lf\n",directest, t, fp,(*fret),fptt,del); | printf("directest= %.12lf, t= %.12lf, f1= %.12lf,f2= %.12lf,f3= %.12lf, del= %.12lf\n",directest, t, fp,(*fret),fptt,del); |
| printf("f1-2f2+f3= %.12lf, f1-f2-del= %.12lf, f1-f3= %.12lf\n",fp-2.0*(*fret)+fptt, fp -(*fret) -del, fp-fptt); | printf("f1-2f2+f3= %.12lf, f1-f2-del= %.12lf, f1-f3= %.12lf\n",fp-2.0*(*fret)+fptt, fp -(*fret) -del, fp-fptt); |
| fprintf(ficlog,"directest= %.12lf, t= %.12lf, f1= %.12lf,f2= %.12lf,f3= %.12lf, del= %.12lf\n",directest, t, fp,(*fret),fptt, del); | fprintf(ficlog,"directest= %.12lf, t= %.12lf, f1= %.12lf,f2= %.12lf,f3= %.12lf, del= %.12lf\n",directest, t, fp,(*fret),fptt, del); |
| fprintf(ficlog,"f1-2f2+f3= %.12lf, f1-f2-del= %.12lf, f1-f3= %.12lf\n",fp-2.0*(*fret)+fptt, fp -(*fret) -del, fp-fptt); | fprintf(ficlog,"f1-2f2+f3= %.12lf, f1-f2-del= %.12lf, f1-f3= %.12lf\n",fp-2.0*(*fret)+fptt, fp -(*fret) -del, fp-fptt); |
| } | } |
| if (directest < 0.0) { /* Then we use it for new direction */ | if (directest < 0.0) { /* Then we use it for new direction */ |
| #endif | #endif |
| #ifdef DEBUGLINMIN | |
| printf("Before linmin in direction P%d-P0\n",n); | |
| for (j=1;j<=n;j++) { | |
| printf("Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | |
| if(j % ncovmodel == 0) | |
| printf("\n"); | |
| } | |
| #endif | |
| linmin(p,xit,n,fret,func); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/ | linmin(p,xit,n,fret,func); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/ |
| #ifdef DEBUGLINMIN | |
| for (j=1;j<=n;j++) { | |
| printf("After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | |
| if(j % ncovmodel == 0) | |
| printf("\n"); | |
| } | |
| #endif | |
| for (j=1;j<=n;j++) { | for (j=1;j<=n;j++) { |
| xi[j][ibig]=xi[j][n]; /* Replace direction with biggest decrease by last direction n */ | xi[j][ibig]=xi[j][n]; /* Replace direction with biggest decrease by last direction n */ |
| xi[j][n]=xit[j]; /* and this nth direction by the by the average p_0 p_n */ | xi[j][n]=xit[j]; /* and this nth direction by the by the average p_0 p_n */ |
| Line 1774 void powell(double p[], double **xi, int | Line 1854 void powell(double p[], double **xi, int |
| printf("\n"); | printf("\n"); |
| fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); |
| #endif | #endif |
| } /* end of t negative */ | } /* end of t or directest negative */ |
| #ifdef POWELLF1F3 | |
| #else | |
| } /* end if (fptt < fp) */ | } /* end if (fptt < fp) */ |
| } | #endif |
| } /* loop iteration */ | |
| } | } |
| /**** Prevalence limit (stable or period prevalence) ****************/ | /**** Prevalence limit (stable or period prevalence) ****************/ |
| Line 3234 void tricode(int *Tvar, int **nbcode, in | Line 3317 void tricode(int *Tvar, int **nbcode, in |
| cptcoveff=0; | cptcoveff=0; |
| for (k=-1; k < maxncov; k++) Ndum[k]=0; | |
| for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ | for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ |
| /* Loop on covariates without age and products */ | /* Loop on covariates without age and products */ |
| for (j=1; j<=(cptcovs); j++) { /* From model V1 + V2*age+ V3 + V3*V4 keeps V1 + V3 = 2 only */ | for (j=1; j<=(cptcovs); j++) { /* From model V1 + V2*age+ V3 + V3*V4 keeps V1 + V3 = 2 only */ |
| for (k=-1; k < maxncov; k++) Ndum[k]=0; | |
| for (i=1; i<=imx; i++) { /* Loop on individuals: reads the data file to get the maximum value of the | for (i=1; i<=imx; i++) { /* Loop on individuals: reads the data file to get the maximum value of the |
| modality of this covariate Vj*/ | modality of this covariate Vj*/ |
| ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i | ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i |
| Line 3261 void tricode(int *Tvar, int **nbcode, in | Line 3344 void tricode(int *Tvar, int **nbcode, in |
| /* getting the maximum value of the modality of the covariate | /* getting the maximum value of the modality of the covariate |
| (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and | (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and |
| female is 1, then modmaxcovj=1.*/ | female is 1, then modmaxcovj=1.*/ |
| } /* end for loop on individuals */ | } /* end for loop on individuals i */ |
| printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); | printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); |
| fprintf(ficlog," Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); | |
| cptcode=modmaxcovj; | cptcode=modmaxcovj; |
| /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ | /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ |
| /*for (i=0; i<=cptcode; i++) {*/ | /*for (i=0; i<=cptcode; i++) {*/ |
| for (i=modmincovj; i<=modmaxcovj; i++) { /* i=-1 ? 0 and 1*//* For each value of the modality of model-cov j */ | for (k=modmincovj; k<=modmaxcovj; k++) { /* k=-1 ? 0 and 1*//* For each value k of the modality of model-cov j */ |
| printf("Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], i, Ndum[i]); | printf("Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], k, Ndum[k]); |
| if( Ndum[i] != 0 ){ /* Counts if nobody answered, empty modality */ | fprintf(ficlog, "Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], k, Ndum[k]); |
| ncodemax[j]++; /* ncodemax[j]= Number of non-null modalities of the j th covariate. */ | if( Ndum[k] != 0 ){ /* Counts if nobody answered modality k ie empty modality, we skip it and reorder */ |
| if( k != -1){ | |
| ncodemax[j]++; /* ncodemax[j]= Number of modalities of the j th | |
| covariate for which somebody answered excluding | |
| undefined. Usually 2: 0 and 1. */ | |
| } | |
| ncodemaxwundef[j]++; /* ncodemax[j]= Number of modalities of the j th | |
| covariate for which somebody answered including | |
| undefined. Usually 3: -1, 0 and 1. */ | |
| } | } |
| /* In fact ncodemax[j]=2 (dichotom. variables only) but it could be more for | /* In fact ncodemax[j]=2 (dichotom. variables only) but it could be more for |
| historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ | historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ |
| Line 3287 void tricode(int *Tvar, int **nbcode, in | Line 3379 void tricode(int *Tvar, int **nbcode, in |
| nbcode[Tvar[j]][2]=1; | nbcode[Tvar[j]][2]=1; |
| nbcode[Tvar[j]][3]=2; | nbcode[Tvar[j]][3]=2; |
| */ | */ |
| ij=1; /* ij is similar to i but can jumps over null modalities */ | ij=0; /* ij is similar to i but can jumps over null modalities */ |
| for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 */ | for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 to 1*/ |
| for (k=0; k<= cptcode; k++) { /* k=-1 ? k=0 to 1 *//* Could be 1 to 4 */ | if (Ndum[i] == 0) { /* If at least one individual responded to this modality k */ |
| /*recode from 0 */ | break; |
| if (Ndum[k] != 0) { /* If at least one individual responded to this modality k */ | } |
| nbcode[Tvar[j]][ij]=k; /* stores the modality k in an array nbcode. | ij++; |
| k is a modality. If we have model=V1+V1*sex | nbcode[Tvar[j]][ij]=i; /* stores the original modality i in an array nbcode, ij modality from 1 to last non-nul modality.*/ |
| then: nbcode[1][1]=0 ; nbcode[1][2]=1; nbcode[2][1]=0 ; nbcode[2][2]=1; */ | cptcode = ij; /* New max modality for covar j */ |
| ij++; | } /* end of loop on modality i=-1 to 1 or more */ |
| } | |
| if (ij > ncodemax[j]) break; | /* for (k=0; k<= cptcode; k++) { /\* k=-1 ? k=0 to 1 *\//\* Could be 1 to 4 *\//\* cptcode=modmaxcovj *\/ */ |
| } /* end of loop on */ | /* /\*recode from 0 *\/ */ |
| } /* end of loop on modality */ | /* k is a modality. If we have model=V1+V1*sex */ |
| /* then: nbcode[1][1]=0 ; nbcode[1][2]=1; nbcode[2][1]=0 ; nbcode[2][2]=1; */ | |
| /* But if some modality were not used, it is recoded from 0 to a newer modmaxcovj=cptcode *\/ */ | |
| /* } */ | |
| /* /\* cptcode = ij; *\/ /\* New max modality for covar j *\/ */ | |
| /* if (ij > ncodemax[j]) { */ | |
| /* printf( " Error ij=%d > ncodemax[%d]=%d\n", ij, j, ncodemax[j]); */ | |
| /* fprintf(ficlog, " Error ij=%d > ncodemax[%d]=%d\n", ij, j, ncodemax[j]); */ | |
| /* break; */ | |
| /* } */ | |
| /* } /\* end of loop on modality k *\/ */ | |
| } /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ | } /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ |
| for (k=-1; k< maxncov; k++) Ndum[k]=0; | for (k=-1; k< maxncov; k++) Ndum[k]=0; |
| Line 3310 void tricode(int *Tvar, int **nbcode, in | Line 3412 void tricode(int *Tvar, int **nbcode, in |
| Ndum[ij]++; /* Might be supersed V1 + V1*age */ | Ndum[ij]++; /* Might be supersed V1 + V1*age */ |
| } | } |
| ij=1; | ij=0; |
| for (i=0; i<= maxncov-1; i++) { /* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) */ | for (i=0; i<= maxncov-1; i++) { /* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) */ |
| /*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/ | /*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/ |
| if((Ndum[i]!=0) && (i<=ncovcol)){ | if((Ndum[i]!=0) && (i<=ncovcol)){ |
| ij++; | |
| /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ | /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ |
| Tvaraff[ij]=i; /*For printing (unclear) */ | Tvaraff[ij]=i; /*For printing (unclear) */ |
| ij++; | }else{ |
| }else | /* Tvaraff[ij]=0; */ |
| Tvaraff[ij]=0; | } |
| } | } |
| ij--; | /* ij--; */ |
| cptcoveff=ij; /*Number of total covariates*/ | cptcoveff=ij; /*Number of total covariates*/ |
| } | } |
| Line 4406 fprintf(fichtm," \n<ul><li><b>Graphs</b> | Line 4509 fprintf(fichtm," \n<ul><li><b>Graphs</b> |
| jj1=0; | jj1=0; |
| for(k1=1; k1<=m;k1++){ | for(k1=1; k1<=m;k1++){ |
| for(i1=1; i1<=ncodemax[k1];i1++){ | /* for(i1=1; i1<=ncodemax[k1];i1++){ */ |
| jj1++; | jj1++; |
| if (cptcovn > 0) { | if (cptcovn > 0) { |
| fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); | fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); |
| for (cpt=1; cpt<=cptcoveff;cpt++) | for (cpt=1; cpt<=cptcoveff;cpt++){ |
| fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtab[jj1][cpt]]); | fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtab[jj1][cpt]]); |
| printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtab[jj1][cpt]]);fflush(stdout); | |
| } | |
| fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); | fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); |
| } | } |
| /* Pij */ | /* Pij */ |
| Line 4430 fprintf(fichtm," \n<ul><li><b>Graphs</b> | Line 4535 fprintf(fichtm," \n<ul><li><b>Graphs</b> |
| fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) : <a href=\"%s%d%d.png\">%s%d%d.png</a> <br> \ | fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) : <a href=\"%s%d%d.png\">%s%d%d.png</a> <br> \ |
| <img src=\"%s%d%d.png\">",cpt,nlstate,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1); | <img src=\"%s%d%d.png\">",cpt,nlstate,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1); |
| } | } |
| } /* end i1 */ | /* } /\* end i1 *\/ */ |
| }/* End k1 */ | }/* End k1 */ |
| fprintf(fichtm,"</ul>"); | fprintf(fichtm,"</ul>"); |
| fprintf(fichtm,"\ | fprintf(fichtm,"\ |
| \n<br><li><h4> <a name='secondorder'>Result files (second order: variances)</a></h4>\n\ | \n<br><li><h4> <a name='secondorder'>Result files (second order: variances)</a></h4>\n\ |
| - Parameter file with estimated parameters and covariance matrix: <a href=\"%s\">%s</a> <br>\n", rfileres,rfileres); | - Parameter file with estimated parameters and covariance matrix: <a href=\"%s\">%s</a> <br> \ |
| - 95%% confidence intervals and T statistics are in the log file.<br>\n", rfileres,rfileres); | |
| fprintf(fichtm," - Variance of one-step probabilities: <a href=\"%s\">%s</a> <br>\n", | fprintf(fichtm," - Standard deviation of one-step probabilities: <a href=\"%s\">%s</a> <br>\n", |
| subdirf2(fileres,"prob"),subdirf2(fileres,"prob")); | subdirf2(fileres,"prob"),subdirf2(fileres,"prob")); |
| fprintf(fichtm,"\ | fprintf(fichtm,"\ |
| - Variance-covariance of one-step probabilities: <a href=\"%s\">%s</a> <br>\n", | - Variance-covariance of one-step probabilities: <a href=\"%s\">%s</a> <br>\n", |
| Line 4480 fprintf(fichtm," \n<ul><li><b>Graphs</b> | Line 4585 fprintf(fichtm," \n<ul><li><b>Graphs</b> |
| jj1=0; | jj1=0; |
| for(k1=1; k1<=m;k1++){ | for(k1=1; k1<=m;k1++){ |
| for(i1=1; i1<=ncodemax[k1];i1++){ | /* for(i1=1; i1<=ncodemax[k1];i1++){ */ |
| jj1++; | jj1++; |
| if (cptcovn > 0) { | if (cptcovn > 0) { |
| fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); | fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); |
| Line 4499 true period expectancies (those weighted | Line 4604 true period expectancies (those weighted |
| drawn in addition to the population based expectancies computed using\ | drawn in addition to the population based expectancies computed using\ |
| observed and cahotic prevalences: %s%d.png<br>\ | observed and cahotic prevalences: %s%d.png<br>\ |
| <img src=\"%s%d.png\">",subdirf2(optionfilefiname,"e"),jj1,subdirf2(optionfilefiname,"e"),jj1); | <img src=\"%s%d.png\">",subdirf2(optionfilefiname,"e"),jj1,subdirf2(optionfilefiname,"e"),jj1); |
| } /* end i1 */ | /* } /\* end i1 *\/ */ |
| }/* End k1 */ | }/* End k1 */ |
| fprintf(fichtm,"</ul>"); | fprintf(fichtm,"</ul>"); |
| fflush(fichtm); | fflush(fichtm); |
| Line 5533 int decodemodel ( char model[], int last | Line 5638 int decodemodel ( char model[], int last |
| if (strlen(model) >1){ /* If there is at least 1 covariate */ | if (strlen(model) >1){ /* If there is at least 1 covariate */ |
| j=0, j1=0, k1=0, k2=-1, ks=0, cptcovn=0; | j=0, j1=0, k1=0, k2=-1, ks=0, cptcovn=0; |
| if (strstr(model,"AGE") !=0){ | if (strstr(model,"AGE") !=0){ |
| printf("Error. AGE must be in lower case 'age' model=1+age+%s ",model); | printf("Error. AGE must be in lower case 'age' model=1+age+%s. ",model); |
| fprintf(ficlog,"Error. AGE must be in lower case model=1+age+%s ",model);fflush(ficlog); | fprintf(ficlog,"Error. AGE must be in lower case model=1+age+%s. ",model);fflush(ficlog); |
| return 1; | return 1; |
| } | } |
| if (strstr(model,"v") !=0){ | if (strstr(model,"v") !=0){ |
| Line 5547 int decodemodel ( char model[], int last | Line 5652 int decodemodel ( char model[], int last |
| printf(" strpt=%s, model=%s\n",strpt, model); | printf(" strpt=%s, model=%s\n",strpt, model); |
| if(strpt != model){ | if(strpt != model){ |
| printf("Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \ | printf("Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \ |
| 'model=1+age+age*age+V1' or 'model=1+age+age*age+V1+V1*age', please swap as well as \n \ | 'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \ |
| corresponding column of parameters.\n",model); | corresponding column of parameters.\n",model); |
| fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \ | fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \ |
| 'model=1+age+age*age+V1' or 'model=1+age+age*age+V1+V1*age', please swap as well as \n \ | 'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \ |
| corresponding column of parameters.\n",model); fflush(ficlog); | corresponding column of parameters.\n",model); fflush(ficlog); |
| return 1; | return 1; |
| } | } |
| Line 5841 BOOL IsWow64() | Line 5946 BOOL IsWow64() |
| } | } |
| #endif | #endif |
| void syscompilerinfo() | void syscompilerinfo(int logged) |
| { | { |
| /* #include "syscompilerinfo.h"*/ | /* #include "syscompilerinfo.h"*/ |
| /* command line Intel compiler 32bit windows, XP compatible:*/ | /* command line Intel compiler 32bit windows, XP compatible:*/ |
| Line 5890 void syscompilerinfo() | Line 5995 void syscompilerinfo() |
| int cross = CROSS; | int cross = CROSS; |
| if (cross){ | if (cross){ |
| printf("Cross-"); | printf("Cross-"); |
| fprintf(ficlog, "Cross-"); | if(logged) fprintf(ficlog, "Cross-"); |
| } | } |
| #endif | #endif |
| #include <stdint.h> | #include <stdint.h> |
| printf("Compiled with:");fprintf(ficlog,"Compiled with:"); | printf("Compiled with:");if(logged)fprintf(ficlog,"Compiled with:"); |
| #if defined(__clang__) | #if defined(__clang__) |
| printf(" Clang/LLVM");fprintf(ficlog," Clang/LLVM"); /* Clang/LLVM. ---------------------------------------------- */ | printf(" Clang/LLVM");if(logged)fprintf(ficlog," Clang/LLVM"); /* Clang/LLVM. ---------------------------------------------- */ |
| #endif | #endif |
| #if defined(__ICC) || defined(__INTEL_COMPILER) | #if defined(__ICC) || defined(__INTEL_COMPILER) |
| printf(" Intel ICC/ICPC");fprintf(ficlog," Intel ICC/ICPC");/* Intel ICC/ICPC. ------------------------------------------ */ | printf(" Intel ICC/ICPC");if(logged)fprintf(ficlog," Intel ICC/ICPC");/* Intel ICC/ICPC. ------------------------------------------ */ |
| #endif | #endif |
| #if defined(__GNUC__) || defined(__GNUG__) | #if defined(__GNUC__) || defined(__GNUG__) |
| printf(" GNU GCC/G++");fprintf(ficlog," GNU GCC/G++");/* GNU GCC/G++. --------------------------------------------- */ | printf(" GNU GCC/G++");if(logged)fprintf(ficlog," GNU GCC/G++");/* GNU GCC/G++. --------------------------------------------- */ |
| #endif | #endif |
| #if defined(__HP_cc) || defined(__HP_aCC) | #if defined(__HP_cc) || defined(__HP_aCC) |
| printf(" Hewlett-Packard C/aC++");fprintf(fcilog," Hewlett-Packard C/aC++"); /* Hewlett-Packard C/aC++. ---------------------------------- */ | printf(" Hewlett-Packard C/aC++");if(logged)fprintf(fcilog," Hewlett-Packard C/aC++"); /* Hewlett-Packard C/aC++. ---------------------------------- */ |
| #endif | #endif |
| #if defined(__IBMC__) || defined(__IBMCPP__) | #if defined(__IBMC__) || defined(__IBMCPP__) |
| printf(" IBM XL C/C++"); fprintf(ficlog," IBM XL C/C++");/* IBM XL C/C++. -------------------------------------------- */ | printf(" IBM XL C/C++"); if(logged) fprintf(ficlog," IBM XL C/C++");/* IBM XL C/C++. -------------------------------------------- */ |
| #endif | #endif |
| #if defined(_MSC_VER) | #if defined(_MSC_VER) |
| printf(" Microsoft Visual Studio");fprintf(ficlog," Microsoft Visual Studio");/* Microsoft Visual Studio. --------------------------------- */ | printf(" Microsoft Visual Studio");if(logged)fprintf(ficlog," Microsoft Visual Studio");/* Microsoft Visual Studio. --------------------------------- */ |
| #endif | #endif |
| #if defined(__PGI) | #if defined(__PGI) |
| printf(" Portland Group PGCC/PGCPP");fprintf(ficlog," Portland Group PGCC/PGCPP");/* Portland Group PGCC/PGCPP. ------------------------------- */ | printf(" Portland Group PGCC/PGCPP");if(logged) fprintf(ficlog," Portland Group PGCC/PGCPP");/* Portland Group PGCC/PGCPP. ------------------------------- */ |
| #endif | #endif |
| #if defined(__SUNPRO_C) || defined(__SUNPRO_CC) | #if defined(__SUNPRO_C) || defined(__SUNPRO_CC) |
| printf(" Oracle Solaris Studio");fprintf(ficlog," Oracle Solaris Studio\n");/* Oracle Solaris Studio. ----------------------------------- */ | printf(" Oracle Solaris Studio");if(logged)fprintf(ficlog," Oracle Solaris Studio\n");/* Oracle Solaris Studio. ----------------------------------- */ |
| #endif | #endif |
| printf(" for ");fprintf(ficlog," for "); | printf(" for "); if (logged) fprintf(ficlog, " for "); |
| // http://stackoverflow.com/questions/4605842/how-to-identify-platform-compiler-from-preprocessor-macros | // http://stackoverflow.com/questions/4605842/how-to-identify-platform-compiler-from-preprocessor-macros |
| #ifdef _WIN32 // note the underscore: without it, it's not msdn official! | #ifdef _WIN32 // note the underscore: without it, it's not msdn official! |
| // Windows (x64 and x86) | // Windows (x64 and x86) |
| printf("Windows (x64 and x86) ");fprintf(ficlog,"Windows (x64 and x86) "); | printf("Windows (x64 and x86) ");if(logged) fprintf(ficlog,"Windows (x64 and x86) "); |
| #elif __unix__ // all unices, not all compilers | #elif __unix__ // all unices, not all compilers |
| // Unix | // Unix |
| printf("Unix ");fprintf(ficlog,"Unix "); | printf("Unix ");if(logged) fprintf(ficlog,"Unix "); |
| #elif __linux__ | #elif __linux__ |
| // linux | // linux |
| printf("linux ");fprintf(ficlog,"linux "); | printf("linux ");if(logged) fprintf(ficlog,"linux "); |
| #elif __APPLE__ | #elif __APPLE__ |
| // Mac OS, not sure if this is covered by __posix__ and/or __unix__ though.. | // Mac OS, not sure if this is covered by __posix__ and/or __unix__ though.. |
| printf("Mac OS ");fprintf(ficlog,"Mac OS "); | printf("Mac OS ");if(logged) fprintf(ficlog,"Mac OS "); |
| #endif | #endif |
| /* __MINGW32__ */ | /* __MINGW32__ */ |
| Line 5949 void syscompilerinfo() | Line 6054 void syscompilerinfo() |
| /* _DEBUG // Defined when you compile with /LDd, /MDd, and /MTd. */ | /* _DEBUG // Defined when you compile with /LDd, /MDd, and /MTd. */ |
| #if UINTPTR_MAX == 0xffffffff | #if UINTPTR_MAX == 0xffffffff |
| printf(" 32-bit"); fprintf(ficlog," 32-bit");/* 32-bit */ | printf(" 32-bit"); if(logged) fprintf(ficlog," 32-bit");/* 32-bit */ |
| #elif UINTPTR_MAX == 0xffffffffffffffff | #elif UINTPTR_MAX == 0xffffffffffffffff |
| printf(" 64-bit"); fprintf(ficlog," 64-bit");/* 64-bit */ | printf(" 64-bit"); if(logged) fprintf(ficlog," 64-bit");/* 64-bit */ |
| #else | #else |
| printf(" wtf-bit"); fprintf(ficlog," wtf-bit");/* wtf */ | printf(" wtf-bit"); if(logged) fprintf(ficlog," wtf-bit");/* wtf */ |
| #endif | #endif |
| #if defined(__GNUC__) | #if defined(__GNUC__) |
| Line 5966 void syscompilerinfo() | Line 6071 void syscompilerinfo() |
| + __GNUC_MINOR__ * 100) | + __GNUC_MINOR__ * 100) |
| # endif | # endif |
| printf(" using GNU C version %d.\n", __GNUC_VERSION__); | printf(" using GNU C version %d.\n", __GNUC_VERSION__); |
| fprintf(ficlog, " using GNU C version %d.\n", __GNUC_VERSION__); | if(logged) fprintf(ficlog, " using GNU C version %d.\n", __GNUC_VERSION__); |
| if (uname(&sysInfo) != -1) { | if (uname(&sysInfo) != -1) { |
| printf("Running on: %s %s %s %s %s\n",sysInfo.sysname, sysInfo.nodename, sysInfo.release, sysInfo.version, sysInfo.machine); | printf("Running on: %s %s %s %s %s\n",sysInfo.sysname, sysInfo.nodename, sysInfo.release, sysInfo.version, sysInfo.machine); |
| fprintf(ficlog,"Running on: %s %s %s %s %s\n ",sysInfo.sysname, sysInfo.nodename, sysInfo.release, sysInfo.version, sysInfo.machine); | if(logged) fprintf(ficlog,"Running on: %s %s %s %s %s\n ",sysInfo.sysname, sysInfo.nodename, sysInfo.release, sysInfo.version, sysInfo.machine); |
| } | } |
| else | else |
| perror("uname() error"); | perror("uname() error"); |
| //#ifndef __INTEL_COMPILER | //#ifndef __INTEL_COMPILER |
| #if !defined (__INTEL_COMPILER) && !defined(__APPLE__) | #if !defined (__INTEL_COMPILER) && !defined(__APPLE__) |
| printf("GNU libc version: %s\n", gnu_get_libc_version()); | printf("GNU libc version: %s\n", gnu_get_libc_version()); |
| fprintf(ficlog,"GNU libc version: %s\n", gnu_get_libc_version()); | if(logged) fprintf(ficlog,"GNU libc version: %s\n", gnu_get_libc_version()); |
| #endif | #endif |
| #endif | #endif |
| Line 5985 void syscompilerinfo() | Line 6090 void syscompilerinfo() |
| // { | // { |
| #if defined(_MSC_VER) | #if defined(_MSC_VER) |
| if (IsWow64()){ | if (IsWow64()){ |
| printf("The program (probably compiled for 32bit) is running under WOW64 (64bit) emulation.\n"); | printf("\nThe program (probably compiled for 32bit) is running under WOW64 (64bit) emulation.\n"); |
| fprintf(ficlog, "The program (probably compiled for 32bit) is running under WOW64 (64bit) emulation.\n"); | if (logged) fprintf(ficlog, "\nThe program (probably compiled for 32bit) is running under WOW64 (64bit) emulation.\n"); |
| } | } |
| else{ | else{ |
| printf("The process is not running under WOW64 (i.e probably on a 64bit Windows).\n"); | printf("\nThe program is not running under WOW64 (i.e probably on a 64bit Windows).\n"); |
| fprintf(ficlog,"The programm is not running under WOW64 (i.e probably on a 64bit Windows).\n"); | if (logged) fprintf(ficlog, "\nThe programm is not running under WOW64 (i.e probably on a 64bit Windows).\n"); |
| } | } |
| // printf("\nPress Enter to continue..."); | // printf("\nPress Enter to continue..."); |
| // getchar(); | // getchar(); |
| Line 6166 int main(int argc, char *argv[]) | Line 6271 int main(int argc, char *argv[]) |
| /* FILE *fichtm; *//* Html File */ | /* FILE *fichtm; *//* Html File */ |
| /* FILE *ficgp;*/ /*Gnuplot File */ | /* FILE *ficgp;*/ /*Gnuplot File */ |
| struct stat info; | struct stat info; |
| double agedeb; | double agedeb=0.; |
| double ageminpar=1.e20,agemin=1.e20, agemaxpar=-1.e20, agemax=-1.e20; | double ageminpar=1.e20,agemin=1.e20, agemaxpar=-1.e20, agemax=-1.e20; |
| double fret; | double fret; |
| double dum; /* Dummy variable */ | double dum=0.; /* Dummy variable */ |
| double ***p3mat; | double ***p3mat; |
| double ***mobaverage; | double ***mobaverage; |
| Line 6180 int main(int argc, char *argv[]) | Line 6285 int main(int argc, char *argv[]) |
| char *tok, *val; /* pathtot */ | char *tok, *val; /* pathtot */ |
| int firstobs=1, lastobs=10; | int firstobs=1, lastobs=10; |
| int c, h , cpt; | int c, h , cpt; |
| int jl; | int jl=0; |
| int i1, j1, jk, stepsize; | int i1, j1, jk, stepsize=0; |
| int *tab; | int *tab; |
| int mobilavproj=0 , prevfcast=0 ; /* moving average of prev, If prevfcast=1 prevalence projection */ | int mobilavproj=0 , prevfcast=0 ; /* moving average of prev, If prevfcast=1 prevalence projection */ |
| int mobilav=0,popforecast=0; | int mobilav=0,popforecast=0; |
| int hstepm, nhstepm; | int hstepm=0, nhstepm=0; |
| int agemortsup; | int agemortsup; |
| float sumlpop=0.; | float sumlpop=0.; |
| double jprev1=1, mprev1=1,anprev1=2000,jprev2=1, mprev2=1,anprev2=2000; | double jprev1=1, mprev1=1,anprev1=2000,jprev2=1, mprev2=1,anprev2=2000; |
| double jpyram=1, mpyram=1,anpyram=2000,jpyram1=1, mpyram1=1,anpyram1=2000; | double jpyram=1, mpyram=1,anpyram=2000,jpyram1=1, mpyram1=1,anpyram1=2000; |
| double bage=0, fage=110, age, agelim, agebase; | double bage=0, fage=110., age, agelim=0., agebase=0.; |
| double ftolpl=FTOL; | double ftolpl=FTOL; |
| double **prlim; | double **prlim; |
| double ***param; /* Matrix of parameters */ | double ***param; /* Matrix of parameters */ |
| Line 6252 int main(int argc, char *argv[]) | Line 6357 int main(int argc, char *argv[]) |
| #else | #else |
| getcwd(pathcd, size); | getcwd(pathcd, size); |
| #endif | #endif |
| syscompilerinfo(0); | |
| printf("\n%s\n%s",version,fullversion); | printf("\n%s\n%s",version,fullversion); |
| if(argc <=1){ | if(argc <=1){ |
| printf("\nEnter the parameter file name: "); | printf("\nEnter the parameter file name: "); |
| Line 6325 int main(int argc, char *argv[]) | Line 6430 int main(int argc, char *argv[]) |
| optionfilext=%s\n\ | optionfilext=%s\n\ |
| optionfilefiname='%s'\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname); | optionfilefiname='%s'\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname); |
| syscompilerinfo(); | syscompilerinfo(0); |
| printf("Local time (at start):%s",strstart); | printf("Local time (at start):%s",strstart); |
| fprintf(ficlog,"Local time (at start): %s",strstart); | fprintf(ficlog,"Local time (at start): %s",strstart); |
| Line 6379 int main(int argc, char *argv[]) | Line 6484 int main(int argc, char *argv[]) |
| fprintf(ficparo,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncovcol,nlstate,ndeath,maxwav, mle, weightopt,model); | fprintf(ficparo,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncovcol,nlstate,ndeath,maxwav, mle, weightopt,model); |
| fprintf(ficlog,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncovcol,nlstate,ndeath,maxwav, mle, weightopt,model); | fprintf(ficlog,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncovcol,nlstate,ndeath,maxwav, mle, weightopt,model); |
| fflush(ficlog); | fflush(ficlog); |
| if(model[0]=='#'|| model[0]== '\0'){ | /* if(model[0]=='#'|| model[0]== '\0'){ */ |
| if(model[0]=='#'){ | |
| printf("Error in 'model' line: model should start with 'model=1+age+' and end with '.' \n \ | printf("Error in 'model' line: model should start with 'model=1+age+' and end with '.' \n \ |
| 'model=1+age+.' or 'model=1+age+V1.' or 'model=1+age+age*age+V1+V1*age.' or \n \ | 'model=1+age+.' or 'model=1+age+V1.' or 'model=1+age+age*age+V1+V1*age.' or \n \ |
| 'model=1+age+V1+V2.' or 'model=1+age+V1+V2+V1*V2.' etc. \n"); \ | 'model=1+age+V1+V2.' or 'model=1+age+V1+V2+V1*V2.' etc. \n"); \ |
| Line 6423 int main(int argc, char *argv[]) | Line 6529 int main(int argc, char *argv[]) |
| /*delti=vector(1,npar); *//* Scale of each paramater (output from hesscov)*/ | /*delti=vector(1,npar); *//* Scale of each paramater (output from hesscov)*/ |
| if(mle==-1){ /* Print a wizard for help writing covariance matrix */ | if(mle==-1){ /* Print a wizard for help writing covariance matrix */ |
| prwizard(ncovmodel, nlstate, ndeath, model, ficparo); | prwizard(ncovmodel, nlstate, ndeath, model, ficparo); |
| printf(" You choose mle=-1, look at file %s for a template of covariance matrix \n",filereso); | printf(" You chose mle=-1, look at file %s for a template of covariance matrix \n",filereso); |
| fprintf(ficlog," You choose mle=-1, look at file %s for a template of covariance matrix \n",filereso); | fprintf(ficlog," You chose mle=-1, look at file %s for a template of covariance matrix \n",filereso); |
| free_ma3x(delti3,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); | free_ma3x(delti3,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); |
| fclose (ficparo); | fclose (ficparo); |
| fclose (ficlog); | fclose (ficlog); |
| Line 6433 int main(int argc, char *argv[]) | Line 6539 int main(int argc, char *argv[]) |
| } | } |
| else if(mle==-3) { /* Main Wizard */ | else if(mle==-3) { /* Main Wizard */ |
| prwizard(ncovmodel, nlstate, ndeath, model, ficparo); | prwizard(ncovmodel, nlstate, ndeath, model, ficparo); |
| printf(" You choose mle=-3, look at file %s for a template of covariance matrix \n",filereso); | printf(" You chose mle=-3, look at file %s for a template of covariance matrix \n",filereso); |
| fprintf(ficlog," You choose mle=-3, look at file %s for a template of covariance matrix \n",filereso); | fprintf(ficlog," You chose mle=-3, look at file %s for a template of covariance matrix \n",filereso); |
| param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); | param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); |
| matcov=matrix(1,npar,1,npar); | matcov=matrix(1,npar,1,npar); |
| } | } |
| Line 6458 int main(int argc, char *argv[]) | Line 6564 int main(int argc, char *argv[]) |
| if(jj==i) continue; | if(jj==i) continue; |
| j++; | j++; |
| fscanf(ficpar,"%1d%1d",&i1,&j1); | fscanf(ficpar,"%1d%1d",&i1,&j1); |
| if ((i1 != i) && (j1 != j)){ | if ((i1 != i) || (j1 != jj)){ |
| printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n \ | printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n \ |
| It might be a problem of design; if ncovcol and the model are correct\n \ | It might be a problem of design; if ncovcol and the model are correct\n \ |
| run imach with mle=-1 to get a correct template of the parameter file.\n",numlinepar, i,j, i1, j1); | run imach with mle=-1 to get a correct template of the parameter file.\n",numlinepar, i,j, i1, j1); |
| Line 6466 run imach with mle=-1 to get a correct t | Line 6572 run imach with mle=-1 to get a correct t |
| } | } |
| fprintf(ficparo,"%1d%1d",i1,j1); | fprintf(ficparo,"%1d%1d",i1,j1); |
| if(mle==1) | if(mle==1) |
| printf("%1d%1d",i,j); | printf("%1d%1d",i,jj); |
| fprintf(ficlog,"%1d%1d",i,j); | fprintf(ficlog,"%1d%1d",i,jj); |
| for(k=1; k<=ncovmodel;k++){ | for(k=1; k<=ncovmodel;k++){ |
| fscanf(ficpar," %lf",¶m[i][j][k]); | fscanf(ficpar," %lf",¶m[i][j][k]); |
| if(mle==1){ | if(mle==1){ |
| Line 6608 run imach with mle=-1 to get a correct t | Line 6714 run imach with mle=-1 to get a correct t |
| s=imatrix(1,maxwav+1,1,n); /* s[i][j] health state for wave i and individual j */ | s=imatrix(1,maxwav+1,1,n); /* s[i][j] health state for wave i and individual j */ |
| tab=ivector(1,NCOVMAX); | tab=ivector(1,NCOVMAX); |
| ncodemax=ivector(1,NCOVMAX); /* Number of code per covariate; if O and 1 only, 2**ncov; V1+V2+V3+V4=>16 */ | ncodemax=ivector(1,NCOVMAX); /* Number of code per covariate; if O and 1 only, 2**ncov; V1+V2+V3+V4=>16 */ |
| ncodemaxwundef=ivector(1,NCOVMAX); /* Number of code per covariate; if - 1 O and 1 only, 2**ncov; V1+V2+V3+V4=>16 */ | |
| /* Reads data from file datafile */ | /* Reads data from file datafile */ |
| if (readdata(datafile, firstobs, lastobs, &imx)==1) | if (readdata(datafile, firstobs, lastobs, &imx)==1) |
| Line 7007 Interval (in months) between two waves: | Line 7114 Interval (in months) between two waves: |
| } | } |
| printf("iter=%d MLE=%f Eq=%lf*exp(%lf*(age-%d))\n",iter,-gompertz(p),p[1],p[2],agegomp); | printf("iter=%d MLE=%f Eq=%lf*exp(%lf*(age-%d))\n",iter,-gompertz(p),p[1],p[2],agegomp); |
| for (i=1;i<=NDIM;i++) | for (i=1;i<=NDIM;i++) { |
| printf("%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i])); | printf("%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i])); |
| fprintf(ficlog,"%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i])); | |
| } | |
| lsurv=vector(1,AGESUP); | lsurv=vector(1,AGESUP); |
| lpop=vector(1,AGESUP); | lpop=vector(1,AGESUP); |
| tpop=vector(1,AGESUP); | tpop=vector(1,AGESUP); |
| Line 7077 Interval (in months) between two waves: | Line 7185 Interval (in months) between two waves: |
| } | } |
| /*--------- results files --------------*/ | /*--------- results files --------------*/ |
| fprintf(ficres,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle= 0 weight=%d\nmodel=1+age+%s\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncovcol, nlstate, ndeath, maxwav, weightopt,model); | fprintf(ficres,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle= 0 weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncovcol, nlstate, ndeath, maxwav, weightopt,model); |
| fprintf(ficres,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n"); | fprintf(ficres,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n"); |
| Line 7090 Interval (in months) between two waves: | Line 7198 Interval (in months) between two waves: |
| fprintf(ficlog,"%d%d ",i,k); | fprintf(ficlog,"%d%d ",i,k); |
| fprintf(ficres,"%1d%1d ",i,k); | fprintf(ficres,"%1d%1d ",i,k); |
| for(j=1; j <=ncovmodel; j++){ | for(j=1; j <=ncovmodel; j++){ |
| printf("%lf ",p[jk]); | printf("%12.7f ",p[jk]); |
| fprintf(ficlog,"%lf ",p[jk]); | fprintf(ficlog,"%12.7f ",p[jk]); |
| fprintf(ficres,"%lf ",p[jk]); | fprintf(ficres,"%12.7f ",p[jk]); |
| jk++; | jk++; |
| } | } |
| printf("\n"); | printf("\n"); |
| Line 7106 Interval (in months) between two waves: | Line 7214 Interval (in months) between two waves: |
| ftolhess=ftol; /* Usually correct */ | ftolhess=ftol; /* Usually correct */ |
| hesscov(matcov, p, npar, delti, ftolhess, func); | hesscov(matcov, p, npar, delti, ftolhess, func); |
| } | } |
| printf("Parameters and 95%% confidence intervals\n"); | |
| fprintf(ficlog, "Parameters, T and confidence intervals\n"); | |
| for(i=1,jk=1; i <=nlstate; i++){ | |
| for(k=1; k <=(nlstate+ndeath); k++){ | |
| if (k != i) { | |
| printf("%d%d ",i,k); | |
| fprintf(ficlog,"%d%d ",i,k); | |
| for(j=1; j <=ncovmodel; j++){ | |
| printf("%12.7f T=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-2*sqrt(matcov[jk][jk]),p[jk]+2*sqrt(matcov[jk][jk])); | |
| fprintf(ficlog,"%12.7f T=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-2*sqrt(matcov[jk][jk]),p[jk]+2*sqrt(matcov[jk][jk])); | |
| jk++; | |
| } | |
| printf("\n"); | |
| fprintf(ficlog,"\n"); | |
| } | |
| } | |
| } | |
| fprintf(ficres,"# Scales (for hessian or gradient estimation)\n"); | fprintf(ficres,"# Scales (for hessian or gradient estimation)\n"); |
| printf("# Scales (for hessian or gradient estimation)\n"); | printf("# Scales (for hessian or gradient estimation)\n"); |
| fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n"); | fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n"); |
| Line 7262 Interval (in months) between two waves: | Line 7388 Interval (in months) between two waves: |
| dateprev2=anprev2+(mprev2-1)/12.+(jprev2-1)/365.; | dateprev2=anprev2+(mprev2-1)/12.+(jprev2-1)/365.; |
| fscanf(ficpar,"pop_based=%d\n",&popbased); | fscanf(ficpar,"pop_based=%d\n",&popbased); |
| fprintf(ficlog,"pop_based=%d\n",popbased); | |
| fprintf(ficparo,"pop_based=%d\n",popbased); | fprintf(ficparo,"pop_based=%d\n",popbased); |
| fprintf(ficres,"pop_based=%d\n",popbased); | fprintf(ficres,"pop_based=%d\n",popbased); |
| Line 7581 Interval (in months) between two waves: | Line 7708 Interval (in months) between two waves: |
| free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); | free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); |
| free_ivector(ncodemax,1,NCOVMAX); | free_ivector(ncodemax,1,NCOVMAX); |
| free_ivector(ncodemaxwundef,1,NCOVMAX); | |
| free_ivector(Tvar,1,NCOVMAX); | free_ivector(Tvar,1,NCOVMAX); |
| free_ivector(Tprod,1,NCOVMAX); | free_ivector(Tprod,1,NCOVMAX); |
| free_ivector(Tvaraff,1,NCOVMAX); | free_ivector(Tvaraff,1,NCOVMAX); |