|
|
| version 1.187, 2015/04/29 09:11:15 | version 1.190, 2015/05/05 08:51:13 |
|---|---|
| Line 1 | Line 1 |
| /* $Id$ | /* $Id$ |
| $State$ | $State$ |
| $Log$ | $Log$ |
| 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 678 typedef struct { | Line 689 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.98q2, 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 fullversion[]="$Revision$ $Date$"; | char fullversion[]="$Revision$ $Date$"; |
| char strstart[80]; | char strstart[80]; |
| char optionfilext[10], optionfilefiname[FILENAMELENGTH]; | char optionfilext[10], optionfilefiname[FILENAMELENGTH]; |
| Line 1563 void linmin(double p[], double xi[], int | Line 1574 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 |
| printf("linmin end "); | /* printf("linmin end "); */ |
| 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"); */ |
| /* printf("Comparing last *frec(xmin)=%12.8f from Brent and frec(0.)=%12.8f \n", *fret, (*func)(p)); */ | |
| free_vector(xicom,1,n); | free_vector(xicom,1,n); |
| free_vector(pcom,1,n); | free_vector(pcom,1,n); |
| } | } |
| Line 1653 void powell(double p[], double **xi, int | Line 1665 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 1692 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 6379 int main(int argc, char *argv[]) | Line 6403 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 7090 Interval (in months) between two waves: | Line 7115 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"); |