--- imach/src/imach.c 2015/07/14 10:00:33 1.191
+++ imach/src/imach.c 2015/09/07 14:09:23 1.199
@@ -1,6 +1,35 @@
-/* $Id: imach.c,v 1.191 2015/07/14 10:00:33 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.
+
+ 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
@@ -605,6 +634,7 @@
/* #define DEBUG */
/* #define DEBUGBRENT */
#define POWELL /* Instead of NLOPT */
+#define POWELLF1F3 /* Skip test */
/* #define POWELLORIGINAL /\* Don't use Directest to decide new direction but original Powell test *\/ */
/* #define MNBRAKORIGINAL /\* Don't use mnbrak fix *\/ */
@@ -673,11 +703,12 @@ 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
#define AGEBASE 40
+#define AGEOVERFLOW 1.e20
#define AGEGOMP 10 /**< Minimal age for Gompertz adjustment */
#ifdef _WIN32
#define DIRSEPARATOR '\\'
@@ -689,11 +720,12 @@ typedef struct {
#define ODIRSEPARATOR '\\'
#endif
-/* $Id: imach.c,v 1.191 2015/07/14 10:00:33 brouard Exp $ */
+/* $Id: imach.c,v 1.199 2015/09/07 14:09:23 brouard Exp $ */
/* $State: Exp $ */
-
-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: 1.191 $ $Date: 2015/07/14 10:00:33 $";
+#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 */
@@ -827,7 +859,13 @@ int estepm;
int m,nb;
long *num;
-int firstpass=0, lastpass=4,*cod, *ncodemax, *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. */
+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 **pmmij, ***probs;
double *ageexmed,*agecens;
@@ -841,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;
@@ -1559,10 +1598,10 @@ void linmin(double p[], double xi[], int
xicom[j]=xi[j];
}
- axs=0.0;
- xxss=1; /* 1 and using scale */
+ /* axs=0.0; */
+ /* xxss=1; /\* 1 and using scale *\/ */
xxs=1;
- do{
+ /* do{ */
ax=0.;
xx= xxs;
mnbrak(&ax,&xx,&bx,&fa,&fx,&fb,f1dim); /* Outputs: xtx[j]=pcom[j]+(*xx)*xicom[j]; fx=f(xtx[j]) */
@@ -1572,11 +1611,11 @@ 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) */
/* 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]]*/
- if (fx != fx){
- 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);
- }
- }while(fx != fx);
+ /* if (fx != fx){ */
+ /* 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); */
+ /* } */
+ /* }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);
@@ -1653,7 +1692,7 @@ 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);
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); */
- for (i=1;i<=n;i++) {
+ for (i=1;i<=n;i++) {
printf(" %d %.12f",i, p[i]);
fprintf(ficlog," %d %.12lf",i, p[i]);
fprintf(ficrespow," %.12lf", p[i]);
@@ -1761,7 +1800,7 @@ void powell(double p[], double **xi, int
free_vector(ptt,1,n);
free_vector(pt,1,n);
return;
- }
+ } /* enough precision */
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) */
ptt[j]=2.0*p[j]-pt[j];
@@ -1769,7 +1808,10 @@ void powell(double p[], double **xi, int
pt[j]=p[j];
}
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 */
+#endif
/* (x1 f1=fp), (x2 f2=*fret), (x3 f3=fptt), (xm fm) */
/* From x1 (P0) distance of x2 is at h and x3 is 2h */
/* Let f"(x2) be the 2nd derivative equal everywhere. */
@@ -1798,11 +1840,11 @@ void powell(double p[], double **xi, int
if (t < 0.0) { /* Then we use it for new direction */
#else
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("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,"f1-2f2+f3= %.12lf, f1-f2-del= %.12lf, f1-f3= %.12lf\n",fp-2.0*(*fret)+fptt, fp -(*fret) -del, fp-fptt);
- }
+ 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);
+ 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);
+ }
if (directest < 0.0) { /* Then we use it for new direction */
#endif
#ifdef DEBUGLINMIN
@@ -1838,9 +1880,12 @@ void powell(double p[], double **xi, int
printf("\n");
fprintf(ficlog,"\n");
#endif
- } /* end of t negative */
+ } /* end of t or directest negative */
+#ifdef POWELLF1F3
+#else
} /* end if (fptt < fp) */
- }
+#endif
+ } /* loop iteration */
}
/**** Prevalence limit (stable or period prevalence) ****************/
@@ -1872,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]);*/
@@ -2051,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);*/
@@ -2875,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 ********************/
@@ -2927,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*/
}
}
@@ -2962,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++)
@@ -3093,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) {
@@ -3298,11 +3343,11 @@ void tricode(int *Tvar, int **nbcode, in
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 */
/* 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 (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
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
@@ -3325,15 +3370,24 @@ void tricode(int *Tvar, int **nbcode, in
/* 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
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);
+ fprintf(ficlog," Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj);
cptcode=modmaxcovj;
/* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */
/*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 */
- printf("Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], i, Ndum[i]);
- if( Ndum[i] != 0 ){ /* Counts if nobody answered, empty modality */
- ncodemax[j]++; /* ncodemax[j]= Number of non-null modalities of the j th covariate. */
+ 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], k, Ndum[k]);
+ fprintf(ficlog, "Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], k, Ndum[k]);
+ 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
historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */
@@ -3350,20 +3404,31 @@ 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=1; /* 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 (k=0; k<= cptcode; k++) { /* k=-1 ? k=0 to 1 *//* Could be 1 to 4 */
- /*recode from 0 */
- 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.
- 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; */
- ij++;
- }
- if (ij > ncodemax[j]) break;
- } /* end of loop on */
- } /* end of loop on modality */
+ 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 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 */
+
+ /* for (k=0; k<= cptcode; k++) { /\* k=-1 ? k=0 to 1 *\//\* Could be 1 to 4 *\//\* cptcode=modmaxcovj *\/ */
+ /* /\*recode from 0 *\/ */
+ /* 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*/
for (k=-1; k< maxncov; k++) Ndum[k]=0;
@@ -3374,17 +3439,18 @@ void tricode(int *Tvar, int **nbcode, in
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) */
/*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/
if((Ndum[i]!=0) && (i<=ncovcol)){
+ ij++;
/*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/
Tvaraff[ij]=i; /*For printing (unclear) */
- ij++;
- }else
- Tvaraff[ij]=0;
+ }else{
+ /* Tvaraff[ij]=0; */
+ }
}
- ij--;
+ /* ij--; */
cptcoveff=ij; /*Number of total covariates*/
}
@@ -3988,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); */
@@ -3998,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);
@@ -4175,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. \
@@ -4199,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#");
}
@@ -4228,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
@@ -4236,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++){
@@ -4388,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",\
@@ -4413,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 */
@@ -4470,40 +4536,49 @@ fprintf(fichtm," \n- Graphs
jj1=0;
for(k1=1; k1<=m;k1++){
- for(i1=1; i1<=ncodemax[k1];i1++){
+ /* for(i1=1; i1<=ncodemax[k1];i1++){ */
jj1++;
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]]);
+ for (cpt=1; cpt<=cptcoveff;cpt++){
+ 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 i1 *\/ */
}/* End k1 */
fprintf(fichtm,"
");
-
fprintf(fichtm,"\
\n
\n\
- - Parameter file with estimated parameters and covariance matrix: %s
\n", rfileres,rfileres);
+ - Parameter file with estimated parameters and covariance matrix: %s
\
+ - 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," - Variance of one-step probabilities: %s
\n",
+ fprintf(fichtm," - Standard deviation of one-step probabilities: %s
\n",
subdirf2(fileres,"prob"),subdirf2(fileres,"prob"));
fprintf(fichtm,"\
- Variance-covariance of one-step probabilities: %s
\n",
@@ -4544,26 +4619,26 @@ fprintf(fichtm," \n- Graphs
jj1=0;
for(k1=1; k1<=m;k1++){
- for(i1=1; i1<=ncodemax[k1];i1++){
+ /* for(i1=1; i1<=ncodemax[k1];i1++){ */
jj1++;
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);
- } /* end i1 */
+ observed and cahotic prevalences: %s%d.svg
\
+",subdirf2(optionfilefiname,"e"),jj1,subdirf2(optionfilefiname,"e"),jj1);
+ /* } /\* end i1 *\/ */
}/* End k1 */
fprintf(fichtm,"
");
fflush(fichtm);
@@ -4591,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 ++) {
@@ -4618,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;
@@ -4652,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) ");
@@ -4677,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 ++){
@@ -4734,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;
@@ -4757,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");
@@ -4774,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,")");
}
@@ -4906,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");
@@ -4930,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++) {
@@ -5028,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");
@@ -5343,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
");
@@ -5372,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);
@@ -5395,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;
@@ -5597,8 +5677,8 @@ int decodemodel ( char model[], int last
if (strlen(model) >1){ /* If there is at least 1 covariate */
j=0, j1=0, k1=0, k2=-1, ks=0, cptcovn=0;
if (strstr(model,"AGE") !=0){
- 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);
+ 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);
return 1;
}
if (strstr(model,"v") !=0){
@@ -5611,10 +5691,10 @@ int decodemodel ( char model[], int last
printf(" strpt=%s, model=%s\n",strpt, model);
if(strpt != model){
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);
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);
return 1;
}
@@ -5685,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 */
@@ -6098,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");
@@ -6113,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");
@@ -6123,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");
@@ -6170,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 */
@@ -6222,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;
@@ -6231,7 +6312,8 @@ int main(int argc, char *argv[])
/* FILE *ficgp;*/ /*Gnuplot File */
struct stat info;
double agedeb=0.;
- double ageminpar=1.e20,agemin=1.e20, agemaxpar=-1.e20, agemax=-1.e20;
+
+ double ageminpar=AGEOVERFLOW,agemin=AGEOVERFLOW, agemaxpar=-AGEOVERFLOW, agemax=-AGEOVERFLOW;
double fret;
double dum=0.; /* Dummy variable */
@@ -6239,13 +6321,17 @@ 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;
+
int *tab;
int mobilavproj=0 , prevfcast=0 ; /* moving average of prev, If prevfcast=1 prevalence projection */
int mobilav=0,popforecast=0;
@@ -6317,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);
@@ -6381,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\
@@ -6389,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);
@@ -6425,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++;
- 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]=='#'){
@@ -6457,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);
@@ -6498,8 +6647,8 @@ int main(int argc, char *argv[])
}
else if(mle==-3) { /* Main Wizard */
prwizard(ncovmodel, nlstate, ndeath, model, ficparo);
- printf(" You choose 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);
+ printf(" You chose 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);
matcov=matrix(1,npar,1,npar);
}
@@ -6523,7 +6672,7 @@ int main(int argc, char *argv[])
if(jj==i) continue;
j++;
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 \
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);
@@ -6531,8 +6680,8 @@ run imach with mle=-1 to get a correct t
}
fprintf(ficparo,"%1d%1d",i1,j1);
if(mle==1)
- printf("%1d%1d",i,j);
- fprintf(ficlog,"%1d%1d",i,j);
+ printf("%1d%1d",i,jj);
+ fprintf(ficlog,"%1d%1d",i,jj);
for(k=1; k<=ncovmodel;k++){
fscanf(ficpar," %lf",¶m[i][j][k]);
if(mle==1){
@@ -6613,12 +6762,22 @@ run imach with mle=-1 to get a correct t
for(i=1; i <=npar; i++)
for(j=1; j <=npar; j++) matcov[i][j]=0.;
+ /* Scans npar lines */
for(i=1; i <=npar; i++){
- fscanf(ficpar,"%s",str);
+ count=fscanf(ficpar,"%1d%1d%1d",&i1,&j1,&jk);
+ if(count != 3){
+ printf("Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\
+This is probably because your covariance matrix doesn't \n contain exactly %d lines corresponding to your model line '1+age+%s'.\n\
+Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model);
+ fprintf(ficlog,"Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\
+This is probably because your covariance matrix doesn't \n contain exactly %d lines corresponding to your model line '1+age+%s'.\n\
+Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model);
+ exit(1);
+ }else
if(mle==1)
- printf("%s",str);
- fprintf(ficlog,"%s",str);
- fprintf(ficparo,"%s",str);
+ printf("%1d%1d%1d",i1,j1,jk);
+ fprintf(ficlog,"%1d%1d%1d",i1,j1,jk);
+ fprintf(ficparo,"%1d%1d%1d",i1,j1,jk);
for(j=1; j <=i; j++){
fscanf(ficpar," %le",&matcov[i][j]);
if(mle==1){
@@ -6634,6 +6793,7 @@ run imach with mle=-1 to get a correct t
fprintf(ficlog,"\n");
fprintf(ficparo,"\n");
}
+ /* End of read covariance matrix npar lines */
for(i=1; i <=npar; i++)
for(j=i+1;j<=npar;j++)
matcov[i][j]=matcov[j][i];
@@ -6673,6 +6833,7 @@ 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 */
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 */
+ 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 */
if (readdata(datafile, firstobs, lastobs, &imx)==1)
@@ -6761,7 +6922,7 @@ run imach with mle=-1 to get a correct t
/* 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;
@@ -6771,13 +6932,6 @@ run imach with mle=-1 to get a correct t
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) ;
@@ -6791,32 +6945,47 @@ run imach with mle=-1 to get a correct t
* 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);
@@ -7072,9 +7241,10 @@ 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);
- 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]));
-
+ 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);
lpop=vector(1,AGESUP);
tpop=vector(1,AGESUP);
@@ -7106,8 +7276,15 @@ Interval (in months) between two waves:
replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */
- printinggnuplotmort(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
-
+ if(ageminpar == AGEOVERFLOW ||agemaxpar == AGEOVERFLOW){
+ printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
+This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\
+Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
+ fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
+This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\
+Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
+ }else
+ printinggnuplotmort(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
printinghtmlmort(fileres,title,datafile, firstpass, lastpass, \
stepm, weightopt,\
model,imx,p,matcov,agemortsup);
@@ -7142,7 +7319,7 @@ Interval (in months) between two waves:
}
/*--------- 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");
@@ -7171,6 +7348,24 @@ Interval (in months) between two waves:
ftolhess=ftol; /* Usually correct */
hesscov(matcov, p, npar, delti, ftolhess, func);
}
+ 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 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");
+ fprintf(ficlog,"\n");
+ }
+ }
+ }
+
fprintf(ficres,"# Scales (for hessian or gradient estimation)\n");
printf("# Scales (for hessian or gradient estimation)\n");
fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n");
@@ -7327,6 +7522,7 @@ Interval (in months) between two waves:
dateprev2=anprev2+(mprev2-1)/12.+(jprev2-1)/365.;
fscanf(ficpar,"pop_based=%d\n",&popbased);
+ fprintf(ficlog,"pop_based=%d\n",popbased);
fprintf(ficparo,"pop_based=%d\n",popbased);
fprintf(ficres,"pop_based=%d\n",popbased);
@@ -7351,7 +7547,15 @@ Interval (in months) between two waves:
/* ,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2); */
replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */
- printinggnuplot(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
+ if(ageminpar == AGEOVERFLOW ||agemaxpar == -AGEOVERFLOW){
+ printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
+This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\
+Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
+ fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
+This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\
+Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
+ }else
+ printinggnuplot(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
printinghtml(fileres,title,datafile, firstpass, lastpass, stepm, weightopt,\
model,imx,jmin,jmax,jmean,rfileres,popforecast,estepm,\
@@ -7538,7 +7742,7 @@ Interval (in months) between two waves:
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 ");
@@ -7549,10 +7753,10 @@ Interval (in months) between two waves:
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++)
@@ -7564,13 +7768,16 @@ Interval (in months) between two waves:
}
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++)
@@ -7646,6 +7853,7 @@ Interval (in months) between two waves:
free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel);
free_ivector(ncodemax,1,NCOVMAX);
+ free_ivector(ncodemaxwundef,1,NCOVMAX);
free_ivector(Tvar,1,NCOVMAX);
free_ivector(Tprod,1,NCOVMAX);
free_ivector(Tvaraff,1,NCOVMAX);
@@ -7753,7 +7961,7 @@ Interval (in months) between two waves:
}
end:
while (z[0] != 'q') {
- printf("\nType q for exiting: ");
+ printf("\nType q for exiting: "); fflush(stdout);
scanf("%s",z);
}
}