--- imach/src/imach.c 2015/08/18 13:32:00 1.194
+++ imach/src/imach.c 2015/09/07 14:09:23 1.199
@@ -1,6 +1,26 @@
-/* $Id: imach.c,v 1.194 2015/08/18 13:32:00 brouard Exp $
+/* $Id: imach.c,v 1.199 2015/09/07 14:09:23 brouard Exp $
$State: Exp $
$Log: imach.c,v $
+ Revision 1.199 2015/09/07 14:09:23 brouard
+ Summary: 0.98q6 changing default small png format for graph to vectorized svg.
+
+ Revision 1.198 2015/09/03 07:14:39 brouard
+ Summary: 0.98q5 Flavia
+
+ Revision 1.197 2015/09/01 18:24:39 brouard
+ *** empty log message ***
+
+ Revision 1.196 2015/08/18 23:17:52 brouard
+ Summary: 0.98q5
+
+ Revision 1.195 2015/08/18 16:28:39 brouard
+ Summary: Adding a hack for testing purpose
+
+ After reading the title, ftol and model lines, if the comment line has
+ a q, starting with #q, the answer at the end of the run is quit. It
+ permits to run test files in batch with ctest. The former workaround was
+ $ echo q | imach foo.imach
+
Revision 1.194 2015/08/18 13:32:00 brouard
Summary: Adding error when the covariance matrix doesn't contain the exact number of lines required by the model line.
@@ -683,7 +703,7 @@ typedef struct {
#define NLSTATEMAX 8 /**< Maximum number of live states (for func) */
#define NDEATHMAX 8 /**< Maximum number of dead states (for func) */
#define NCOVMAX 20 /**< Maximum number of covariates, including generated covariates V1*V2 */
-#define codtabm(h,k) 1 & (h-1) >> (k-1) ;
+#define codtabm(h,k) (1 & (h-1) >> (k-1))+1
#define MAXN 20000
#define YEARM 12. /**< Number of months per year */
#define AGESUP 130
@@ -700,11 +720,12 @@ typedef struct {
#define ODIRSEPARATOR '\\'
#endif
-/* $Id: imach.c,v 1.194 2015/08/18 13:32:00 brouard Exp $ */
+/* $Id: imach.c,v 1.199 2015/09/07 14:09:23 brouard Exp $ */
/* $State: Exp $ */
-
-char version[]="Imach version 0.98q5, August 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: 1.194 $ $Date: 2015/08/18 13:32:00 $";
+#include "version.h"
+char version[]=__IMACH_VERSION__;
+char copyright[]="September 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: 1.199 $ $Date: 2015/09/07 14:09:23 $";
char strstart[80];
char optionfilext[10], optionfilefiname[FILENAMELENGTH];
int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */
@@ -838,7 +859,7 @@ int estepm;
int m,nb;
long *num;
-int firstpass=0, lastpass=4,*cod, *Tage,*cens;
+int firstpass=0, lastpass=4,*cod, *cens;
int *ncodemax; /* ncodemax[j]= Number of modalities of the j th
covariate for which somebody answered excluding
undefined. Usually 2: 0 and 1. */
@@ -858,6 +879,7 @@ double **covar; /**< covar[j,i], value
* cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*age; */
double idx;
int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */
+int *Tage;
int *Ndum; /** Freq of modality (tricode */
int **codtab; /**< codtab=imatrix(1,100,1,10); */
int **Tvard, *Tprod, cptcovprod, *Tvaraff;
@@ -1895,13 +1917,13 @@ double **prevalim(double **prlim, int nl
if(nagesqr==1)
cov[3]= agefin*agefin;;
for (k=1; k<=cptcovn;k++) {
- cov[2+nagesqr+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]];
- /*printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtab[%d][Tvar[%d]]=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtab[ij][Tvar[k]]],cov[2+k], ij, k, codtab[ij][Tvar[k]]);*/
+ cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])];
+ /* printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtabm(ij,Tvar[k])],cov[2+k], ij, k, codtabm(ij,Tvar[k])]); */
}
/*wrong? for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */
- for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]*cov[2];
+ for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]*cov[2];
for (k=1; k<=cptcovprod;k++) /* Useless */
- cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]] * nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]];
+ cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])] * nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])];
/*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/
/*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/
@@ -2074,12 +2096,12 @@ double ***hpxij(double ***po, int nhstep
if(nagesqr==1)
cov[3]= agexact*agexact;
for (k=1; k<=cptcovn;k++)
- cov[2+nagesqr+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]];
+ cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])];
for (k=1; k<=cptcovage;k++) /* Should start at cptcovn+1 */
/* cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */
- cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtab[ij][Tvar[Tage[k]]]]*cov[2];
+ cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k]])]*cov[2];
for (k=1; k<=cptcovprod;k++) /* Useless because included in cptcovn */
- cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]];
+ cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])]*nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])];
/*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/
@@ -2898,7 +2920,7 @@ void lubksb(double **a, int n, int *indx
void pstamp(FILE *fichier)
{
- fprintf(fichier,"# %s.%s\n#%s\n#%s\n# %s", optionfilefiname,optionfilext,version,fullversion,strstart);
+ fprintf(fichier,"# %s.%s\n#IMaCh version %s, %s\n#%s\n# %s", optionfilefiname,optionfilext,version,copyright, fullversion, strstart);
}
/************ Frequencies ********************/
@@ -2950,13 +2972,13 @@ void freqsummary(char fileres[], int ia
bool=1;
if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
for (z1=1; z1<=cptcoveff; z1++)
- if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtab[j1][z1]]){
+ if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){
/* Tests if the value of each of the covariates of i is equal to filter j1 */
bool=0;
- /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtab[%d][%d]=%d, nbcode[Tvaraff][codtab[%d][%d]=%d, j1=%d\n",
- bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtab[j1][z1],
- j1,z1,nbcode[Tvaraff[z1]][codtab[j1][z1]],j1);*/
- /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtab[7][3]=1 and nbcde[3][?]=1*/
+ /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n",
+ bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1),
+ j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/
+ /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/
}
}
@@ -2985,10 +3007,10 @@ void freqsummary(char fileres[], int ia
pstamp(ficresp);
if (cptcovn>0) {
fprintf(ficresp, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
fprintf(ficresp, "**********\n#");
fprintf(ficlog, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
fprintf(ficlog, "**********\n#");
}
for(i=1; i<=nlstate;i++)
@@ -3116,7 +3138,7 @@ void prevalence(double ***probs, double
bool=1;
if (cptcovn>0) {
for (z1=1; z1<=cptcoveff; z1++)
- if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtab[j1][z1]])
+ if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)])
bool=0;
}
if (bool==1) {
@@ -3382,14 +3404,15 @@ void tricode(int *Tvar, int **nbcode, in
nbcode[Tvar[j]][1]=0;
nbcode[Tvar[j]][2]=1;
nbcode[Tvar[j]][3]=2;
+ To be continued (not working yet).
*/
- 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 or from -1 to 1*/
- if (Ndum[i] == 0) { /* If at least one individual responded to this modality k */
+ ij=0; /* ij is similar to i but can jump over null modalities */
+ for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/
+ if (Ndum[i] == 0) { /* If nobody responded to this modality k */
break;
}
ij++;
- nbcode[Tvar[j]][ij]=i; /* stores the original modality i in an array nbcode, ij modality from 1 to last non-nul modality.*/
+ nbcode[Tvar[j]][ij]=i; /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality.*/
cptcode = ij; /* New max modality for covar j */
} /* end of loop on modality i=-1 to 1 or more */
@@ -4031,7 +4054,8 @@ void varevsij(char optionfilefiname[], d
free_vector(gmp,nlstate+1,nlstate+ndeath);
free_matrix(gradgp,1,npar,nlstate+1,nlstate+ndeath);
free_matrix(trgradgp,nlstate+1,nlstate+ndeath,1,npar); /* mu or p point j*/
- fprintf(ficgp,"\nunset parametric;unset label; set ter png small size 320, 240");
+ /* fprintf(ficgp,"\nunset parametric;unset label; set ter png small size 320, 240"); */
+ fprintf(ficgp,"\nunset parametric;unset label; set ter svg size 640, 480");
/* for(j=nlstate+1; j<= nlstate+ndeath; j++){ *//* Only the first actually */
fprintf(ficgp,"\n set log y; unset log x;set xlabel \"Age\"; set ylabel \"Force of mortality (year-1)\";");
/* fprintf(ficgp,"\n plot \"%s\" u 1:($3*%6.3f) not w l 1 ",fileresprobmorprev,YEARM/estepm); */
@@ -4041,11 +4065,11 @@ void varevsij(char optionfilefiname[], d
fprintf(ficgp,"\n replot \"%s\" u 1:(($3+1.96*$4)) t \"95%% interval\" w l lt 2 ",subdirf(fileresprobmorprev));
fprintf(ficgp,"\n replot \"%s\" u 1:(($3-1.96*$4)) not w l lt 2 ",subdirf(fileresprobmorprev));
fprintf(fichtm,"\n
File (multiple files are possible if covariates are present): %s\n",subdirf(fileresprobmorprev),subdirf(fileresprobmorprev));
- fprintf(fichtm,"\n
Probability is computed over estepm=%d months.
\n", estepm,subdirf3(optionfilefiname,"varmuptjgr",digitp),digit);
- /* fprintf(fichtm,"\n
Probability is computed over estepm=%d months and then divided by estepm and multiplied by %.0f in order to have the probability to die over a year
\n", stepm,YEARM,digitp,digit);
+ fprintf(fichtm,"\n
Probability is computed over estepm=%d months.
\n", estepm,subdirf3(optionfilefiname,"varmuptjgr",digitp),digit);
+ /* fprintf(fichtm,"\n
Probability is computed over estepm=%d months and then divided by estepm and multiplied by %.0f in order to have the probability to die over a year
\n", stepm,YEARM,digitp,digit);
*/
-/* fprintf(ficgp,"\nset out \"varmuptjgr%s%s%s.png\";replot;",digitp,optionfilefiname,digit); */
- fprintf(ficgp,"\nset out \"%s%s.png\";replot;\n",subdirf3(optionfilefiname,"varmuptjgr",digitp),digit);
+/* fprintf(ficgp,"\nset out \"varmuptjgr%s%s%s.svg\";replot;",digitp,optionfilefiname,digit); */
+ fprintf(ficgp,"\nset out \"%s%s.svg\";replot;\n",subdirf3(optionfilefiname,"varmuptjgr",digitp),digit);
free_vector(xp,1,npar);
free_matrix(doldm,1,nlstate,1,nlstate);
@@ -4218,10 +4242,9 @@ void varprob(char optionfilefiname[], do
fprintf(fichtm,"\n
Computing and drawing one step probabilities with their confidence intervals
\n");
fprintf(fichtm,"\n");
- fprintf(fichtm,"\n\n",optionfilehtmcov);
- fprintf(fichtmcov,"\nMatrix of variance-covariance of pairs of step probabilities
\n\
- file %s
\n",optionfilehtmcov);
- fprintf(fichtmcov,"\nEllipsoids of confidence centered on point (pij, pkl) are estimated\
+ fprintf(fichtm,"\nthis page is important in order to visualize confidence intervals and especially correlation between disability and recovery\n",optionfilehtmcov);
+ fprintf(fichtmcov,"Current page is file %s
\n\nMatrix of variance-covariance of pairs of step probabilities
\n",optionfilehtmcov, optionfilehtmcov);
+ fprintf(fichtmcov,"\nEllipsoids of confidence centered on point (pij, pkl) are estimated \
and drawn. It helps understanding how is the covariance between two incidences.\
They are expressed in year-1 in order to be less dependent of stepm.
\n");
fprintf(fichtmcov,"\n
Contour plot corresponding to x'cov-1x = 4 (where x is the column vector (pij,pkl)) are drawn. \
@@ -4242,23 +4265,23 @@ To be simple, these graphs help to under
/*j1++;*/
if (cptcovn>0) {
fprintf(ficresprob, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
fprintf(ficresprob, "**********\n#\n");
fprintf(ficresprobcov, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
fprintf(ficresprobcov, "**********\n#\n");
fprintf(ficgp, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficgp, " V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficgp, " V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
fprintf(ficgp, "**********\n#\n");
fprintf(fichtmcov, "\n
********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
fprintf(fichtmcov, "**********\n
");
fprintf(ficresprobcor, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
fprintf(ficresprobcor, "**********\n#");
}
@@ -4271,7 +4294,7 @@ To be simple, these graphs help to under
if(nagesqr==1)
cov[3]= age*age;
for (k=1; k<=cptcovn;k++) {
- cov[2+nagesqr+k]=nbcode[Tvar[k]][codtab[j1][Tvar[k]]];/* j1 1 2 3 4
+ cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,Tvar[k])];/* j1 1 2 3 4
* 1 1 1 1 1
* 2 2 1 1 1
* 3 1 2 1 1
@@ -4279,9 +4302,9 @@ To be simple, these graphs help to under
/* nbcode[1][1]=0 nbcode[1][2]=1;*/
}
/* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */
- for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtab[ij][Tvar[Tage[k]]]]*cov[2];
+ for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k]])]*cov[2];
for (k=1; k<=cptcovprod;k++)
- cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]];
+ cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])]*nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])];
for(theta=1; theta <=npar; theta++){
@@ -4431,15 +4454,15 @@ To be simple, these graphs help to under
first=0;
fprintf(ficgp,"\nset parametric;unset label");
fprintf(ficgp,"\nset log y;set log x; set xlabel \"p%1d%1d (year-1)\";set ylabel \"p%1d%1d (year-1)\"",k1,l1,k2,l2);
- fprintf(ficgp,"\nset ter png small size 320, 240");
+ fprintf(ficgp,"\nset ter svg size 640, 480");
fprintf(fichtmcov,"\n
Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year-1\
- :\
-%s%d%1d%1d-%1d%1d.png, ",k1,l1,k2,l2,\
+ :\
+%s%d%1d%1d-%1d%1d.svg, ",k1,l1,k2,l2,\
subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2,\
subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2);
- fprintf(fichtmcov,"\n
",subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2);
+ fprintf(fichtmcov,"\n
",subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2);
fprintf(fichtmcov,"\n
Correlation at age %d (%.3f),",(int) age, c12);
- fprintf(ficgp,"\nset out \"%s%d%1d%1d-%1d%1d.png\"",subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2);
+ fprintf(ficgp,"\nset out \"%s%d%1d%1d-%1d%1d.svg\"",subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2);
fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2);
fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2);
fprintf(ficgp,"\nplot [-pi:pi] %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not",\
@@ -4456,7 +4479,7 @@ To be simple, these graphs help to under
}/* if first */
} /* age mod 5 */
} /* end loop age */
- fprintf(ficgp,"\nset out \"%s%d%1d%1d-%1d%1d.png\";replot;",subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2);
+ fprintf(ficgp,"\nset out \"%s%d%1d%1d-%1d%1d.svg\";replot;",subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2);
first=1;
} /*l12 */
} /* k12 */
@@ -4518,26 +4541,26 @@ fprintf(fichtm," \n- Graphs
if (cptcovn > 0) {
fprintf(fichtm,"
************ Results for covariates");
for (cpt=1; cpt<=cptcoveff;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," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);
+ printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout);
}
fprintf(fichtm," ************\n
");
}
/* Pij */
- fprintf(fichtm,"
- Pij or Conditional probabilities to be observed in state j being in state i, %d (stepm) months before: %s%d_1.png
\
-",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1);
+ fprintf(fichtm,"
- Pij or Conditional probabilities to be observed in state j being in state i, %d (stepm) months before: %s%d_1.svg
\
+",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1);
/* Quasi-incidences */
fprintf(fichtm,"
- Pij or Conditional probabilities to be observed in state j being in state i %d (stepm) months\
- before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too: %s%d_2.png
\
-",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1);
+ before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too: %s%d_2.svg
\
+",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1);
/* Period (stable) prevalence in each health state */
for(cpt=1; cpt<=nlstate;cpt++){
- fprintf(fichtm,"
- Convergence to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. %s%d_%d.png
\
-", cpt, cpt, nlstate, subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1);
+ fprintf(fichtm,"
- Convergence to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. %s%d_%d.svg
\
+", cpt, cpt, nlstate, subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1);
}
for(cpt=1; cpt<=nlstate;cpt++) {
- fprintf(fichtm,"\n
- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) : %s%d%d.png
\
-",cpt,nlstate,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1);
+ fprintf(fichtm,"\n
- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) : %s%d%d.svg
\
+",cpt,nlstate,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1);
}
/* } /\* end i1 *\/ */
}/* End k1 */
@@ -4546,7 +4569,14 @@ fprintf(fichtm," \n- Graphs
fprintf(fichtm,"\
\n
- \n\
- Parameter file with estimated parameters and covariance matrix: %s
\
- - 95%% confidence intervals and T statistics are in the log file.
\n", rfileres,rfileres);
+ - 95%% confidence intervals and Wald tests of the estimated parameters are in the log file.
\
+But because parameters are usually highly correlated (a higher incidence of disability \
+and a higher incidence of recovery can give very close observed transition) it might \
+be very useful to look not only at linear confidence intervals estimated from the \
+variances but at the covariance matrix. And instead of looking at the estimated coefficients \
+(parameters) of the logistic regression, it might be more meaningful to visualize the \
+covariance matrix of the one-step probabilities. \
+See page 'Matrix of variance-covariance of one-step probabilities' below. \n", rfileres,rfileres);
fprintf(fichtm," - Standard deviation of one-step probabilities: %s
\n",
subdirf2(fileres,"prob"),subdirf2(fileres,"prob"));
@@ -4594,20 +4624,20 @@ fprintf(fichtm," \n- Graphs
if (cptcovn > 0) {
fprintf(fichtm,"
************ Results for covariates");
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]][codtabm(jj1,cpt)]);
fprintf(fichtm," ************\n
");
}
for(cpt=1; cpt<=nlstate;cpt++) {
fprintf(fichtm,"
- Observed (cross-sectional) and period (incidence based) \
-prevalence (with 95%% confidence interval) in state (%d): %s%d_%d.png
\
-",cpt,subdirf2(optionfilefiname,"v"),cpt,jj1,subdirf2(optionfilefiname,"v"),cpt,jj1);
+prevalence (with 95%% confidence interval) in state (%d): %s%d_%d.svg
\
+",cpt,subdirf2(optionfilefiname,"v"),cpt,jj1,subdirf2(optionfilefiname,"v"),cpt,jj1);
}
fprintf(fichtm,"\n
- Total life expectancy by age and \
health expectancies in states (1) and (2). If popbased=1 the smooth (due to the model) \
true period expectancies (those weighted with period prevalences are also\
drawn in addition to the population based expectancies computed using\
- observed and cahotic prevalences: %s%d.png
\
-",subdirf2(optionfilefiname,"e"),jj1,subdirf2(optionfilefiname,"e"),jj1);
+ observed and cahotic prevalences: %s%d.svg
\
+",subdirf2(optionfilefiname,"e"),jj1,subdirf2(optionfilefiname,"e"),jj1);
/* } /\* end i1 *\/ */
}/* End k1 */
fprintf(fichtm,"
");
@@ -4636,11 +4666,11 @@ void printinggnuplot(char fileres[], cha
fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'vpl' files\n");
for (cpt=1; cpt<= nlstate ; cpt ++) {
for (k1=1; k1<= m ; k1 ++) { /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */
- fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"v"),cpt,k1);
- fprintf(ficgp,"\n#set out \"v%s%d_%d.png\" \n",optionfilefiname,cpt,k1);
+ fprintf(ficgp,"\nset out \"%s%d_%d.svg\" \n",subdirf2(optionfilefiname,"v"),cpt,k1);
+ fprintf(ficgp,"\n#set out \"v%s%d_%d.svg\" \n",optionfilefiname,cpt,k1);
fprintf(ficgp,"set xlabel \"Age\" \n\
set ylabel \"Probability\" \n\
-set ter png small size 320, 240\n\
+set ter svg size 640, 480\n\
plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"%%lf",ageminpar,fage,subdirf2(fileres,"vpl"),k1-1,k1-1);
for (i=1; i<= nlstate ; i ++) {
@@ -4663,8 +4693,8 @@ plot [%.f:%.f] \"%s\" every :::%d::%d u
/*2 eme*/
fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files\n");
for (k1=1; k1<= m ; k1 ++) {
- fprintf(ficgp,"\nset out \"%s%d.png\" \n",subdirf2(optionfilefiname,"e"),k1);
- fprintf(ficgp,"set ylabel \"Years\" \nset ter png small size 320, 240\nplot [%.f:%.f] ",ageminpar,fage);
+ fprintf(ficgp,"\nset out \"%s%d.svg\" \n",subdirf2(optionfilefiname,"e"),k1);
+ fprintf(ficgp,"set ylabel \"Years\" \nset ter svg size 640, 480\nplot [%.f:%.f] ",ageminpar,fage);
for (i=1; i<= nlstate+1 ; i ++) {
k=2*i;
@@ -4697,8 +4727,8 @@ plot [%.f:%.f] \"%s\" every :::%d::%d u
for (cpt=1; cpt<= nlstate ; cpt ++) {
/* k=2+nlstate*(2*cpt-2); */
k=2+(nlstate+1)*(cpt-1);
- fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"exp"),cpt,k1);
- fprintf(ficgp,"set ter png small size 320, 240\n\
+ fprintf(ficgp,"\nset out \"%s%d%d.svg\" \n",subdirf2(optionfilefiname,"exp"),cpt,k1);
+ fprintf(ficgp,"set ter svg size 640, 480\n\
plot [%.f:%.f] \"%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",ageminpar,fage,subdirf2(fileres,"e"),k1-1,k1-1,k,cpt);
/*fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d-2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1);
for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) ");
@@ -4722,9 +4752,9 @@ plot [%.f:%.f] \"%s\" every :::%d::%d u
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
k=3;
fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, cov=%d state=%d",k1, cpt);
- fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"p"),cpt,k1);
+ fprintf(ficgp,"\nset out \"%s%d_%d.svg\" \n",subdirf2(optionfilefiname,"p"),cpt,k1);
fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\
-set ter png small size 320, 240\n\
+set ter svg size 640, 480\n\
unset log y\n\
plot [%.f:%.f] ", ageminpar, agemaxpar);
for (i=1; i<= nlstate ; i ++){
@@ -4779,12 +4809,12 @@ plot [%.f:%.f] ", ageminpar, agemaxpar)
fprintf(ficgp,"# jk=1 to 2^%d=%d\n",cptcoveff,m);
for(jk=1; jk <=m; jk++) {
fprintf(ficgp,"# jk=%d\n",jk);
- fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"pe"),jk,ng);
+ fprintf(ficgp,"\nset out \"%s%d_%d.svg\" \n",subdirf2(optionfilefiname,"pe"),jk,ng);
if (ng==2)
fprintf(ficgp,"\nset ylabel \"Quasi-incidence per year\"\n");
else
fprintf(ficgp,"\nset title \"Probability\"\n");
- fprintf(ficgp,"\nset ter png small size 320, 240\nset log y\nplot [%.f:%.f] ",ageminpar,agemaxpar);
+ fprintf(ficgp,"\nset ter svg size 640, 480\nset log y\nplot [%.f:%.f] ",ageminpar,agemaxpar);
i=1;
for(k2=1; k2<=nlstate; k2++) {
k3=i;
@@ -4802,12 +4832,15 @@ plot [%.f:%.f] ", ageminpar, agemaxpar)
fprintf(ficgp," exp(p%d+p%d*x+p%d*x*x",i,i+1,i+1+nagesqr);
ij=1;/* To be checked else nbcode[0][0] wrong */
for(j=3; j <=ncovmodel-nagesqr; j++) {
- if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) { /* Bug valgrind */
- fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]);
- ij++;
+ /* printf("Tage[%d]=%d, j=%d\n", ij, Tage[ij], j); */
+ if(ij <=cptcovage) { /* Bug valgrind */
+ if((j-2)==Tage[ij]) { /* Bug valgrind */
+ fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,Tvar[j-2])]);
+ ij++;
+ }
}
else
- fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtab[jk][j-2]]);
+ fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);
}
fprintf(ficgp,")/(1");
@@ -4819,12 +4852,14 @@ plot [%.f:%.f] ", ageminpar, agemaxpar)
ij=1;
for(j=3; j <=ncovmodel-nagesqr; j++){
- if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) {
- fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]);
- ij++;
+ if(ij <=cptcovage) { /* Bug valgrind */
+ if((j-2)==Tage[ij]) { /* Bug valgrind */
+ fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,Tvar[j-2])]);
+ ij++;
+ }
}
else
- fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtab[jk][j-2]]);
+ fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);
}
fprintf(ficgp,")");
}
@@ -4951,7 +4986,7 @@ void prevforecast(char fileres[], double
k=k+1;
fprintf(ficresf,"\n#******");
for(j=1;j<=cptcoveff;j++) {
- fprintf(ficresf," V%d=%d, hpijx=probability over h years, hp.jx is weighted by observed prev ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
+ fprintf(ficresf," V%d=%d, hpijx=probability over h years, hp.jx is weighted by observed prev ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
fprintf(ficresf,"******\n");
fprintf(ficresf,"# Covariate valuofcovar yearproj age");
@@ -4975,7 +5010,7 @@ void prevforecast(char fileres[], double
if (h*hstepm/YEARM*stepm ==yearp) {
fprintf(ficresf,"\n");
for(j=1;j<=cptcoveff;j++)
- fprintf(ficresf,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
+ fprintf(ficresf,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
fprintf(ficresf,"%.f %.f ",anproj1+yearp,agec+h*hstepm/YEARM*stepm);
}
for(j=1; j<=nlstate+ndeath;j++) {
@@ -5073,7 +5108,7 @@ void populforecast(char fileres[], doubl
k=k+1;
fprintf(ficrespop,"\n#******");
for(j=1;j<=cptcoveff;j++) {
- fprintf(ficrespop," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
+ fprintf(ficrespop," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
fprintf(ficrespop,"******\n");
fprintf(ficrespop,"# Age");
@@ -5388,7 +5423,7 @@ void printinghtmlmort(char fileres[], ch
fprintf(fichtm," mu(age) =%lf*exp(%lf*(age-%d)) per year
",p[1],p[2],agegomp);
for (i=1;i<=2;i++)
fprintf(fichtm," p[%d] = %lf [%f ; %f]
\n",i,p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i]));
- fprintf(fichtm,"
");
+ fprintf(fichtm,"
");
fprintf(fichtm,"
");
fprintf(fichtm,"Life table
\n
");
@@ -5417,9 +5452,9 @@ void printinggnuplotmort(char fileres[],
strcpy(dirfileres,optionfilefiname);
strcpy(optfileres,"vpl");
- fprintf(ficgp,"set out \"graphmort.png\"\n ");
+ fprintf(ficgp,"set out \"graphmort.svg\"\n ");
fprintf(ficgp,"set xlabel \"Age\"\n set ylabel \"Force of mortality (per year)\" \n ");
- fprintf(ficgp, "set ter png small size 320, 240\n set log y\n");
+ fprintf(ficgp, "set ter svg size 640, 480\n set log y\n");
/* fprintf(ficgp, "set size 0.65,0.65\n"); */
fprintf(ficgp,"plot [%d:100] %lf*exp(%lf*(x-%d))",agegomp,p[1],p[2],agegomp);
@@ -5440,8 +5475,8 @@ int readdata(char datafile[], int firsto
if((fic=fopen(datafile,"r"))==NULL) {
- printf("Problem while opening datafile: %s\n", datafile);return 1;
- fprintf(ficlog,"Problem while opening datafile: %s\n", datafile);return 1;
+ printf("Problem while opening datafile: %s\n", datafile);fflush(stdout);
+ fprintf(ficlog,"Problem while opening datafile: %s\n", datafile);fflush(ficlog);return 1;
}
i=1;
@@ -5730,9 +5765,9 @@ int decodemodel ( char model[], int last
/* k=1 Tvar[1]=2 (from V2) */
/* k=5 Tvar[5] */
/* for (k=1; k<=cptcovn;k++) { */
- /* cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; */
+ /* cov[2+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; */
/* } */
- /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtab[ij][Tvar[Tage[k]]]]*cov[2]; */
+ /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k])]]*cov[2]; */
/*
* Treating invertedly V2+V1+V3*age+V2*V4 is as if written V2*V4 +V3*age + V1 + V2 */
for(k=cptcovt; k>=1;k--) /**< Number of covariates */
@@ -6143,14 +6178,14 @@ int prevalence_limit(double *p, double *
//for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
k=k+1;
/* to clean */
- //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtab[cptcod][cptcov]);
+ //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));
fprintf(ficrespl,"\n#******");
printf("\n#******");
fprintf(ficlog,"\n#******");
for(j=1;j<=cptcoveff;j++) {
- fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
- printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
- fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
+ fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
+ printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
+ fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
fprintf(ficrespl,"******\n");
printf("******\n");
@@ -6158,7 +6193,7 @@ int prevalence_limit(double *p, double *
fprintf(ficrespl,"#Age ");
for(j=1;j<=cptcoveff;j++) {
- fprintf(ficrespl,"V%d %d",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
+ fprintf(ficrespl,"V%d %d",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
for(i=1; i<=nlstate;i++) fprintf(ficrespl,"%d-%d ",i,i);
fprintf(ficrespl,"\n");
@@ -6168,7 +6203,7 @@ int prevalence_limit(double *p, double *
prevalim(prlim, nlstate, p, age, oldm, savm,ftolpl,k);
fprintf(ficrespl,"%.0f ",age );
for(j=1;j<=cptcoveff;j++)
- fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
+ fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
for(i=1; i<=nlstate;i++)
fprintf(ficrespl," %.5f", prlim[i][i]);
fprintf(ficrespl,"\n");
@@ -6215,7 +6250,7 @@ int hPijx(double *p, int bage, int fage)
for (k=1; k <= (int) pow(2,cptcoveff); k++){
fprintf(ficrespij,"\n#****** ");
for(j=1;j<=cptcoveff;j++)
- fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
+ fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
fprintf(ficrespij,"******\n");
for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */
@@ -6267,6 +6302,7 @@ int main(int argc, char *argv[])
int jj, ll, li, lj, lk;
int numlinepar=0; /* Current linenumber of parameter file */
+ int num_filled;
int itimes;
int NDIM=2;
int vpopbased=0;
@@ -6285,11 +6321,13 @@ int main(int argc, char *argv[])
double ***mobaverage;
char line[MAXLINE];
- char path[MAXLINE],pathc[MAXLINE],pathcd[MAXLINE],pathtot[MAXLINE],model[MAXLINE];
+ char path[MAXLINE],pathc[MAXLINE],pathcd[MAXLINE],pathtot[MAXLINE];
+
+ char model[MAXLINE], modeltemp[MAXLINE];
char pathr[MAXLINE], pathimach[MAXLINE];
char *tok, *val; /* pathtot */
int firstobs=1, lastobs=10;
- int c, h , cpt;
+ int c, h , cpt, c2;
int jl=0;
int i1, j1, jk, stepsize=0;
int count=0;
@@ -6365,7 +6403,7 @@ int main(int argc, char *argv[])
getcwd(pathcd, size);
#endif
syscompilerinfo(0);
- printf("\n%s\n%s",version,fullversion);
+ printf("\nIMaCh version %s, %s\n%s",version, copyright, fullversion);
if(argc <=1){
printf("\nEnter the parameter file name: ");
fgets(pathr,FILENAMELENGTH,stdin);
@@ -6429,7 +6467,7 @@ int main(int argc, char *argv[])
goto end;
}
fprintf(ficlog,"Log filename:%s\n",filelog);
- fprintf(ficlog,"\n%s\n%s",version,fullversion);
+ fprintf(ficlog,"Version %s %s",version,fullversion);
fprintf(ficlog,"\nEnter the parameter file name: \n");
fprintf(ficlog,"pathimach=%s\npathtot=%s\n\
path=%s \n\
@@ -6437,7 +6475,7 @@ int main(int argc, char *argv[])
optionfilext=%s\n\
optionfilefiname='%s'\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname);
- syscompilerinfo(0);
+ syscompilerinfo(1);
printf("Local time (at start):%s",strstart);
fprintf(ficlog,"Local time (at start): %s",strstart);
@@ -6473,23 +6511,82 @@ int main(int argc, char *argv[])
/* Reads comments: lines beginning with '#' */
numlinepar=0;
- while((c=getc(ficpar))=='#' && c!= EOF){
- ungetc(c,ficpar);
- fgets(line, MAXLINE, ficpar);
+
+ /* First parameter line */
+ while(fgets(line, MAXLINE, ficpar)) {
+ /* If line starts with a # it is a comment */
+ if (line[0] == '#') {
+ numlinepar++;
+ fputs(line,stdout);
+ fputs(line,ficparo);
+ fputs(line,ficlog);
+ continue;
+ }else
+ break;
+ }
+ if((num_filled=sscanf(line,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\n", \
+ title, datafile, &lastobs, &firstpass,&lastpass)) !=EOF){
+ if (num_filled != 5) {
+ printf("Should be 5 parameters\n");
+ }
numlinepar++;
- fputs(line,stdout);
- fputs(line,ficparo);
- fputs(line,ficlog);
+ printf("title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\n", title, datafile, lastobs, firstpass,lastpass);
+ }
+ /* Second parameter line */
+ while(fgets(line, MAXLINE, ficpar)) {
+ /* If line starts with a # it is a comment */
+ if (line[0] == '#') {
+ numlinepar++;
+ fputs(line,stdout);
+ fputs(line,ficparo);
+ fputs(line,ficlog);
+ continue;
+ }else
+ break;
+ }
+ if((num_filled=sscanf(line,"ftol=%lf stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n", \
+ &ftol, &stepm, &ncovcol, &nlstate, &ndeath, &maxwav, &mle, &weightopt)) !=EOF){
+ if (num_filled != 8) {
+ printf("Not 8\n");
+ }
+ printf("ftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n",ftol, stepm, ncovcol, nlstate,ndeath, maxwav, mle, weightopt);
}
- ungetc(c,ficpar);
- fscanf(ficpar,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%lf stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d model=1+age+%s\n",title, datafile, &lastobs, &firstpass,&lastpass,&ftol, &stepm, &ncovcol, &nlstate,&ndeath, &maxwav, &mle, &weightopt,model);
- numlinepar=numlinepar+3; /* In general */
- printf("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);
+ /* Third parameter line */
+ while(fgets(line, MAXLINE, ficpar)) {
+ /* If line starts with a # it is a comment */
+ if (line[0] == '#') {
+ numlinepar++;
+ fputs(line,stdout);
+ fputs(line,ficparo);
+ fputs(line,ficlog);
+ continue;
+ }else
+ break;
+ }
+ if((num_filled=sscanf(line,"model=1+age%[^.\n]\n", model)) !=EOF){
+ if (num_filled != 1) {
+ printf("ERROR %d: Model should be at minimum 'model=1+age.' %s\n",num_filled, line);
+ fprintf(ficlog,"ERROR %d: Model should be at minimum 'model=1+age.' %s\n",num_filled, line);
+ model[0]='\0';
+ goto end;
+ }
+ else{
+ if (model[0]=='+'){
+ for(i=1; i<=strlen(model);i++)
+ modeltemp[i-1]=model[i];
+ }
+ strcpy(model,modeltemp);
+ }
+ /* printf(" model=1+age%s modeltemp= %s, model=%s\n",model, modeltemp, model);fflush(stdout); */
+ }
+ /* fscanf(ficpar,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%lf stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d model=1+age+%s\n",title, datafile, &lastobs, &firstpass,&lastpass,&ftol, &stepm, &ncovcol, &nlstate,&ndeath, &maxwav, &mle, &weightopt,model); */
+ /* numlinepar=numlinepar+3; /\* In general *\/ */
+ /* printf("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); */
if(model[strlen(model)-1]=='.') /* Suppressing leading dot in the model */
model[strlen(model)-1]='\0';
- 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(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);
fflush(ficlog);
/* if(model[0]=='#'|| model[0]== '\0'){ */
if(model[0]=='#'){
@@ -6505,6 +6602,10 @@ int main(int argc, char *argv[])
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
numlinepar++;
+ if(line[1]=='q'){ /* This #q will quit imach (the answer is q) */
+ z[0]=line[1];
+ }
+ /* printf("****line [1] = %c \n",line[1]); */
fputs(line, stdout);
//puts(line);
fputs(line,ficparo);
@@ -6821,7 +6922,7 @@ Please run with mle=-1 to get a correct
/* 1 to ncodemax[j] is the maximum value of this jth covariate */
codtab=imatrix(1,100,1,10); /* codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) */
- /*printf(" codtab[1,1],codtab[100,10]=%d,%d\n", codtab[1][1],codtab[100][10]);*/
+ /*printf(" codtab[1,1],codtab[100,10]=%d,%d\n", codtab[1][1],codtabm(100,10));*/
/* codtab gives the value 1 or 2 of the hth combination of k covariates (1 or 2).*/
h=0;
@@ -6831,13 +6932,6 @@ Please run with mle=-1 to get a correct
m=pow(2,cptcoveff);
- for(k=1;k<=cptcoveff; k++){ /* scans any effective covariate */
- for(i=1; i <=pow(2,cptcoveff-k);i++){ /* i=1 to 8/1=8; i=1 to 8/2=4; i=1 to 8/8=1 */
- for(j=1; j <= ncodemax[k]; j++){ /* For each modality of this covariate ncodemax=2*/
- for(cpt=1; cpt <=pow(2,k-1); cpt++){ /* cpt=1 to 8/2**(3+1-1 or 3+1-3) =1 or 4 */
- h++;
- if (h>m)
- h=1;
/**< codtab(h,k) k = codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) + 1
* For k=4 covariates, h goes from 1 to 2**k
* codtabm(h,k)= 1 & (h-1) >> (k-1) ;
@@ -6851,32 +6945,47 @@ Please run with mle=-1 to get a correct
* 6 2 1 2 1
* 7 i=4 1 2 2 1
* 8 2 2 2 1
- * 9 i=5 1 i=3 1 i=2 1 1
- * 10 2 1 1 1
- * 11 i=6 1 2 1 1
- * 12 2 2 1 1
- * 13 i=7 1 i=4 1 2 1
- * 14 2 1 2 1
- * 15 i=8 1 2 2 1
- * 16 2 2 2 1
+ * 9 i=5 1 i=3 1 i=2 1 2
+ * 10 2 1 1 2
+ * 11 i=6 1 2 1 2
+ * 12 2 2 1 2
+ * 13 i=7 1 i=4 1 2 2
+ * 14 2 1 2 2
+ * 15 i=8 1 2 2 2
+ * 16 2 2 2 2
*/
- codtab[h][k]=j;
- /* codtab[12][3]=1; */
- /*codtab[h][Tvar[k]]=j;*/
- printf("h=%d k=%d j=%d codtab[h][k]=%d Tvar[k]=%d codtab[h][Tvar[k]]=%d \n",h, k,j,codtab[h][k],Tvar[k],codtab[h][Tvar[k]]);
- }
- }
- }
- }
+ for(h=1; h <=100 ;h++){
+ /* printf("h=%2d ", h); */
+ for(k=1; k <=10; k++){
+ /* printf("k=%d %d ",k,codtabm(h,k)); */
+ codtab[h][k]=codtabm(h,k);
+ }
+ /* printf("\n"); */
+ }
+ /* for(k=1;k<=cptcoveff; k++){ /\* scans any effective covariate *\/ */
+ /* for(i=1; i <=pow(2,cptcoveff-k);i++){ /\* i=1 to 8/1=8; i=1 to 8/2=4; i=1 to 8/8=1 *\/ */
+ /* for(j=1; j <= ncodemax[k]; j++){ /\* For each modality of this covariate ncodemax=2*\/ */
+ /* for(cpt=1; cpt <=pow(2,k-1); cpt++){ /\* cpt=1 to 8/2**(3+1-1 or 3+1-3) =1 or 4 *\/ */
+ /* h++; */
+ /* if (h>m) */
+ /* h=1; */
+ /* codtab[h][k]=j; */
+ /* /\* codtab[12][3]=1; *\/ */
+ /* /\*codtab[h][Tvar[k]]=j;*\/ */
+ /* /\* printf("h=%d k=%d j=%d codtab[h][k]=%d Tvar[k]=%d codtab[h][Tvar[k]]=%d \n",h, k,j,codtab[h][k],Tvar[k],codtab[h][Tvar[k]]); *\/ */
+ /* } */
+ /* } */
+ /* } */
+ /* } */
/* printf("codtab[1][2]=%d codtab[2][2]=%d",codtab[1][2],codtab[2][2]);
codtab[1][2]=1;codtab[2][2]=2; */
- /* for(i=1; i <=m ;i++){
- for(k=1; k <=cptcovn; k++){
- printf("i=%d k=%d %d %d ",i,k,codtab[i][k], cptcoveff);
- }
- printf("\n");
- }
- scanf("%d",i);*/
+ /* for(i=1; i <=m ;i++){ */
+ /* for(k=1; k <=cptcovn; k++){ */
+ /* printf("i=%d k=%d %d %d ",i,k,codtab[i][k], cptcoveff); */
+ /* } */
+ /* printf("\n"); */
+ /* } */
+ /* scanf("%d",i);*/
free_ivector(Ndum,-1,NCOVMAX);
@@ -7239,16 +7348,16 @@ Please run with mle=-1 to get a correct
ftolhess=ftol; /* Usually correct */
hesscov(matcov, p, npar, delti, ftolhess, func);
}
- printf("Parameters and 95%% confidence intervals\n");
- fprintf(ficlog, "Parameters, T and confidence intervals\n");
+ printf("Parameters and 95%% confidence intervals\n W is simply the result of the division of the parameter by the square root of covariance of the parameter.\n And Wald-based confidence intervals plus and minus 1.96 * W .\n But be careful that parameters are highly correlated because incidence of disability is highly correlated to incidence of recovery.\n It might be better to visualize the covariance matrix. See the page 'Matrix of variance-covariance of one-step probabilities' and its graphs.\n");
+ fprintf(ficlog, "Parameters, Wald tests and Wald-based confidence intervals\n W is simply the result of the division of the parameter by the square root of covariance of the parameter.\n And Wald-based confidence intervals plus and minus 1.96 * W \n It might be better to visualize the covariance matrix. See the page 'Matrix of variance-covariance of one-step probabilities' and its graphs.\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]));
+ printf("%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));
+ fprintf(ficlog,"%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));
jk++;
}
printf("\n");
@@ -7633,7 +7742,7 @@ Please run with mle=-1 to get a correct
for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/
- oldm=oldms;savm=savms; /* Segmentation fault */
+ oldm=oldms;savm=savms; /* ZZ Segmentation fault */
cptcod= 0; /* To be deleted */
varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); /* cptcod not initialized Intel */
fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n# (weighted average of eij where weights are ");
@@ -7644,10 +7753,10 @@ Please run with mle=-1 to get a correct
fprintf(ficrest,"# Age e.. (std) ");
for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i);
fprintf(ficrest,"\n");
-
+ /* printf("Which p?\n"); for(i=1;i<=npar;i++)printf("p[i=%d]=%lf,",i,p[i]);printf("\n"); */
epj=vector(1,nlstate+1);
for(age=bage; age <=fage ;age++){
- prevalim(prlim, nlstate, p, age, oldm, savm,ftolpl,k);
+ prevalim(prlim, nlstate, p, age, oldm, savm,ftolpl,k); /*ZZ Is it the correct prevalim */
if (vpopbased==1) {
if(mobilav ==0){
for(i=1; i<=nlstate;i++)
@@ -7659,13 +7768,16 @@ Please run with mle=-1 to get a correct
}
fprintf(ficrest," %4.0f",age);
+ /* printf(" age %4.0f ",age); */
for(j=1, epj[nlstate+1]=0.;j <=nlstate;j++){
for(i=1, epj[j]=0.;i <=nlstate;i++) {
epj[j] += prlim[i][i]*eij[i][j][(int)age];
- /* printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/
+ /*ZZZ printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/
+ /* printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]); */
}
epj[nlstate+1] +=epj[j];
}
+ /* printf(" age %4.0f \n",age); */
for(i=1, vepp=0.;i <=nlstate;i++)
for(j=1;j <=nlstate;j++)
@@ -7849,7 +7961,7 @@ Please run with mle=-1 to get a correct
}
end:
while (z[0] != 'q') {
- printf("\nType q for exiting: ");
+ printf("\nType q for exiting: "); fflush(stdout);
scanf("%s",z);
}
}