/* $Id$
$State$
$Log$
+ Revision 1.224 2016/07/01 13:16:01 brouard
+ Summary: Fixes
+
Revision 1.223 2016/02/19 09:23:35 brouard
Summary: temporary
/* Number of covariates model=V2+V1+ V3*age+V2*V4 */
int cptcovn=0; /**< cptcovn number of covariates added in the model (excepting constant and age and age*product) */
int cptcovt=0; /**< cptcovt number of covariates added in the model (excepting constant and age) */
-int cptcovs=0; /**< cptcovs number of simple covariates V2+V1 =2 */
+int cptcovs=0; /**< cptcovs number of simple covariates in the model V2+V1 =2 */
+int cptcovsnq=0; /**< cptcovsnq number of simple covariates in the model but non quantitative V2+V1 =2 */
int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */
int cptcovprodnoage=0; /**< Number of covariate products without age */
int cptcoveff=0; /* Total number of covariates to vary for printing results */
int ncoveff=0; /* Total number of effective covariates in the model */
-int nqveff=0; /**< nqveff number of effective quantitative variables */
+int nqfveff=0; /**< nqfveff Number of Quantitative Fixed Variables Effective */
int ntveff=0; /**< ntveff number of effective time varying variables */
int nqtveff=0; /**< ntqveff number of effective time varying quantitative variables */
int cptcov=0; /* Working variable */
double **covar; /**< covar[j,i], value of jth covariate for individual i,
* covar=matrix(0,NCOVMAX,1,n);
* cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*age; */
-double **coqvar; /* Fixed quantitative covariate */
-double ***cotvar; /* Time varying covariate */
-double ***cotqvar; /* Time varying quantitative covariate */
+double **coqvar; /* Fixed quantitative covariate iqv */
+double ***cotvar; /* Time varying covariate itv */
+double ***cotqvar; /* Time varying quantitative covariate itqv */
double idx;
int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */
+int *Typevar; /**< 1 for qualitative fixed, 2 for quantitative fixed, 3 for qualitive varying, 4 for quanti varying*/
int *Tage;
int *Ndum; /** Freq of modality (tricode */
/* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */
#ifdef LINMINORIGINAL
#else
int *flatdir; /* Function is vanishing in that direction */
- int flat=0; /* Function is vanishing in that direction */
+ int flat=0, flatd=0; /* Function is vanishing in that direction */
#endif
void powell(double p[], double **xi, int n, double ftol, int *iter, double *fret,
double (*func)(double []))
fprintf(ficlog," x(%d)=%.12e",j,xit[j]);
}
for(j=1;j<=n;j++) {
- printf(" p(%d)=%lf ",j,p[j]);
- fprintf(ficlog," p(%d)=%lf ",j,p[j]);
+ printf(" p(%d)=%.12e",j,p[j]);
+ fprintf(ficlog," p(%d)=%.12e",j,p[j]);
}
printf("\n");
fprintf(ficlog,"\n");
/* But p and xit have been updated at the end of linmin, *fret corresponds to new p, xit */
/* New value of last point Pn is not computed, P(n-1) */
for(j=1;j<=n;j++) {
- printf(" p(%d)=%lf flat=%d ",j,p[j],flatdir[j]);
- fprintf(ficlog," p(%d)=%lf flat=%d ",j,p[j],flatdir[j]);
- }
- printf("\n");
- fprintf(ficlog,"\n");
-
+ if(flatdir[j] >0){
+ printf(" p(%d)=%lf flat=%d ",j,p[j],flatdir[j]);
+ fprintf(ficlog," p(%d)=%lf flat=%d ",j,p[j],flatdir[j]);
+ }
+ /* printf("\n"); */
+ /* fprintf(ficlog,"\n"); */
+ }
if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { /* Did we reach enough precision? */
/* We could compare with a chi^2. chisquare(0.95,ddl=1)=3.84 */
/* By adding age*age in a model, the new -2LL should be lower and the difference follows a */
fptt=(*func)(ptt); /* f_3 */
#ifdef NODIRECTIONCHANGEDUNTILNITER /* No change in drections until some iterations are done */
if (*iter <=4) {
-#else
+#else
+#endif
#ifdef POWELLNOF3INFF1TEST /* skips test F3 <F1 */
#else
if (fptt < fp) { /* If extrapolated point is better, decide if we keep that new direction or not */
}
#ifdef LINMINORIGINAL
#else
- printf("Flat directions\n");
- fprintf(ficlog,"Flat directions\n");
- for (j=1;j<=n;j++) {
- printf("flatdir[%d]=%d ",j,flatdir[j]);
- fprintf(ficlog,"flatdir[%d]=%d ",j,flatdir[j]);
- }
- printf("\n");
- fprintf(ficlog,"\n");
+ for (j=1, flatd=0;j<=n;j++) {
+ if(flatdir[j]>0)
+ flatd++;
+ }
+ if(flatd >0){
+ printf("%d flat directions\n",flatd);
+ fprintf(ficlog,"%d flat directions\n",flatd);
+ for (j=1;j<=n;j++) {
+ if(flatdir[j]>0){
+ printf("%d ",j);
+ fprintf(ficlog,"%d ",j);
+ }
+ }
+ printf("\n");
+ fprintf(ficlog,"\n");
+ }
#endif
printf("Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig);
fprintf(ficlog,"Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig);
#else
} /* end if (fptt < fp) */
#endif
+#ifdef NODIRECTIONCHANGEDUNTILNITER /* No change in drections until some iterations are done */
} /*NODIRECTIONCHANGEDUNTILNITER No change in drections until some iterations are done */
+#else
#endif
} /* loop iteration */
}
double sw; /* Sum of weights */
double lli; /* Individual log likelihood */
int s1, s2;
- int iv=0, iqv=0, itv=0, iqtv=0 ; /* Index of varying covariate, fixed quantitative cov, time varying covariate */
+ int iv=0, iqv=0, itv=0, iqtv=0 ; /* Index of varying covariate, fixed quantitative cov, time varying covariate, quatitative time varying covariate */
double bbh, survp;
long ipmx;
double agexact;
for (k=1; k<=ncoveff;k++){ /* Simple and product covariates without age* products */
cov[++ioffset]=covar[Tvar[k]][i];
}
- for(iqv=1; iqv <= nqveff; iqv++){ /* Quantitatives covariates */
+ for(iqv=1; iqv <= nqfveff; iqv++){ /* Quantitatives and Fixed covariates */
cov[++ioffset]=coqvar[iqv][i];
}
cov[ioffset+itv]=cotvar[mw[mi][i]][itv][i];
}
for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */
+ if(cotqvar[mw[mi][i]][iqtv][i] == -1){
+ printf("i=%d, mi=%d, iqtv=%d, cotqvar[mw[mi][i]][iqtv][i]=%f",i,mi,iqtv,cotqvar[mw[mi][i]][iqtv][i]);
+ }
cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i];
}
/* ioffset=2+nagesqr+cptcovn+nqv+ntv+nqtv; */
for(k=1; k<=nlstate; k++) ll[k]=0.;
ioffset=0;
for (i=1,ipmx=0, sw=0.; i<=imx; i++){
- ioffset=2+nagesqr+cptcovage;
+ ioffset=2+nagesqr+cptcovage;
/* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */
- for (k=1; k<=ncoveff;k++){ /* Simple and product covariates without age* products */
- cov[++ioffset]=covar[Tvar[k]][i];
- }
- for(iqv=1; iqv <= nqveff; iqv++){ /* Quantitatives covariates */
- cov[++ioffset]=coqvar[iqv][i];
- }
-
+ for (k=1; k<=ncoveff;k++){ /* Simple and product covariates without age* products */
+ cov[++ioffset]=covar[Tvar[k]][i];
+ }
+ for(iqv=1; iqv <= nqfveff; iqv++){ /* Quantitatives Fixed covariates */
+ cov[++ioffset]=coqvar[iqv][i];
+ }
+
for(mi=1; mi<= wav[i]-1; mi++){
- for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */
- cov[ioffset+itv]=cotvar[mw[mi][i]][itv][i];
- }
- for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */
- cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i];
- }
+ for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */
+ cov[ioffset+itv]=cotvar[mw[mi][i]][itv][i];
+ }
+ for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */
+ cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i];
+ }
for (ii=1;ii<=nlstate+ndeath;ii++)
- for (j=1;j<=nlstate+ndeath;j++){
- oldm[ii][j]=(ii==j ? 1.0 : 0.0);
- savm[ii][j]=(ii==j ? 1.0 : 0.0);
- }
+ for (j=1;j<=nlstate+ndeath;j++){
+ oldm[ii][j]=(ii==j ? 1.0 : 0.0);
+ savm[ii][j]=(ii==j ? 1.0 : 0.0);
+ }
agebegin=agev[mw[mi][i]][i]; /* Age at beginning of effective wave */
ageend=agev[mw[mi][i]][i] + (dh[mi][i])*stepm/YEARM; /* Age at end of effective wave and at the end of transition */
for(d=0; d<dh[mi][i]; d++){ /* Delay between two effective waves */
- /*dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i]
- and mw[mi+1][i]. dh depends on stepm.*/
- newm=savm;
- agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;
- cov[2]=agexact;
- if(nagesqr==1)
- cov[3]= agexact*agexact;
- for (kk=1; kk<=cptcovage;kk++) {
- cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact;
- }
-
- /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */
- out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,
- 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));
- /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, */
- /* 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); */
- savm=oldm;
- oldm=newm;
+ /*dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i]
+ and mw[mi+1][i]. dh depends on stepm.*/
+ newm=savm;
+ agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;
+ cov[2]=agexact;
+ if(nagesqr==1)
+ cov[3]= agexact*agexact;
+ for (kk=1; kk<=cptcovage;kk++) {
+ cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact;
+ }
+ /* printf("i=%d,mi=%d,d=%d,mw[mi][i]=%d\n",i, mi,d,mw[mi][i]); */
+ /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */
+ out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,
+ 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));
+ /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, */
+ /* 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); */
+ savm=oldm;
+ oldm=newm;
} /* end mult */
s1=s[mw[mi][i]][i];
* is higher than the multiple of stepm and negative otherwise.
*/
if( s2 > nlstate && (mle <5) ){ /* Jackson */
- lli=log(out[s1][s2] - savm[s1][s2]);
+ lli=log(out[s1][s2] - savm[s1][s2]);
} else if ( s2==-1 ) { /* alive */
- for (j=1,survp=0. ; j<=nlstate; j++)
- survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j];
- lli= log(survp);
+ for (j=1,survp=0. ; j<=nlstate; j++)
+ survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j];
+ lli= log(survp);
}else if (mle==1){
- lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */
+ lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */
} else if(mle==2){
- lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* linear interpolation */
+ lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* linear interpolation */
} else if(mle==3){ /* exponential inter-extrapolation */
- lli= (savm[s1][s2]>(double)1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */
+ lli= (savm[s1][s2]>(double)1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */
} else if (mle==4){ /* mle=4 no inter-extrapolation */
- lli=log(out[s1][s2]); /* Original formula */
+ lli=log(out[s1][s2]); /* Original formula */
} else{ /* mle=0 back to 1 */
- lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */
- /*lli=log(out[s1][s2]); */ /* Original formula */
+ lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */
+ /*lli=log(out[s1][s2]); */ /* Original formula */
} /* End of if */
ipmx +=1;
sw += weight[i];
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli;
/*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */
if(globpr){
- fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\
+ fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\
%11.6f %11.6f %11.6f ", \
- num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw,
- 2*weight[i]*lli,out[s1][s2],savm[s1][s2]);
- for(k=1,llt=0.,l=0.; k<=nlstate; k++){
- llt +=ll[k]*gipmx/gsw;
- fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw);
- }
- fprintf(ficresilk," %10.6f\n", -llt);
+ num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw,
+ 2*weight[i]*lli,out[s1][s2],savm[s1][s2]);
+ for(k=1,llt=0.,l=0.; k<=nlstate; k++){
+ llt +=ll[k]*gipmx/gsw;
+ fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw);
+ }
+ fprintf(ficresilk," %10.6f\n", -llt);
}
} /* end of wave */
} /* end of individual */
posprop=vector(1,nlstate); /* Counting the number of transition starting from a live state per age */
pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */
/* prop=matrix(1,nlstate,iagemin,iagemax+3); */
- meanq=vector(1,nqveff);
+ meanq=vector(1,nqfveff); /* Number of Quantitative Fixed Variables Effective */
meanqt=matrix(1,lastpass,1,nqtveff);
strcpy(fileresp,"P_");
strcat(fileresp,fileresu);
posprop[i]=0;
pospropt[i]=0;
}
- for (z1=1; z1<= nqveff; z1++) {
+ for (z1=1; z1<= nqfveff; z1++) {
meanq[z1]+=0.;
for(m=1;m<=lastpass;m++){
meanqt[m][z1]=0.;
/* For that comination of covariate j1, we count and print the frequencies */
for (iind=1; iind<=imx; iind++) { /* For each individual iind */
bool=1;
- if (nqveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
- for (z1=1; z1<= nqveff; z1++) {
+ if (nqfveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
+ for (z1=1; z1<= nqfveff; z1++) {
meanq[z1]+=coqvar[Tvar[z1]][iind];
}
for (z1=1; z1<=ncoveff; z1++) {
fclose(ficresp);
fclose(ficresphtm);
fclose(ficresphtmfr);
- free_vector(meanq,1,nqveff);
+ free_vector(meanq,1,nqfveff);
free_matrix(meanqt,1,lastpass,1,nqtveff);
free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE);
free_vector(pospropt,1,nlstate);
if (cptcovn<1) {j=1;ncodemax[1]=1;}
first=1;
- for(j1=1; j1<= (int) pow(2,nqveff);j1++){ /* For each combination of covariate */
+ for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){ /* For each combination of covariate */
for (i=1; i<=nlstate; i++)
for(iage=iagemin-AGEMARGE; iage <= iagemax+3+AGEMARGE; iage++)
prop[i][iage]=0.0;
for (i=1; i<=imx; i++) { /* Each individual */
bool=1;
if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
- for (z1=1; z1<=nqveff; z1++) /* For each covariate, look at the value for individual i and checks if it is equal to the corresponding value of this covariate according to current combination j1*/
+ for (z1=1; z1<=cptcoveff; z1++) /* For each covariate, look at the value for individual i and checks if it is equal to the corresponding value of this covariate according to current combination j1*/
if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)])
bool=0;
}
/* Loop on covariates without age and products and no quantitative variable */
/* for (j=1; j<=(cptcovs); j++) { /\* From model V1 + V2*age+ V3 + V3*V4 keeps V1 + V3 = 2 only *\/ */
- for (j=1; j<=(*cptcov); j++) { /* From model V1 + V2*age + V3 + V3*V4 keeps V1 + V3 = 2 only */
+ for (j=1; j<=cptcovsnq; 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*/
- if(Tvar[j] >=1 && Tvar[j] <= *cptcov){ /* A real fixed covariate */
- ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i
- * If product of Vn*Vm, still boolean *:
- * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables
- * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0 */
- /* Finds for covariate j, n=Tvar[j] of Vn . ij is the
- modality of the nth covariate of individual i. */
- if (ij > modmaxcovj)
- modmaxcovj=ij;
- else if (ij < modmincovj)
- modmincovj=ij;
- if ((ij < -1) && (ij > NCOVMAX)){
- printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX );
- exit(1);
- }else
- Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/
- /* If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */
- /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/
- /* 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 ies 1, then modmaxcovj=1.*/
- }
- } /* end for loop on individuals i */
+ modality of this covariate Vj*/
+ switch(Typevar[j]) {
+ case 1: /* A real fixed dummy covariate */
+ ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i
+ * If product of Vn*Vm, still boolean *:
+ * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables
+ * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0 */
+ /* Finds for covariate j, n=Tvar[j] of Vn . ij is the
+ modality of the nth covariate of individual i. */
+ if (ij > modmaxcovj)
+ modmaxcovj=ij;
+ else if (ij < modmincovj)
+ modmincovj=ij;
+ if ((ij < -1) && (ij > NCOVMAX)){
+ printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX );
+ exit(1);
+ }else
+ Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/
+ /* If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */
+ /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/
+ /* 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 ies 1, then modmaxcovj=1.*/
+ break;
+ case 2:
+ break;
+
+ }
+ } /* 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=0; i<=cptcode; i++) {*/
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. */
+ 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 */
+ * historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */
} /* Ndum[-1] number of undefined modalities */
-
+
/* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */
/* For covariate j, modalities could be 1, 2, 3, 4, 5, 6, 7.
If Ndum[1]=0, Ndum[2]=0, Ndum[3]= 635, Ndum[4]=0, Ndum[5]=0, Ndum[6]=27, Ndum[7]=125;
*/
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 */
+ 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 */
/* } /\* 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;
+ for (k=-1; k< maxncov; k++) Ndum[k]=0;
for (i=1; i<=ncovmodel-2-nagesqr; i++) { /* -2, cste and age and eventually age*age */
- /* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/
- ij=Tvar[i]; /* Tvar might be -1 if status was unknown */
- Ndum[ij]++; /* Might be supersed V1 + V1*age */
- } /* V4+V3+V5, Ndum[1]@5={0, 0, 1, 1, 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)){
- /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/
- Tvaraff[++ij]=i; /*For printing (unclear) */
- }else if((Ndum[i]!=0) && (i<=ncovcol+nqv)){
- Tvaraff[++ij]=-10; /* Dont'n know how to treat quantitative variables yet */
- }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv)){
- Tvaraff[++ij]=i; /*For printing (unclear) */
- }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv+nqtv)){
- Tvaraff[++ij]=-20; /* Dont'n know how to treat quantitative variables yet */
- }
- } /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */
- /* ij--; */
- /* cptcoveff=ij; /\*Number of total covariates*\/ */
- *cptcov=ij; /*Number of total real effective covariates: effective
- * because they can be excluded from the model and real
- * if in the model but excluded because missing values*/
+ /* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/
+ ij=Tvar[i]; /* Tvar might be -1 if status was unknown */
+ Ndum[ij]++; /* Might be supersed V1 + V1*age */
+ } /* V4+V3+V5, Ndum[1]@5={0, 0, 1, 1, 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)){
+ /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/
+ Tvaraff[++ij]=i; /*For printing (unclear) */
+ }else if((Ndum[i]!=0) && (i<=ncovcol+nqv)){
+ Tvaraff[++ij]=-10; /* Dont'n know how to treat quantitative variables yet */
+ }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv)){
+ Tvaraff[++ij]=i; /*For printing (unclear) */
+ }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv+nqtv)){
+ Tvaraff[++ij]=-20; /* Dont'n know how to treat quantitative variables yet */
+ }
+ } /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */
+ /* ij--; */
+ /* cptcoveff=ij; /\*Number of total covariates*\/ */
+ *cptcov=ij; /*Number of total real effective covariates: effective
+ * because they can be excluded from the model and real
+ * if in the model but excluded because missing values*/
}
cov[1]=1;
/* tj=cptcoveff; */
- tj = (int) pow(2,nqveff);
+ tj = (int) pow(2,cptcoveff);
if (cptcovn<1) {tj=1;ncodemax[1]=1;}
j1=0;
for(j1=1; j1<=tj;j1++){ /* For each valid combination of covariates or only once*/
if (cptcovn>0) {
fprintf(ficresprob, "\n#********** Variable ");
- for (z1=1; z1<=nqveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(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<=nqveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(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<=nqveff; z1++) fprintf(ficgp, " V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(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<hr size=\"2\" color=\"#EC5E5E\">********** Variable ");
- for (z1=1; z1<=nqveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
fprintf(fichtmcov, "**********\n<hr size=\"2\" color=\"#EC5E5E\">");
fprintf(ficresprobcor, "\n#********** Variable ");
- for (z1=1; z1<=nqveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
fprintf(ficresprobcor, "**********\n#");
if(invalidvarcomb[j1]){
fprintf(ficgp,"\n#Combination (%d) ignored because no cases \n",j1);
fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>");
- m=pow(2,nqveff);
+ m=pow(2,cptcoveff);
if (cptcovn < 1) {m=1;ncodemax[1]=1;}
jj1=0;
jj1++;
if (cptcovn > 0) {
fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates");
- for (cpt=1; cpt<=nqveff;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);
}
fflush(fichtm);
fprintf(fichtm," <ul><li><b>Graphs</b></li><p>");
- m=pow(2,nqveff);
+ m=pow(2,cptcoveff);
if (cptcovn < 1) {m=1;ncodemax[1]=1;}
jj1=0;
jj1++;
if (cptcovn > 0) {
fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates");
- for (cpt=1; cpt<=nqveff;cpt++)
+ for (cpt=1; cpt<=cptcoveff;cpt++) /**< cptcoveff number of variables */
fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);
fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
/*#ifdef windows */
fprintf(ficgp,"cd \"%s\" \n",pathc);
/*#endif */
- m=pow(2,nqveff);
+ m=pow(2,cptcoveff);
/* Contribution to likelihood */
/* Plot the probability implied in the likelihood */
for (k1=1; k1<= m ; k1 ++) { /* For each valid combination of covariate */
/* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */
fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files ");
- for (k=1; k<=nqveff; k++){ /* For each covariate k get corresponding value lv for combination k1 */
- lv= decodtabm(k1,k,nqveff); /* Should be the value of the covariate corresponding to k1 combination */
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate k get corresponding value lv for combination k1 */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the value of the covariate corresponding to k1 combination */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
if(backcast==1){ /* We need to get the corresponding values of the covariates involved in this combination k1 */
/* fprintf(ficgp,",\"%s\" every :::%d::%d u 1:($%d) t\"Backward stable prevalence\" w l lt 3",subdirf2(fileresu,"PLB_"),k1-1,k1-1,1+cpt); */
fprintf(ficgp,",\"%s\" u 1:((",subdirf2(fileresu,"PLB_")); /* Age is in 1 */
- if(nqveff ==0){
+ if(cptcoveff ==0){
fprintf(ficgp,"$%d)) t 'Backward prevalence in state %d' with line ", 2+(cpt-1), cpt );
}else{
kl=0;
- for (k=1; k<=nqveff; k++){ /* For each combination of covariate */
- lv= decodtabm(k1,k,nqveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */
+ for (k=1; k<=cptcoveff; k++){ /* For each combination of covariate */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
/*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */
/*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */
/* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/
- if(k==nqveff){
+ if(k==cptcoveff){
fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' with line ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \
6+(cpt-1), cpt );
}else{
for (k1=1; k1<= m ; k1 ++) {
fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files ");
- for (k=1; k<=nqveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,nqveff); /* Should be the covariate number corresponding to k1 combination */
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
for (cpt=1; cpt<= nlstate ; cpt ++) {
fprintf(ficgp,"\n# 3d: Life expectancy with EXP_ files: cov=%d state=%d",k1, cpt);
- for (k=1; k<=nqveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,nqveff); /* Should be the covariate number corresponding to k1 combination */
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
fprintf(ficgp,"\n#\n#\n# Survival functions in state j : 'LIJ_' files, cov=%d state=%d",k1, cpt);
- for (k=1; k<=nqveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,nqveff); /* Should be the covariate number corresponding to k1 combination */
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each inital state */
fprintf(ficgp,"\n#\n#\n# Survival functions in state j and all livestates from state i by final state j: 'lij' files, cov=%d state=%d",k1, cpt);
- for (k=1; k<=nqveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,nqveff); /* Should be the covariate number corresponding to k1 combination */
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt);
- for (k=1; k<=nqveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,nqveff); /* Should be the covariate number corresponding to k1 combination */
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt);
- for (k=1; k<=nqveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,nqveff); /* Should be the covariate number corresponding to k1 combination */
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
fprintf(ficgp,"\n#\n#\n#Projection of prevalence to stable (period): 'PROJ_' files, covariatecombination#=%d state=%d",k1, cpt);
- for (k=1; k<=nqveff; k++){ /* For each correspondig covariate value */
- lv= decodtabm(k1,k,nqveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */
+ for (k=1; k<=cptcoveff; k++){ /* For each correspondig covariate value */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
}else{
fprintf(ficgp,",\\\n '' ");
}
- if(nqveff ==0){ /* No covariate */
+ if(cptcoveff ==0){ /* No covariate */
ioffset=2; /* Age is in 2 */
/*# yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/
/*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */
fprintf(ficgp," $%d/(1.-$%d)) t 'p%d%d' with line ", \
ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,i,cpt );
}else{ /* more than 2 covariates */
- if(nqveff ==1){
+ if(cptcoveff ==1){
ioffset=4; /* Age is in 4 */
}else{
ioffset=6; /* Age is in 6 */
fprintf(ficgp," u %d:(",ioffset);
kl=0;
strcpy(gplotcondition,"(");
- for (k=1; k<=nqveff; k++){ /* For each covariate writing the chain of conditions */
- lv= decodtabm(k1,k,nqveff); /* Should be the covariate value corresponding to combination k1 and covariate k */
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate writing the chain of conditions */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to combination k1 and covariate k */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
kl++;
sprintf(gplotcondition+strlen(gplotcondition),"$%d==%d && $%d==%d " ,kl,Tvaraff[k], kl+1, nbcode[Tvaraff[k]][lv]);
kl++;
- if(k <nqveff && nqveff>1)
+ if(k <cptcoveff && cptcoveff>1)
sprintf(gplotcondition+strlen(gplotcondition)," && ");
}
strcpy(gplotcondition+strlen(gplotcondition),")");
fprintf(ficgp,"#\n");
for(ng=1; ng<=3;ng++){ /* Number of graphics: first is logit, 2nd is probabilities, third is incidences per year*/
fprintf(ficgp,"# ng=%d\n",ng);
- fprintf(ficgp,"# jk=1 to 2^%d=%d\n",nqveff,m);
+ 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.svg\" ",subdirf2(optionfilefiname,"PE_"),jk,ng);
}
}
else
- fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);
+ fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); /* Valgrind bug nbcode */
}
}else{
i=i-ncovmodel;
}
}
else
- fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);
+ fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);/* Valgrind bug nbcode */
}
fprintf(ficgp,")");
}
double *agemingood, *agemaxgood; /* Currently identical for all covariates */
- /* modcovmax=2*nqveff;/\* Max number of modalities. We suppose */
+ /* modcovmax=2*cptcoveff;/\* Max number of modalities. We suppose */
/* a covariate has 2 modalities, should be equal to ncovcombmax *\/ */
sumnewp = vector(1,ncovcombmax);
/************** Forecasting ******************/
-void prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int nqveff){
+void prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int cptcoveff){
/* proj1, year, month, day of starting projection
agemin, agemax range of age
dateprev1 dateprev2 range of dates during which prevalence is computed
printf("Computing forecasting: result on file '%s', please wait... \n", fileresf);
fprintf(ficlog,"Computing forecasting: result on file '%s', please wait... \n", fileresf);
- if (nqveff==0) ncodemax[nqveff]=1;
+ if (cptcoveff==0) ncodemax[cptcoveff]=1;
stepsize=(int) (stepm+YEARM-1)/YEARM;
if(jprojmean==0) jprojmean=1;
if(mprojmean==0) jprojmean=1;
- i1=nqveff;
+ i1=cptcoveff;
if (cptcovn < 1){i1=1;}
fprintf(ficresf,"# Mean day of interviews %.lf/%.lf/%.lf (%.2f) between %.2f and %.2f \n",jprojmean,mprojmean,anprojmean,dateintmean,dateprev1,dateprev2);
/* if (h==(int)(YEARM*yearp)){ */
for(cptcov=1, k=0;cptcov<=i1;cptcov++){
- for(cptcod=1;cptcod<=ncodemax[nqveff];cptcod++){
+ for(cptcod=1;cptcod<=ncodemax[cptcoveff];cptcod++){
k=k+1;
fprintf(ficresf,"\n#****** hpijx=probability over h years, hp.jx is weighted by observed prev \n#");
- for(j=1;j<=nqveff;j++) {
+ for(j=1;j<=cptcoveff;j++) {
fprintf(ficresf," V%d (=) %d",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
fprintf(ficresf," yearproj age");
for (h=0; h<=nhstepm; h++){
if (h*hstepm/YEARM*stepm ==yearp) {
fprintf(ficresf,"\n");
- for(j=1;j<=nqveff;j++)
+ for(j=1;j<=cptcoveff;j++)
fprintf(ficresf,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
fprintf(ficresf,"%.f %.f ",anproj1+yearp,agec+h*hstepm/YEARM*stepm);
}
}
/* /\************** Back Forecasting ******************\/ */
-/* void prevbackforecast(char fileres[], double anback1, double mback1, double jback1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anback2, double p[], int nqveff){ */
+/* void prevbackforecast(char fileres[], double anback1, double mback1, double jback1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anback2, double p[], int cptcoveff){ */
/* /\* back1, year, month, day of starting backection */
/* agemin, agemax range of age */
/* dateprev1 dateprev2 range of dates during which prevalence is computed */
/* printf("Computing back forecasting: result on file '%s', please wait... \n", fileresfb); */
/* fprintf(ficlog,"Computing back forecasting: result on file '%s', please wait... \n", fileresfb); */
-/* if (nqveff==0) ncodemax[nqveff]=1; */
+/* if (cptcoveff==0) ncodemax[cptcoveff]=1; */
/* /\* if (mobilav!=0) { *\/ */
/* /\* mobaverage= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX); *\/ */
/* if(jprojmean==0) jprojmean=1; */
/* if(mprojmean==0) jprojmean=1; */
-/* i1=nqveff; */
+/* i1=cptcoveff; */
/* if (cptcovn < 1){i1=1;} */
/* fprintf(ficresfb,"# Mean day of interviews %.lf/%.lf/%.lf (%.2f) between %.2f and %.2f \n",jprojmean,mprojmean,anprojmean,dateintmean,dateprev1,dateprev2); */
/* /\* if (h==(int)(YEARM*yearp)){ *\/ */
/* for(cptcov=1, k=0;cptcov<=i1;cptcov++){ */
-/* for(cptcod=1;cptcod<=ncodemax[nqveff];cptcod++){ */
+/* for(cptcod=1;cptcod<=ncodemax[cptcoveff];cptcod++){ */
/* k=k+1; */
/* fprintf(ficresfb,"\n#****** hbijx=probability over h years, hp.jx is weighted by observed prev \n#"); */
-/* for(j=1;j<=nqveff;j++) { */
+/* for(j=1;j<=cptcoveff;j++) { */
/* fprintf(ficresfb," V%d (=) %d",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); */
/* } */
/* fprintf(ficresfb," yearbproj age"); */
/* for (h=0; h<=nhstepm; h++){ */
/* if (h*hstepm/YEARM*stepm ==yearp) { */
/* fprintf(ficresfb,"\n"); */
-/* for(j=1;j<=nqveff;j++) */
+/* for(j=1;j<=cptcoveff;j++) */
/* fprintf(ficresfb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); */
/* fprintf(ficresfb,"%.f %.f ",anback1+yearp,agec+h*hstepm/YEARM*stepm); */
/* } */
printf("Computing forecasting: result on file '%s' \n", filerespop);
fprintf(ficlog,"Computing forecasting: result on file '%s' \n", filerespop);
- if (nqveff==0) ncodemax[nqveff]=1;
+ if (cptcoveff==0) ncodemax[cptcoveff]=1;
/* if (mobilav!=0) { */
/* mobaverage= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX); */
}
for(cptcov=1,k=0;cptcov<=i2;cptcov++){
- for(cptcod=1;cptcod<=ncodemax[nqveff];cptcod++){
+ for(cptcod=1;cptcod<=ncodemax[cptcoveff];cptcod++){
k=k+1;
fprintf(ficrespop,"\n#******");
- for(j=1;j<=nqveff;j++) {
+ for(j=1;j<=cptcoveff;j++) {
fprintf(ficrespop," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
fprintf(ficrespop,"******\n");
/* Loops on waves */
for (j=maxwav;j>=1;j--){
for (iv=nqtv;iv>=1;iv--){ /* Loop on time varying quantitative variables */
- cutv(stra, strb, line, ' ');
- if(strb[0]=='.') { /* Missing value */
- lval=-1;
- }else{
- errno=0;
- /* what_kind_of_number(strb); */
- dval=strtod(strb,&endptr);
- /* if( strb[0]=='\0' || (*endptr != '\0')){ */
- /* if(strb != endptr && *endptr == '\0') */
- /* dval=dlval; */
- /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */
- if( strb[0]=='\0' || (*endptr != '\0')){
- printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, nqtv, j,maxwav);
- fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqtv, j,maxwav);fflush(ficlog);
- return 1;
- }
- cotqvar[j][iv][i]=dval;
- }
- strcpy(line,stra);
+ cutv(stra, strb, line, ' ');
+ if(strb[0]=='.') { /* Missing value */
+ lval=-1;
+ cotqvar[j][iv][i]=-1; /* 0.0/0.0 */
+ if(isalpha(strb[1])) { /* .m or .d Really Missing value */
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j);fflush(ficlog);
+ return 1;
+ }
+ }else{
+ errno=0;
+ /* what_kind_of_number(strb); */
+ dval=strtod(strb,&endptr);
+ /* if( strb[0]=='\0' || (*endptr != '\0')){ */
+ /* if(strb != endptr && *endptr == '\0') */
+ /* dval=dlval; */
+ /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */
+ if( strb[0]=='\0' || (*endptr != '\0')){
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, nqtv, j,maxwav);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqtv, j,maxwav);fflush(ficlog);
+ return 1;
+ }
+ cotqvar[j][iv][i]=dval;
+ }
+ strcpy(line,stra);
}/* end loop ntqv */
-
+
for (iv=ntv;iv>=1;iv--){ /* Loop on time varying dummies */
- cutv(stra, strb, line, ' ');
- if(strb[0]=='.') { /* Missing value */
- lval=-1;
- }else{
- errno=0;
- lval=strtol(strb,&endptr,10);
- /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/
- if( strb[0]=='\0' || (*endptr != '\0')){
- printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th dummy covariate out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv, j,maxwav);
- fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d dummy covariate out of %d measured wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv,j,maxwav);fflush(ficlog);
- return 1;
- }
- }
- if(lval <-1 || lval >1){
- printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
+ cutv(stra, strb, line, ' ');
+ if(strb[0]=='.') { /* Missing value */
+ lval=-1;
+ }else{
+ errno=0;
+ lval=strtol(strb,&endptr,10);
+ /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/
+ if( strb[0]=='\0' || (*endptr != '\0')){
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th dummy covariate out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv, j,maxwav);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d dummy covariate out of %d measured wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv,j,maxwav);fflush(ficlog);
+ return 1;
+ }
+ }
+ if(lval <-1 || lval >1){
+ printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \
- For example, for multinomial values like 1, 2 and 3,\n \
- build V1=0 V2=0 for the reference value (1),\n \
- V1=1 V2=0 for (2) \n \
+ For example, for multinomial values like 1, 2 and 3,\n \
+ build V1=0 V2=0 for the reference value (1),\n \
+ V1=1 V2=0 for (2) \n \
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \
- output of IMaCh is often meaningless.\n \
+ output of IMaCh is often meaningless.\n \
Exiting.\n",lval,linei, i,line,j);
- fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
+ fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \
- For example, for multinomial values like 1, 2 and 3,\n \
- build V1=0 V2=0 for the reference value (1),\n \
- V1=1 V2=0 for (2) \n \
+ For example, for multinomial values like 1, 2 and 3,\n \
+ build V1=0 V2=0 for the reference value (1),\n \
+ V1=1 V2=0 for (2) \n \
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \
output of IMaCh is often meaningless.\n \
Exiting.\n",lval,linei, i,line,j);fflush(ficlog);
- return 1;
- }
- cotvar[j][iv][i]=(double)(lval);
- strcpy(line,stra);
+ return 1;
+ }
+ cotvar[j][iv][i]=(double)(lval);
+ strcpy(line,stra);
}/* end loop ntv */
-
+
/* Statuses at wave */
cutv(stra, strb, line, ' ');
if(strb[0]=='.') { /* Missing value */
- lval=-1;
+ lval=-1;
}else{
- errno=0;
- lval=strtol(strb,&endptr,10);
- /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/
- if( strb[0]=='\0' || (*endptr != '\0')){
- printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);
- fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog);
- return 1;
- }
+ errno=0;
+ lval=strtol(strb,&endptr,10);
+ /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/
+ if( strb[0]=='\0' || (*endptr != '\0')){
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog);
+ return 1;
+ }
}
-
+
s[j][i]=lval;
-
+
/* Date of Interview */
strcpy(line,stra);
cutv(stra, strb,line,' ');
if( (iout=sscanf(strb,"%d/%d",&month, &year)) != 0){
}
else if( (iout=sscanf(strb,"%s.",dummy)) != 0){
- month=99;
- year=9999;
+ month=99;
+ year=9999;
}else{
- printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);
- fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);fflush(ficlog);
- return 1;
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);fflush(ficlog);
+ return 1;
}
anint[j][i]= (double) year;
mint[j][i]= (double)month;
strcpy(line,stra);
} /* End loop on waves */
-
+
/* Date of death */
cutv(stra, strb,line,' ');
if( (iout=sscanf(strb,"%d/%d",&month, &year)) != 0){
year=9999;
}else{
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line);
- fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog);
- return 1;
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog);
+ return 1;
}
andc[i]=(double) year;
moisdc[i]=(double) month;
}else{
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line);
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog);
- return 1;
+ return 1;
}
if (year==9999) {
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line);
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line);fflush(ficlog);
- return 1;
-
+ return 1;
+
}
annais[i]=(double)(year);
moisnais[i]=(double)(month);
strcpy(line,stra);
-
+
/* Sample weight */
cutv(stra, strb,line,' ');
errno=0;
}
weight[i]=dval;
strcpy(line,stra);
-
+
for (iv=nqv;iv>=1;iv--){ /* Loop on fixed quantitative variables */
cutv(stra, strb, line, ' ');
if(strb[0]=='.') { /* Missing value */
- lval=-1;
+ lval=-1;
}else{
- errno=0;
- /* what_kind_of_number(strb); */
- dval=strtod(strb,&endptr);
- /* if(strb != endptr && *endptr == '\0') */
- /* dval=dlval; */
- /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */
- if( strb[0]=='\0' || (*endptr != '\0')){
- printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value (out of %d) constant for all waves. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqv, maxwav);
- fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value (out of %d) constant for all waves. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqv, maxwav);fflush(ficlog);
- return 1;
- }
- coqvar[iv][i]=dval;
+ errno=0;
+ /* what_kind_of_number(strb); */
+ dval=strtod(strb,&endptr);
+ /* if(strb != endptr && *endptr == '\0') */
+ /* dval=dlval; */
+ /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */
+ if( strb[0]=='\0' || (*endptr != '\0')){
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value (out of %d) constant for all waves. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqv, maxwav);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value (out of %d) constant for all waves. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqv, maxwav);fflush(ficlog);
+ return 1;
+ }
+ coqvar[iv][i]=dval;
}
strcpy(line,stra);
}/* end loop nqv */
for (j=ncovcol;j>=1;j--){
cutv(stra, strb,line,' ');
if(strb[0]=='.') { /* Missing covariate value */
- lval=-1;
+ lval=-1;
}else{
- errno=0;
- lval=strtol(strb,&endptr,10);
- if( strb[0]=='\0' || (*endptr != '\0')){
- printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);
- fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);fflush(ficlog);
- return 1;
- }
+ errno=0;
+ lval=strtol(strb,&endptr,10);
+ if( strb[0]=='\0' || (*endptr != '\0')){
+ printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);
+ fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);fflush(ficlog);
+ return 1;
+ }
}
if(lval <-1 || lval >1){
- printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
+ printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \
- For example, for multinomial values like 1, 2 and 3,\n \
- build V1=0 V2=0 for the reference value (1),\n \
- V1=1 V2=0 for (2) \n \
+ For example, for multinomial values like 1, 2 and 3,\n \
+ build V1=0 V2=0 for the reference value (1),\n \
+ V1=1 V2=0 for (2) \n \
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \
- output of IMaCh is often meaningless.\n \
+ output of IMaCh is often meaningless.\n \
Exiting.\n",lval,linei, i,line,j);
- fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
+ fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \
- For example, for multinomial values like 1, 2 and 3,\n \
- build V1=0 V2=0 for the reference value (1),\n \
- V1=1 V2=0 for (2) \n \
+ For example, for multinomial values like 1, 2 and 3,\n \
+ build V1=0 V2=0 for the reference value (1),\n \
+ V1=1 V2=0 for (2) \n \
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \
- output of IMaCh is often meaningless.\n \
+ output of IMaCh is often meaningless.\n \
Exiting.\n",lval,linei, i,line,j);fflush(ficlog);
- return 1;
+ return 1;
}
covar[j][i]=(double)(lval);
strcpy(line,stra);
}
lstra=strlen(stra);
-
+
if(lstra > 9){ /* More than 2**32 or max of what printf can write with %ld */
stratrunc = &(stra[lstra-9]);
num[i]=atol(stratrunc);
i=i+1;
} /* End loop reading data */
-
+
*imax=i-1; /* Number of individuals */
fclose(fic);
-
+
return (0);
/* endread: */
- printf("Exiting readdata: ");
- fclose(fic);
- return (1);
+ printf("Exiting readdata: ");
+ fclose(fic);
+ return (1);
}
void removespace(char *str) {
if ((strpt=strstr(model,"age*age")) !=0){
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 \
+ 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 \
corresponding column of parameters.\n",model);
- fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \
+ fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \
'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \
corresponding column of parameters.\n",model); fflush(ficlog);
- return 1;
- }
-
+ return 1;
+ }
nagesqr=1;
if (strstr(model,"+age*age") !=0)
- substrchaine(modelsav, model, "+age*age");
+ substrchaine(modelsav, model, "+age*age");
else if (strstr(model,"age*age+") !=0)
- substrchaine(modelsav, model, "age*age+");
+ substrchaine(modelsav, model, "age*age+");
else
- substrchaine(modelsav, model, "age*age");
+ substrchaine(modelsav, model, "age*age");
}else
nagesqr=0;
if (strlen(modelsav) >1){
j1=nbocc(modelsav,'*'); /**< j1=Number of '*' */
cptcovs=j+1-j1; /**< Number of simple covariates V1+V1*age+V3 +V3*V4+age*age=> V1 + V3 =5-3=2 */
cptcovt= j+1; /* Number of total covariates in the model, not including
- * cst, age and age*age
- * V1+V1*age+ V3 + V3*V4+age*age=> 3+1=4*/
- /* including age products which are counted in cptcovage.
- * but the covariates which are products must be treated
- * separately: ncovn=4- 2=2 (V1+V3). */
+ * cst, age and age*age
+ * V1+V1*age+ V3 + V3*V4+age*age=> 3+1=4*/
+ /* including age products which are counted in cptcovage.
+ * but the covariates which are products must be treated
+ * separately: ncovn=4- 2=2 (V1+V3). */
cptcovprod=j1; /**< Number of products V1*V2 +v3*age = 2 */
cptcovprodnoage=0; /**< Number of covariate products without age: V3*V4 =1 */
-
-
+
+
/* Design
* V1 V2 V3 V4 V5 V6 V7 V8 V9 Weight
* < ncovcol=8 >
* {2, 1, 4, 8, 5, 6, 3, 7}
* Struct []
*/
-
+
/* This loop fills the array Tvar from the string 'model'.*/
/* j is the number of + signs in the model V1+V2+V3 j=2 i=3 to 1 */
/* modelsav=V2+V1+V4+age*V3 strb=age*V3 stra=V2+V1+V4 */
/* 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 */
+ for(k=cptcovt; k>=1;k--) /**< Number of covariates not including constant and age, neither age*age*/
Tvar[k]=0;
cptcovage=0;
for(k=1; k<=cptcovt;k++){ /* Loop on total covariates of the model */
- cutl(stra,strb,modelsav,'+'); /* keeps in strb after the first '+'
- modelsav==V2+V1+V4+V3*age strb=V3*age stra=V2+V1+V4 */
- if (nbocc(modelsav,'+')==0) strcpy(strb,modelsav); /* and analyzes it */
- /* printf("i=%d a=%s b=%s sav=%s\n",i, stra,strb,modelsav);*/
- /*scanf("%d",i);*/
- if (strchr(strb,'*')) { /**< Model includes a product V2+V1+V4+V3*age strb=V3*age */
- cutl(strc,strd,strb,'*'); /**< strd*strc Vm*Vn: strb=V3*age(input) strc=age strd=V3 ; V3*V2 strc=V2, strd=V3 */
- if (strcmp(strc,"age")==0) { /**< Model includes age: Vn*age */
- /* covar is not filled and then is empty */
- cptcovprod--;
- cutl(stre,strb,strd,'V'); /* strd=V3(input): stre="3" */
- Tvar[k]=atoi(stre); /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1 */
- cptcovage++; /* Sums the number of covariates which include age as a product */
- Tage[cptcovage]=k; /* Tvar[4]=3, Tage[1] = 4 or V1+V1*age Tvar[2]=1, Tage[1]=2 */
- /*printf("stre=%s ", stre);*/
- } else if (strcmp(strd,"age")==0) { /* or age*Vn */
- cptcovprod--;
- cutl(stre,strb,strc,'V');
- Tvar[k]=atoi(stre);
- cptcovage++;
- Tage[cptcovage]=k;
- } else { /* Age is not in the model product V2+V1+V1*V4+V3*age+V3*V2 strb=V3*V2*/
- /* loops on k1=1 (V3*V2) and k1=2 V4*V3 */
- cptcovn++;
- cptcovprodnoage++;k1++;
- cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/
- Tvar[k]=ncovcol+k1; /* For model-covariate k tells which data-covariate to use but
- because this model-covariate is a construction we invent a new column
- ncovcol + k1
- If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2
- Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */
- cutl(strc,strb,strd,'V'); /* strd was Vm, strc is m */
- Tprod[k1]=k; /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2 */
- Tvard[k1][1] =atoi(strc); /* m 1 for V1*/
- Tvard[k1][2] =atoi(stre); /* n 4 for V4*/
- k2=k2+2;
- Tvar[cptcovt+k2]=Tvard[k1][1]; /* Tvar[(cptcovt=4+k2=1)=5]= 1 (V1) */
- Tvar[cptcovt+k2+1]=Tvard[k1][2]; /* Tvar[(cptcovt=4+(k2=1)+1)=6]= 4 (V4) */
- for (i=1; i<=lastobs;i++){
- /* Computes the new covariate which is a product of
- covar[n][i]* covar[m][i] and stores it at ncovol+k1 May not be defined */
- covar[ncovcol+k1][i]=covar[atoi(stre)][i]*covar[atoi(strc)][i];
- }
- } /* End age is not in the model */
- } /* End if model includes a product */
- else { /* no more sum */
- /*printf("d=%s c=%s b=%s\n", strd,strc,strb);*/
- /* scanf("%d",i);*/
- cutl(strd,strc,strb,'V');
- ks++; /**< Number of simple covariates */
- cptcovn++;
- Tvar[k]=atoi(strd);
- }
- strcpy(modelsav,stra); /* modelsav=V2+V1+V4 stra=V2+V1+V4 */
+ cutl(stra,strb,modelsav,'+'); /* keeps in strb after the first '+'
+ modelsav==V2+V1+V4+V3*age strb=V3*age stra=V2+V1+V4 */
+ if (nbocc(modelsav,'+')==0) strcpy(strb,modelsav); /* and analyzes it */
+ /* printf("i=%d a=%s b=%s sav=%s\n",i, stra,strb,modelsav);*/
+ /*scanf("%d",i);*/
+ if (strchr(strb,'*')) { /**< Model includes a product V2+V1+V4+V3*age strb=V3*age */
+ cutl(strc,strd,strb,'*'); /**< strd*strc Vm*Vn: strb=V3*age(input) strc=age strd=V3 ; V3*V2 strc=V2, strd=V3 */
+ if (strcmp(strc,"age")==0) { /**< Model includes age: Vn*age */
+ /* covar is not filled and then is empty */
+ cptcovprod--;
+ cutl(stre,strb,strd,'V'); /* strd=V3(input): stre="3" */
+ Tvar[k]=atoi(stre); /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1 */
+ Typevar[k]=1; /* 2 for age product */
+ cptcovage++; /* Sums the number of covariates which include age as a product */
+ Tage[cptcovage]=k; /* Tvar[4]=3, Tage[1] = 4 or V1+V1*age Tvar[2]=1, Tage[1]=2 */
+ /*printf("stre=%s ", stre);*/
+ } else if (strcmp(strd,"age")==0) { /* or age*Vn */
+ cptcovprod--;
+ cutl(stre,strb,strc,'V');
+ Tvar[k]=atoi(stre);
+ Typevar[k]=1; /* 1 for age product */
+ cptcovage++;
+ Tage[cptcovage]=k;
+ } else { /* Age is not in the model product V2+V1+V1*V4+V3*age+V3*V2 strb=V3*V2*/
+ /* loops on k1=1 (V3*V2) and k1=2 V4*V3 */
+ cptcovn++;
+ cptcovprodnoage++;k1++;
+ cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/
+ Tvar[k]=ncovcol+nqv+ntv+nqtv+k1; /* For model-covariate k tells which data-covariate to use but
+ because this model-covariate is a construction we invent a new column
+ which is after existing variables ncovcol+nqv+ntv+nqtv + k1
+ If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2
+ Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */
+ Typevar[k]=2; /* 2 for double fixed dummy covariates */
+ cutl(strc,strb,strd,'V'); /* strd was Vm, strc is m */
+ Tprod[k1]=k; /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2 */
+ Tvard[k1][1] =atoi(strc); /* m 1 for V1*/
+ Tvard[k1][2] =atoi(stre); /* n 4 for V4*/
+ k2=k2+2; /* k2 is initialize to -1, We want to store the n and m in Vn*Vm at the end of Tvar */
+ /* Tvar[cptcovt+k2]=Tvard[k1][1]; /\* Tvar[(cptcovt=4+k2=1)=5]= 1 (V1) *\/ */
+ /* Tvar[cptcovt+k2+1]=Tvard[k1][2]; /\* Tvar[(cptcovt=4+(k2=1)+1)=6]= 4 (V4) *\/ */
+ /*ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2, Tvar[3]=5, Tvar[4]=6, cptcovt=5 */
+ /* 1 2 3 4 5 | Tvar[5+1)=1, Tvar[7]=2 */
+ for (i=1; i<=lastobs;i++){
+ /* Computes the new covariate which is a product of
+ covar[n][i]* covar[m][i] and stores it at ncovol+k1 May not be defined */
+ covar[ncovcol+k1][i]=covar[atoi(stre)][i]*covar[atoi(strc)][i];
+ }
+ } /* End age is not in the model */
+ } /* End if model includes a product */
+ else { /* no more sum */
+ /*printf("d=%s c=%s b=%s\n", strd,strc,strb);*/
+ /* scanf("%d",i);*/
+ cutl(strd,strc,strb,'V');
+ ks++; /**< Number of simple covariates*/
+ cptcovn++; /** V4+V3+V5: V4 and V3 timevarying dummy covariates, V5 timevarying quantitative */
+ Tvar[k]=atoi(strd);
+ Typevar[k]=0; /* 0 for simple covariates */
+ }
+ strcpy(modelsav,stra); /* modelsav=V2+V1+V4 stra=V2+V1+V4 */
/*printf("a=%s b=%s sav=%s\n", stra,strb,modelsav);
- scanf("%d",i);*/
+ scanf("%d",i);*/
} /* end of loop + on total covariates */
} /* end if strlen(modelsave == 0) age*age might exist */
} /* end if strlen(model == 0) */
/*The number n of Vn is stored in Tvar. cptcovage =number of age covariate. Tage gives the position of age. cptcovprod= number of products.
If model=V1+V1*age then Tvar[1]=1 Tvar[2]=1 cptcovage=1 Tage[1]=2 cptcovprod=0*/
-
+
/* printf("tvar1=%d tvar2=%d tvar3=%d cptcovage=%d Tage=%d",Tvar[1],Tvar[2],Tvar[3],cptcovage,Tage[1]);
- printf("cptcovprod=%d ", cptcovprod);
- fprintf(ficlog,"cptcovprod=%d ", cptcovprod);
-
- scanf("%d ",i);*/
-/* Dispatching in quantitative and time varying covariates */
-
- for(k=1, ncoveff=0, nqveff=0, ntveff=0, nqtveff=0;k<=cptcovn; k++){ /* or cptocvt */
- if (Tvar[k] <=ncovcol){
- ncoveff++;
- }else if( Tvar[k] <=ncovcol+nqv){
- nqveff++;
- }else if( Tvar[k] <=ncovcol+nqv+ntv){
- ntveff++;
- }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv){
- nqtveff++;
- }else
- printf("Error in effective covariates \n");
- }
-
+ printf("cptcovprod=%d ", cptcovprod);
+ fprintf(ficlog,"cptcovprod=%d ", cptcovprod);
+ scanf("%d ",i);*/
+
+
+/* Decodemodel knows only the grammar (simple, product, age*) of the model but not what kind
+ of variable (dummy vs quantitative, fixed vs time varying) is behind */
+/* ncovcol= 1, nqv=1, ntv=2, nqtv= 1 = 5 possible variables data
+ model= V2 + V4 +V3 + V4*V3 + V5*age + V5 , V1 is not used saving its place
+ k = 1 2 3 4 5 6
+ Tvar[k]= 2 4 3 1+1+2+1+1=6 5 5
+ Typevar[k]=0 0 0 2 1 0
+*/
+/* Dispatching between quantitative and time varying covariates */
+ /* Tvar[k] is the value n of Vn with n varying for 1 to nvcol, or p Vp=Vn*Vm for product */
+ for(k=1, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */
+ if (Tvar[k] <=ncovcol){ /* Simple fixed dummy covariatee */
+ ncoveff++;
+ }else if( Tvar[k] <=ncovcol+nqv && Typevar[k]==0){ /* Remind that product Vn*Vm are added in k*/
+ nqfveff++; /* Only simple fixed quantitative variable */
+ }else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){
+ ntveff++; /* Only simple time varying dummy variable */
+ }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv && Typevar[k]==0){
+ nqtveff++;/* Only simple time varying quantitative variable */
+ }else{
+ printf("Other types in effective covariates \n");
+ }
+ }
+
+ printf("ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn);
+ fprintf(ficlog,"ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn);
return (0); /* with covar[new additional covariate if product] and Tage if age */
/*endread:*/
- printf("Exiting decodemodel: ");
- return (1);
+ printf("Exiting decodemodel: ");
+ return (1);
}
int calandcheckages(int imx, int maxwav, double *agemin, double *agemax, int *nberr, int *nbwarn )
fprintf(ficrespl,"#******");
printf("#******");
fprintf(ficlog,"#******");
- for(j=1;j<=nqveff;j++) {
+ for(j=1;j<=nqfveff;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,"#Age ");
- for(j=1;j<=nqveff;j++) {
+ for(j=1;j<=nqfveff;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);
/* for (age=agebase; age<=agebase; age++){ */
prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k);
fprintf(ficrespl,"%.0f ",age );
- for(j=1;j<=nqveff;j++)
+ for(j=1;j<=nqfveff;j++)
fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
tot=0.;
for(i=1; i<=nlstate;i++){
agelim=agemaxpar;
- i1=pow(2,nqveff);
+ i1=pow(2,nqfveff);
if (cptcovn < 1){i1=1;}
for(k=1; k<=i1;k++){
fprintf(ficresplb,"#******");
printf("#******");
fprintf(ficlog,"#******");
- for(j=1;j<=nqveff;j++) {
+ for(j=1;j<=nqfveff;j++) {
fprintf(ficresplb," 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(ficresplb,"#Age ");
- for(j=1;j<=nqveff;j++) {
+ for(j=1;j<=nqfveff;j++) {
fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
for(i=1; i<=nlstate;i++) fprintf(ficresplb," %d-%d ",i,i);
bprevalim(bprlim, probs, nlstate, p, age, ftolpl, ncvyearp, k);
}
fprintf(ficresplb,"%.0f ",age );
- for(j=1;j<=nqveff;j++)
+ for(j=1;j<=nqfveff;j++)
fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
tot=0.;
for(i=1; i<=nlstate;i++){
/* hstepm=1; aff par mois*/
pstamp(ficrespij);
fprintf(ficrespij,"#****** h Pij x Probability to be in state j at age x+h being in i at x ");
- i1= pow(2,nqveff);
+ i1= pow(2,nqfveff);
/* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */
/* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */
/* k=k+1; */
- for (k=1; k <= (int) pow(2,nqveff); k++){
+ for (k=1; k <= (int) pow(2,nqfveff); k++){
fprintf(ficrespij,"\n#****** ");
- for(j=1;j<=nqveff;j++)
+ for(j=1;j<=nqfveff;j++)
fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
fprintf(ficrespij,"******\n");
/* hstepm=1; aff par mois*/
pstamp(ficrespijb);
fprintf(ficrespijb,"#****** h Pij x Back Probability to be in state i at age x-h being in j at x ");
- i1= pow(2,nqveff);
+ i1= pow(2,nqfveff);
/* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */
/* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */
/* k=k+1; */
- for (k=1; k <= (int) pow(2,nqveff); k++){
+ for (k=1; k <= (int) pow(2,nqfveff); k++){
fprintf(ficrespijb,"\n#****** ");
- for(j=1;j<=nqveff;j++)
+ for(j=1;j<=nqfveff;j++)
fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
fprintf(ficrespijb,"******\n");
if(invalidvarcomb[k]){
covar=matrix(0,NCOVMAX,1,n); /**< used in readdata */
- coqvar=matrix(1,nqv,1,n); /**< used in readdata */
- cotvar=ma3x(1,maxwav,1,ntv,1,n); /**< used in readdata */
- cotqvar=ma3x(1,maxwav,1,nqtv,1,n); /**< used in readdata */
+ coqvar=matrix(1,nqv,1,n); /**< Fixed quantitative covariate */
+ cotvar=ma3x(1,maxwav,1,ntv,1,n); /**< Time varying covariate */
+ cotqvar=ma3x(1,maxwav,1,nqtv,1,n); /**< Time varying quantitative covariate */
cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/
/* v1+v2+v3+v2*v4+v5*age makes cptcovn = 5
v1+v2*age+v2*v3 makes cptcovn = 3
k=1 Tvar[1]=2 (from V2)
*/
Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */
+ Typevar=ivector(1,NCOVMAX); /* -1 to 4 */
/* V2+V1+V4+age*V3 is a model with 4 covariates (3 plus signs).
For each model-covariate stores the data-covariate id. Tvar[1]=2, Tvar[2]=1, Tvar[3]=4,
Tvar[4=age*V3] is 3 and 'age' is recorded in Tage.
nbcode=imatrix(0,NCOVMAX,0,NCOVMAX);
ncodemax[1]=1;
Ndum =ivector(-1,NCOVMAX);
- cptcoveff=0;
+ cptcoveff=0;
if (ncovmodel-nagesqr > 2 ){ /* That is if covariate other than cst, age and age*age */
tricode(&cptcoveff,Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */
}
fprintf(ficlog,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\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);
- fprintf(ficres,"%1d%1d ",i,k);
- for(j=1; j <=ncovmodel; j++){
- printf("%12.7f ",p[jk]);
- fprintf(ficlog,"%12.7f ",p[jk]);
- fprintf(ficres,"%12.7f ",p[jk]);
- jk++;
- }
- printf("\n");
- fprintf(ficlog,"\n");
- fprintf(ficres,"\n");
- }
+ if (k != i) {
+ printf("%d%d ",i,k);
+ fprintf(ficlog,"%d%d ",i,k);
+ fprintf(ficres,"%1d%1d ",i,k);
+ for(j=1; j <=ncovmodel; j++){
+ printf("%12.7f ",p[jk]);
+ fprintf(ficlog,"%12.7f ",p[jk]);
+ fprintf(ficres,"%12.7f ",p[jk]);
+ jk++;
+ }
+ printf("\n");
+ fprintf(ficlog,"\n");
+ fprintf(ficres,"\n");
+ }
}
}
if(mle != 0){
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");
- }
- }
+ 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");
+ }
+ }
}
} /* end of hesscov and Wald tests */
-
+
/* */
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");
for(i=1,jk=1; i <=nlstate; i++){
for(j=1; j <=nlstate+ndeath; j++){
- if (j!=i) {
- fprintf(ficres,"%1d%1d",i,j);
- printf("%1d%1d",i,j);
- fprintf(ficlog,"%1d%1d",i,j);
- for(k=1; k<=ncovmodel;k++){
- printf(" %.5e",delti[jk]);
- fprintf(ficlog," %.5e",delti[jk]);
- fprintf(ficres," %.5e",delti[jk]);
- jk++;
- }
- printf("\n");
- fprintf(ficlog,"\n");
- fprintf(ficres,"\n");
- }
+ if (j!=i) {
+ fprintf(ficres,"%1d%1d",i,j);
+ printf("%1d%1d",i,j);
+ fprintf(ficlog,"%1d%1d",i,j);
+ for(k=1; k<=ncovmodel;k++){
+ printf(" %.5e",delti[jk]);
+ fprintf(ficlog," %.5e",delti[jk]);
+ fprintf(ficres," %.5e",delti[jk]);
+ jk++;
+ }
+ printf("\n");
+ fprintf(ficlog,"\n");
+ fprintf(ficres,"\n");
+ }
}
}
for(itimes=1;itimes<=2;itimes++){
jj=0;
for(i=1; i <=nlstate; i++){
- for(j=1; j <=nlstate+ndeath; j++){
- if(j==i) continue;
- for(k=1; k<=ncovmodel;k++){
- jj++;
- ca[0]= k+'a'-1;ca[1]='\0';
- if(itimes==1){
- if(mle>=1)
- printf("#%1d%1d%d",i,j,k);
- fprintf(ficlog,"#%1d%1d%d",i,j,k);
- fprintf(ficres,"#%1d%1d%d",i,j,k);
- }else{
- if(mle>=1)
- printf("%1d%1d%d",i,j,k);
- fprintf(ficlog,"%1d%1d%d",i,j,k);
- fprintf(ficres,"%1d%1d%d",i,j,k);
- }
- ll=0;
- for(li=1;li <=nlstate; li++){
- for(lj=1;lj <=nlstate+ndeath; lj++){
- if(lj==li) continue;
- for(lk=1;lk<=ncovmodel;lk++){
- ll++;
- if(ll<=jj){
- cb[0]= lk +'a'-1;cb[1]='\0';
- if(ll<jj){
- if(itimes==1){
- if(mle>=1)
- printf(" Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
- fprintf(ficlog," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
- fprintf(ficres," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
- }else{
- if(mle>=1)
- printf(" %.5e",matcov[jj][ll]);
- fprintf(ficlog," %.5e",matcov[jj][ll]);
- fprintf(ficres," %.5e",matcov[jj][ll]);
- }
- }else{
- if(itimes==1){
- if(mle>=1)
- printf(" Var(%s%1d%1d)",ca,i,j);
- fprintf(ficlog," Var(%s%1d%1d)",ca,i,j);
- fprintf(ficres," Var(%s%1d%1d)",ca,i,j);
- }else{
- if(mle>=1)
- printf(" %.7e",matcov[jj][ll]);
- fprintf(ficlog," %.7e",matcov[jj][ll]);
- fprintf(ficres," %.7e",matcov[jj][ll]);
- }
- }
- }
- } /* end lk */
- } /* end lj */
- } /* end li */
- if(mle>=1)
- printf("\n");
- fprintf(ficlog,"\n");
- fprintf(ficres,"\n");
- numlinepar++;
- } /* end k*/
- } /*end j */
+ for(j=1; j <=nlstate+ndeath; j++){
+ if(j==i) continue;
+ for(k=1; k<=ncovmodel;k++){
+ jj++;
+ ca[0]= k+'a'-1;ca[1]='\0';
+ if(itimes==1){
+ if(mle>=1)
+ printf("#%1d%1d%d",i,j,k);
+ fprintf(ficlog,"#%1d%1d%d",i,j,k);
+ fprintf(ficres,"#%1d%1d%d",i,j,k);
+ }else{
+ if(mle>=1)
+ printf("%1d%1d%d",i,j,k);
+ fprintf(ficlog,"%1d%1d%d",i,j,k);
+ fprintf(ficres,"%1d%1d%d",i,j,k);
+ }
+ ll=0;
+ for(li=1;li <=nlstate; li++){
+ for(lj=1;lj <=nlstate+ndeath; lj++){
+ if(lj==li) continue;
+ for(lk=1;lk<=ncovmodel;lk++){
+ ll++;
+ if(ll<=jj){
+ cb[0]= lk +'a'-1;cb[1]='\0';
+ if(ll<jj){
+ if(itimes==1){
+ if(mle>=1)
+ printf(" Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
+ fprintf(ficlog," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
+ fprintf(ficres," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
+ }else{
+ if(mle>=1)
+ printf(" %.5e",matcov[jj][ll]);
+ fprintf(ficlog," %.5e",matcov[jj][ll]);
+ fprintf(ficres," %.5e",matcov[jj][ll]);
+ }
+ }else{
+ if(itimes==1){
+ if(mle>=1)
+ printf(" Var(%s%1d%1d)",ca,i,j);
+ fprintf(ficlog," Var(%s%1d%1d)",ca,i,j);
+ fprintf(ficres," Var(%s%1d%1d)",ca,i,j);
+ }else{
+ if(mle>=1)
+ printf(" %.7e",matcov[jj][ll]);
+ fprintf(ficlog," %.7e",matcov[jj][ll]);
+ fprintf(ficres," %.7e",matcov[jj][ll]);
+ }
+ }
+ }
+ } /* end lk */
+ } /* end lj */
+ } /* end li */
+ if(mle>=1)
+ printf("\n");
+ fprintf(ficlog,"\n");
+ fprintf(ficres,"\n");
+ numlinepar++;
+ } /* end k*/
+ } /*end j */
} /* end i */
} /* end itimes */
fflush(ficlog);
fflush(ficres);
- 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;
- }
-
+ 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;
+ }
+
/* while((c=getc(ficpar))=='#' && c!= EOF){ */
/* ungetc(c,ficpar); */
/* fgets(line, MAXLINE, ficpar); */
estepm=0;
if((num_filled=sscanf(line,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm, &ftolpl)) !=EOF){
-
- if (num_filled != 6) {
- printf("Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
- fprintf(ficlog,"Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
- goto end;
- }
- printf("agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",ageminpar,agemaxpar, bage, fage, estepm, ftolpl);
- }
- /* ftolpl=6*ftol*1.e5; /\* 6.e-3 make convergences in less than 80 loops for the prevalence limit *\/ */
- /*ftolpl=6.e-4;*/ /* 6.e-3 make convergences in less than 80 loops for the prevalence limit */
-
+
+ if (num_filled != 6) {
+ printf("Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
+ fprintf(ficlog,"Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
+ goto end;
+ }
+ printf("agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",ageminpar,agemaxpar, bage, fage, estepm, ftolpl);
+ }
+ /* ftolpl=6*ftol*1.e5; /\* 6.e-3 make convergences in less than 80 loops for the prevalence limit *\/ */
+ /*ftolpl=6.e-4;*/ /* 6.e-3 make convergences in less than 80 loops for the prevalence limit */
+
/* fscanf(ficpar,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm); */
if (estepm==0 || estepm < stepm) estepm=stepm;
if (fage <= 2) {
printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p);
}
printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt, \
- model,imx,jmin,jmax,jmean,rfileres,popforecast,prevfcast,backcast, estepm, \
- jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2);
+ model,imx,jmin,jmax,jmean,rfileres,popforecast,prevfcast,backcast, estepm, \
+ jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2);
- /*------------ free_vector -------------*/
- /* chdir(path); */
+ /*------------ free_vector -------------*/
+ /* chdir(path); */
/* free_ivector(wav,1,imx); */ /* Moved after last prevalence call */
/* free_imatrix(dh,1,lastpass-firstpass+2,1,imx); */
probs= ma3x(1,AGESUP,1,nlstate+ndeath, 1,ncovcombmax);
for(i=1;i<=AGESUP;i++)
for(j=1;j<=nlstate+ndeath;j++) /* ndeath is useless but a necessity to be compared with mobaverages */
- for(k=1;k<=ncovcombmax;k++)
- probs[i][j][k]=0.;
+ for(k=1;k<=ncovcombmax;k++)
+ probs[i][j][k]=0.;
prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass);
if (mobilav!=0 ||mobilavproj !=0 ) {
mobaverages= ma3x(1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax);
/*if((stepm == 1) && (strcmp(model,".")==0)){*/
if(prevfcast==1){
/* if(stepm ==1){*/
- prevforecast(fileresu, anproj1, mproj1, jproj1, agemin, agemax, dateprev1, dateprev2, mobilavproj, bage, fage, firstpass, lastpass, anproj2, p, nqveff);
+ prevforecast(fileresu, anproj1, mproj1, jproj1, agemin, agemax, dateprev1, dateprev2, mobilavproj, bage, fage, firstpass, lastpass, anproj2, p, cptcoveff);
}
if(backcast==1){
ddnewms=matrix(1,nlstate+ndeath,1,nlstate+ndeath);
free_matrix(bprlim,1,nlstate,1,nlstate); /*here or after loop ? */
/* prevbackforecast(fileresu, anback1, mback1, jback1, agemin, agemax, dateprev1, dateprev2, mobilavproj,
- bage, fage, firstpass, lastpass, anback2, p, nqveff); */
+ bage, fage, firstpass, lastpass, anback2, p, cptcoveff); */
free_matrix(ddnewms, 1, nlstate+ndeath, 1, nlstate+ndeath);
free_matrix(ddsavms, 1, nlstate+ndeath, 1, nlstate+ndeath);
free_matrix(ddoldms, 1, nlstate+ndeath, 1, nlstate+ndeath);
printf("Computing Health Expectancies: result on file '%s' ...", filerese);fflush(stdout);
fprintf(ficlog,"Computing Health Expectancies: result on file '%s' ...", filerese);fflush(ficlog);
- for (k=1; k <= (int) pow(2,nqveff); k++){
+ for (k=1; k <= (int) pow(2,cptcoveff); k++){
fprintf(ficreseij,"\n#****** ");
- for(j=1;j<=nqveff;j++) {
+ for(j=1;j<=cptcoveff;j++) {
fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
fprintf(ficreseij,"******\n");
/*for(cptcov=1,k=0;cptcov<=i1;cptcov++){
for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/
- for (k=1; k <= (int) pow(2,nqveff); k++){
+ for (k=1; k <= (int) pow(2,cptcoveff); k++){
fprintf(ficrest,"\n#****** ");
- for(j=1;j<=nqveff;j++)
+ for(j=1;j<=cptcoveff;j++)
fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
fprintf(ficrest,"******\n");
fprintf(ficresstdeij,"\n#****** ");
fprintf(ficrescveij,"\n#****** ");
- for(j=1;j<=nqveff;j++) {
+ for(j=1;j<=cptcoveff;j++) {
fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
fprintf(ficrescveij,"******\n");
fprintf(ficresvij,"\n#****** ");
- for(j=1;j<=nqveff;j++)
+ for(j=1;j<=cptcoveff;j++)
fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
fprintf(ficresvij,"******\n");
/*for(cptcov=1,k=0;cptcov<=i1;cptcov++){
for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/
- for (k=1; k <= (int) pow(2,nqveff); k++){
+ for (k=1; k <= (int) pow(2,cptcoveff); k++){
fprintf(ficresvpl,"\n#****** ");
- for(j=1;j<=nqveff;j++)
+ for(j=1;j<=cptcoveff;j++)
fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
fprintf(ficresvpl,"******\n");
free_ivector(ncodemax,1,NCOVMAX);
free_ivector(ncodemaxwundef,1,NCOVMAX);
+ free_ivector(Typevar,-1,NCOVMAX);
free_ivector(Tvar,1,NCOVMAX);
free_ivector(Tprod,1,NCOVMAX);
free_ivector(Tvaraff,1,NCOVMAX);