--- imach/src/imach.c 2006/03/15 17:42:26 1.119 +++ imach/src/imach.c 2006/03/20 09:45:41 1.122 @@ -1,6 +1,26 @@ -/* $Id: imach.c,v 1.119 2006/03/15 17:42:26 brouard Exp $ +/* $Id: imach.c,v 1.122 2006/03/20 09:45:41 brouard Exp $ $State: Exp $ $Log: imach.c,v $ + Revision 1.122 2006/03/20 09:45:41 brouard + (Module): Weights can have a decimal point as for + English (a comma might work with a correct LC_NUMERIC environment, + otherwise the weight is truncated). + Modification of warning when the covariates values are not 0 or + 1. + Version 0.98g + + Revision 1.121 2006/03/16 17:45:01 lievre + * imach.c (Module): Comments concerning covariates added + + * imach.c (Module): refinements in the computation of lli if + status=-2 in order to have more reliable computation if stepm is + not 1 month. Version 0.98f + + Revision 1.120 2006/03/16 15:10:38 lievre + (Module): refinements in the computation of lli if + status=-2 in order to have more reliable computation if stepm is + not 1 month. Version 0.98f + Revision 1.119 2006/03/15 17:42:26 brouard (Module): Bug if status = -2, the loglikelihood was computed as likelihood omitting the logarithm. Version O.98e @@ -326,11 +346,11 @@ extern int errno; #define ODIRSEPARATOR '/' #endif -/* $Id: imach.c,v 1.119 2006/03/15 17:42:26 brouard Exp $ */ +/* $Id: imach.c,v 1.122 2006/03/20 09:45:41 brouard Exp $ */ /* $State: Exp $ */ -char version[]="Imach version 0.98e, March 2006, INED-EUROREVES-Institut de longevite "; -char fullversion[]="$Revision: 1.119 $ $Date: 2006/03/15 17:42:26 $"; +char version[]="Imach version 0.98g, March 2006, INED-EUROREVES-Institut de longevite "; +char fullversion[]="$Revision: 1.122 $ $Date: 2006/03/20 09:45:41 $"; char strstart[80]; char optionfilext[10], optionfilefiname[FILENAMELENGTH]; int erreur, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */ @@ -404,6 +424,7 @@ char strcurr[80], strfor[80]; char *endptr; long lval; +double dval; #define NR_END 1 #define FREE_ARG char* @@ -1386,23 +1407,23 @@ double func( double *x) } else if (s2==-2) { for (j=1,survp=0. ; j<=nlstate; j++) - survp += out[s1][j]; + survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; + /*survp += out[s1][j]; */ lli= log(survp); } -/* else if (s2==-4) { */ -/* for (j=3,survp=0. ; j<=nlstate; j++) */ -/* survp += out[s1][j]; */ -/* lli= survp; */ -/* } */ - -/* else if (s2==-5) { */ -/* for (j=1,survp=0. ; j<=2; j++) */ -/* survp += out[s1][j]; */ -/* lli= survp; */ -/* } */ - + else if (s2==-4) { + for (j=3,survp=0. ; j<=nlstate; j++) + survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; + lli= log(survp); + } + else if (s2==-5) { + for (j=1,survp=0. ; j<=2; j++) + survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; + lli= log(survp); + } + else{ lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ /* lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2]));*/ /* linear interpolation */ @@ -1599,7 +1620,7 @@ double funcone( double *x) lli=log(out[s1][s2] - savm[s1][s2]); } else if (s2==-2) { for (j=1,survp=0. ; j<=nlstate; j++) - survp += out[s1][j]; + survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; lli= log(survp); }else if (mle==1){ lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ @@ -3448,7 +3469,7 @@ void printinghtml(char fileres[], char t - Period (stable) prevalence in each health state: %s
\n", 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 (estepm=%2d months): \ + - (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): \ %s
\n", estepm,subdirf2(fileres,"e"),subdirf2(fileres,"e")); @@ -4801,12 +4822,12 @@ int main(int argc, char *argv[]) cutv(stra, strb,line,' '); errno=0; - lval=strtol(strb,&endptr,10); + dval=strtod(strb,&endptr); if( strb[0]=='\0' || (*endptr != '\0')){ - printf("Error reading data around '%d' at line number %ld %s for individual %d\nShould be a weight. Exiting.\n",lval, i,line,linei); + printf("Error reading data around '%f' at line number %ld, \"%s\" for individual %d\nShould be a weight. Exiting.\n",dval, i,line,linei); exit(1); } - weight[i]=(double)(lval); + weight[i]=dval; strcpy(line,stra); for (j=ncovcol;j>=1;j--){ @@ -4818,7 +4839,15 @@ int main(int argc, char *argv[]) exit(1); } if(lval <-1 || lval >1){ - printf("Error reading data around '%d' at line number %ld %s for individual %d, '%s'\nShould be a value of the %d covar (meaning 0 for the reference or 1. IMaCh does not build design variables, do it your self). Exiting.\n",lval,linei, i,line,j); + printf("Error reading data around '%d' at line number %ld for individual %d, '%s'\n \ + Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ + for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ + For example, for multinomial values like 1, 2 and 3,\n \ + build V1=0 V2=0 for the reference value (1),\n \ + V1=1 V2=0 for (2) \n \ + and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ + output of IMaCh is often meaningless.\n \ + Exiting.\n",lval,linei, i,line,j); exit(1); } covar[j][i]=(double)(lval);