--- imach/src/imach.c 2022/08/25 09:08:41 1.334 +++ imach/src/imach.c 2022/09/11 07:53:11 1.340 @@ -1,6 +1,41 @@ -/* $Id: imach.c,v 1.334 2022/08/25 09:08:41 brouard Exp $ +/* $Id: imach.c,v 1.340 2022/09/11 07:53:11 brouard Exp $ $State: Exp $ $Log: imach.c,v $ + Revision 1.340 2022/09/11 07:53:11 brouard + Summary: Version imach 0.99r37 + + * imach.c (Module): Adding timevarying products of any kinds, + should work before shifting cotvar from ncovcol+nqv columns in + order to have a correspondance between the column of cotvar and + the id of column. + + Revision 1.339 2022/09/09 17:55:22 brouard + Summary: version 0.99r37 + + * imach.c (Module): Many improvements for fixing products of fixed + timevarying as well as fixed * fixed, and test with quantitative + covariate. + + Revision 1.338 2022/09/04 17:40:33 brouard + Summary: 0.99r36 + + * imach.c (Module): Now the easy runs i.e. without result or + model=1+age only did not work. The defautl combination should be 1 + and not 0 because everything hasn't been tranformed yet. + + Revision 1.337 2022/09/02 14:26:02 brouard + Summary: version 0.99r35 + + * src/imach.c: Version 0.99r35 because it outputs same results with + 1+age+V1+V1*age for females and 1+age for females only + (education=1 noweight) + + Revision 1.336 2022/08/31 09:52:36 brouard + *** empty log message *** + + Revision 1.335 2022/08/31 08:23:16 brouard + Summary: improvements... + Revision 1.334 2022/08/25 09:08:41 brouard Summary: In progress for quantitative @@ -1281,27 +1316,28 @@ typedef struct { #define ODIRSEPARATOR '\\' #endif -/* $Id: imach.c,v 1.334 2022/08/25 09:08:41 brouard Exp $ */ +/* $Id: imach.c,v 1.340 2022/09/11 07:53:11 brouard Exp $ */ /* $State: Exp $ */ #include "version.h" char version[]=__IMACH_VERSION__; -char copyright[]="August 2022,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2020, Nihon University 2021-202, INED 2000-2022"; -char fullversion[]="$Revision: 1.334 $ $Date: 2022/08/25 09:08:41 $"; +char copyright[]="September 2022,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2020, Nihon University 2021-202, INED 2000-2022"; +char fullversion[]="$Revision: 1.340 $ $Date: 2022/09/11 07:53:11 $"; char strstart[80]; char optionfilext[10], optionfilefiname[FILENAMELENGTH]; int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */ int nagesqr=0, nforce=0; /* nagesqr=1 if model is including age*age, number of forces */ /* Number of covariates model (1)=V2+V1+ V3*age+V2*V4 */ /* Model(2) V1 + V2 + V3 + V8 + V7*V8 + V5*V6 + V8*age + V3*age + age*age */ -int cptcovn=0; /**< cptcovn decodemodel: number of covariates k of the models excluding age*products =6 and age*age */ +int cptcovn=0; /**< cptcovn decodemodel: number of covariates k of the models excluding age*products =6 and age*age but including products */ int cptcovt=0; /**< cptcovt: total number of covariates of the model (2) nbocc(+)+1 = 8 excepting constant and age and age*age */ -int cptcovs=0; /**< cptcovs number of simple covariates in the model V2+V1 =2 (dummy or quantit or time varying) */ -int cptcovsnq=0; /**< cptcovsnq number of simple covariates in the model but non quantitative V2+V1 =2 */ +int cptcovs=0; /**< cptcovs number of SIMPLE covariates in the model V2+V1 =2 (dummy or quantit or time varying) */ +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 single dummy covariates to vary for printing results (2**cptcoveff combinations of dummies)(computed in tricode as cptcov) */ +int cptcoveff=0; /* Total number of single dummy covariates (fixed or time varying) to vary for printing results (2**cptcoveff combinations of dummies)(computed in tricode as cptcov) */ int ncovf=0; /* Total number of effective fixed covariates (dummy or quantitative) in the model */ int ncovv=0; /* Total number of effective (wave) varying covariates (dummy or quantitative) in the model */ +int ncovvt=0; /* Total number of effective (wave) varying covariates (dummy or quantitative or products [without age]) in the model */ int ncova=0; /* Total number of effective (wave and stepm) varying with age covariates (dummy of quantitative) in the model */ int nsd=0; /**< Total number of single dummy variables (output) */ int nsq=0; /**< Total number of single quantitative variables (output) */ @@ -1317,7 +1353,8 @@ int npar=NPARMAX; /* Number of parameter int nlstate=2; /* Number of live states */ int ndeath=1; /* Number of dead states */ int ncovmodel=0, ncovcol=0; /* Total number of covariables including constant a12*1 +b12*x ncovmodel=2 */ -int nqv=0, ntv=0, nqtv=0; /* Total number of quantitative variables, time variable (dummy), quantitative and time variable */ +int nqv=0, ntv=0, nqtv=0; /* Total number of quantitative variables, time variable (dummy), quantitative and time variable*/ +int ncovcolt=0; /* ncovcolt=ncovcol+nqv+ntv+nqtv; total of covariates in the data, not in the model equation*/ int popbased=0; int *wav; /* Number of waves for this individuual 0 is possible */ @@ -1502,8 +1539,9 @@ int **nbcode, *Tvar; /**< model=V2 => Tv /*Tvar[k]= 5 4 3 6 5 2 7 1 1 */ /* nsd 1 2 3 */ /* Counting single dummies covar fixed or tv */ /*TnsdVar[Tvar] 1 2 3 */ +/*Tvaraff[nsd] 4 3 1 */ /* ID of single dummy cova fixed or timevary*/ /*TvarsD[nsd] 4 3 1 */ /* ID of single dummy cova fixed or timevary*/ -/*TvarsDind[k] 2 3 9 */ /* position K of single dummy cova */ +/*TvarsDind[nsd] 2 3 9 */ /* position K of single dummy cova */ /* nsq 1 2 */ /* Counting single quantit tv */ /* TvarsQ[k] 5 2 */ /* Number of single quantitative cova */ /* TvarsQind 1 6 */ /* position K of single quantitative cova */ @@ -1558,7 +1596,13 @@ int *TvarVD; /* TvarVD[1]=V5 in V5+V4+V3 int *TvarVDind; /* TvarVDind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */ int *TvarVQ; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ int *TvarVQind; /* TvarVQind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ - +int *TvarVV; /* We count ncovvt time varying covariates (single or products without age) and put their name into TvarVV */ +int *TvarVVind; /* We count ncovvt time varying covariates (single or products without age) and put their name into TvarVV */ + /*# ID V1 V2 weight birth death 1st s1 V3 V4 V5 2nd s2 */ + /* model V1+V3+age*V1+age*V3+V1*V3 */ + /* Tvar={1, 3, 1, 3, 6}, the 6 comes from the fact that there are already V1, V2, V3, V4, V5 native covariates */ + /* TvarVV={3,1,3}, for V3 and then the product V1*V3 is decomposed into V1 and V3 */ + /* TvarVVind={2,5,5}, for V3 and then the product V1*V3 is decomposed into V1 and V3 */ int *Tvarsel; /**< Selected covariates for output */ double *Tvalsel; /**< Selected modality value of covariate for output */ int *Typevar; /**< 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product */ @@ -2496,7 +2540,8 @@ void powell(double p[], double **xi, int xits=vector(1,n); *fret=(*func)(p); for (j=1;j<=n;j++) pt[j]=p[j]; - rcurr_time = time(NULL); + rcurr_time = time(NULL); + fp=(*fret); /* Initialisation */ for (*iter=1;;++(*iter)) { ibig=0; del=0.0; @@ -2504,8 +2549,10 @@ void powell(double p[], double **xi, int /* (void) gettimeofday(&curr_time,&tzp); */ rcurr_time = time(NULL); curr_time = *localtime(&rcurr_time); - printf("\nPowell iter=%d -2*LL=%.12f gain=%.12f=%.3g %ld sec. %ld sec.",*iter,*fret, fp-*fret,fp-*fret, rcurr_time-rlast_time, rcurr_time-rstart_time);fflush(stdout); - fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f gain=%.12f=%.3g %ld sec. %ld sec.",*iter,*fret, fp-*fret,fp-*fret,rcurr_time-rlast_time, rcurr_time-rstart_time); fflush(ficlog); + /* printf("\nPowell iter=%d -2*LL=%.12f gain=%.12f=%.3g %ld sec. %ld sec.",*iter,*fret, fp-*fret,fp-*fret, rcurr_time-rlast_time, rcurr_time-rstart_time);fflush(stdout); */ + /* fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f gain=%.12f=%.3g %ld sec. %ld sec.",*iter,*fret, fp-*fret,fp-*fret,rcurr_time-rlast_time, rcurr_time-rstart_time); fflush(ficlog); */ + printf("\nPowell iter=%d -2*LL=%.12f gain=%.3lg %ld sec. %ld sec.",*iter,*fret,fp-*fret, rcurr_time-rlast_time, rcurr_time-rstart_time);fflush(stdout); + fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f gain=%.3lg %ld sec. %ld sec.",*iter,*fret,fp-*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); */ fp=(*fret); /* From former iteration or initial value */ for (i=1;i<=n;i++) { @@ -2808,7 +2855,7 @@ void powell(double p[], double **xi, int double **prevalim(double **prlim, int nlstate, double x[], double age, double **oldm, double **savm, double ftolpl, int *ncvyear, int ij, int nres) { - /**< Computes the prevalence limit in each live state at age x and for covariate combination ij + /**< Computes the prevalence limit in each live state at age x and for covariate combination ij . Nicely done * (and selected quantitative values in nres) * by left multiplying the unit * matrix by transitions matrix until convergence is reached with precision ftolpl @@ -3256,12 +3303,12 @@ double **pmij(double **ps, double *cov, for(i=1; i<= nlstate; i++){ s1=0; for(j=1; ji} pij/pii=(1-pii)/pii and thus pii is known from s1 */ ps[i][i]=1./(s1+1.); @@ -3505,7 +3552,8 @@ double **matprod2(double **out, double * double ***hpxij(double ***po, int nhstepm, double age, int hstepm, double *x, int nlstate, int stepm, double **oldm, double **savm, int ij, int nres ) { - /* Computes the transition matrix starting at age 'age' and dummies values in each resultline (loop on ij to find the corresponding combination) to over + /* Already optimized with precov. + Computes the transition matrix starting at age 'age' and dummies values in each resultline (loop on ij to find the corresponding combination) to over 'nhstepm*hstepm*stepm' months (i.e. until age (in years) age+nhstepm*hstepm*stepm/12) by multiplying nhstepm*hstepm matrices. @@ -3836,16 +3884,20 @@ double ***hbxij(double ***po, int nhstep /*************** log-likelihood *************/ double func( double *x) { - int i, ii, j, k, mi, d, kk; + int i, ii, j, k, mi, d, kk, kf=0; int ioffset=0; + int ipos=0,iposold=0,ncovv=0; + + double cotvarv, cotvarvold; double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; double **out; 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, quantitative time varying covariate */ + double bbh, survp; - long ipmx; double agexact; + double agebegin, ageend; /*extern weight */ /* We are differentiating ll according to initial status */ /* for (i=1;i<=npar;i++) printf("%f ", x[i]);*/ @@ -3868,12 +3920,12 @@ double func( double *x) */ ioffset=2+nagesqr ; /* Fixed */ - for (k=1; k<=ncovf;k++){ /* For each fixed covariate dummu or quant or prod */ + for (kf=1; kf<=ncovf;kf++){ /* For each fixed covariate dummu or quant or prod */ /* # V1=sex, V2=raedyrs Quant Fixed, State=livarnb4..livarnb11, V3=iadl4..iald11, V4=adlw4..adlw11, V5=r4bmi..r11bmi */ /* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* TvarF[1]=Tvar[6]=2, TvarF[2]=Tvar[7]=7, TvarF[3]=Tvar[9]=1 ID of fixed covariates or product V2, V1*V2, V1 */ /* TvarFind; TvarFind[1]=6, TvarFind[2]=7, TvarFind[3]=9 *//* Inverse V2(6) is first fixed (single or prod) */ - cov[ioffset+TvarFind[k]]=covar[Tvar[TvarFind[k]]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (TvarFind[1]=6)*/ + cov[ioffset+TvarFind[kf]]=covar[Tvar[TvarFind[kf]]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (TvarFind[1]=6)*/ /* V1*V2 (7) TvarFind[2]=7, TvarFind[3]=9 */ } /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] @@ -3884,20 +3936,53 @@ double func( double *x) mw[mi][i] is real wave of the mi th effectve wave */ /* Then statuses are computed at each begin and end of an effective wave s1=s[ mw[mi][i] ][i]; s2=s[mw[mi+1][i]][i]; - And the iv th varying covariate is the cotvar[mw[mi+1][i]][iv][i] + And the iv th varying covariate is the cotvar[mw[mi+1][i]][iv-ncovcol-nqv][i] because (-ncovcol-nqv) in the data But if the variable is not in the model TTvar[iv] is the real variable effective in the model: meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i] */ - for(mi=1; mi<= wav[i]-1; mi++){ - for(k=1; k <= ncovv ; k++){ /* Varying covariates in the model (single and product but no age )"V5+V4+V3+V4*V3+V5*age+V1*age+V1" +TvarVind 1,2,3,4(V4*V3) Tvar[1]@7{5, 4, 3, 6, 5, 1, 1 ; 6 because the created covar is after V5 and is 6, minus 1+1, 3,2,1,4 positions in cotvar*/ - /* cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]][i]; but where is the crossproduct? */ - cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]-ncovcol-nqv][i]; - } + for(mi=1; mi<= wav[i]-1; mi++){ /* Varying with waves */ + /* Wave varying (but not age varying) */ + /* for(k=1; k <= ncovv ; k++){ /\* Varying covariates in the model (single and product but no age )"V5+V4+V3+V4*V3+V5*age+V1*age+V1" +TvarVind 1,2,3,4(V4*V3) Tvar[1]@7{5, 4, 3, 6, 5, 1, 1 ; 6 because the created covar is after V5 and is 6, minus 1+1, 3,2,1,4 positions in cotvar*\/ */ + /* /\* cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]][i]; but where is the crossproduct? *\/ */ + /* cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]-ncovcol-nqv][i]; */ + /* } */ + for(ncovv=1, iposold=0; ncovv <= ncovvt ; ncovv++){ /* Varying covariates (single and product but no age )*/ + itv=TvarVV[ncovv]; /* TvarVV={3, 1, 3} gives the name of each varying covariate */ + ipos=TvarVVind[ncovv]; /* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate*/ + if(TvarFind[itv]==0){ /* Not a fixed covariate */ + cotvarv=cotvar[mw[mi][i]][TvarVV[ncovv]-ncovcol-nqv][i]; /* cotvar[wav][ntv+iv][i] */ + }else{ /* fixed covariate */ + cotvarv=covar[Tvar[TvarFind[itv]]][i]; + } + if(ipos!=iposold){ /* Not a product or first of a product */ + cotvarvold=cotvarv; + }else{ /* A second product */ + cotvarv=cotvarv*cotvarvold; + } + iposold=ipos; + cov[ioffset+ipos]=cotvarv; + } + /* for(itv=1; itv <= ntveff; itv++){ /\* Varying dummy covariates (single??)*\/ */ + /* iv= Tvar[Tmodelind[ioffset-2-nagesqr-cptcovage+itv]]-ncovcol-nqv; /\* Counting the # varying covariate from 1 to ntveff *\/ */ + /* cov[ioffset+iv]=cotvar[mw[mi][i]][iv][i]; */ + /* k=ioffset-2-nagesqr-cptcovage+itv; /\* position in simple model *\/ */ + /* cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i]; */ + /* printf(" i=%d,mi=%d,itv=%d,TmodelInvind[itv]=%d,cotvar[mw[mi][i]][TmodelInvind[itv]][i]=%f\n", i, mi, itv, TmodelInvind[itv],cotvar[mw[mi][i]][TmodelInvind[itv]][i]); */ + /* } */ + /* for(iqtv=1; iqtv <= nqtveff; iqtv++){ /\* Varying quantitatives covariates *\/ */ + /* iv=TmodelInvQind[iqtv]; /\* Counting the # varying covariate from 1 to ntveff *\/ */ + /* /\* printf(" i=%d,mi=%d,iqtv=%d,TmodelInvQind[iqtv]=%d,cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]=%f\n", i, mi, iqtv, TmodelInvQind[iqtv],cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]); *\/ */ + /* cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]; */ + /* } */ + /* for products of time varying to be done */ 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); } + + 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(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2]));*/ /* linear interpolation */ } /*lli=(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]);*/ /*if(lli ==000.0)*/ - /*printf("bbh= %f lli=%f savm=%f out=%f %d\n",bbh,lli,savm[s1][s2], out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]],i); */ + /* printf("num[i], i=%d, bbh= %f lli=%f savm=%f out=%f %d\n",bbh,lli,savm[s1][s2], out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]],i); */ ipmx +=1; sw += weight[i]; ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; @@ -4021,7 +4106,7 @@ double func( double *x) cov[ioffset+TvarFind[k]]=covar[Tvar[TvarFind[k]]][i]; for(mi=1; mi<= wav[i]-1; mi++){ for(k=1; k <= ncovv ; k++){ - cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]-ncovcol-nqv][i]; + cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]-ncovcol-nqv][i]; /* Cotvar starts at ntv */ } for (ii=1;ii<=nlstate+ndeath;ii++) for (j=1;j<=nlstate+ndeath;j++){ @@ -4068,7 +4153,10 @@ double func( double *x) if(nagesqr==1) cov[3]= agexact*agexact; for (kk=1; kk<=cptcovage;kk++) { - cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; + if(!FixedV[Tvar[Tage[kk]]]) + cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */ + else + cov[Tage[kk]+2+nagesqr]=cotvar[mw[mi][i]][Tvar[Tage[kk]]-ncovcol-nqv][i]*agexact; /* -ntv because cotvar starts at ntv */ } out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); @@ -4124,7 +4212,7 @@ double func( double *x) 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]); */ + /* 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]); */ } /* end of wave */ } /* end of individual */ }else{ /* ml=5 no inter-extrapolation no jackson =0.8a */ @@ -4143,7 +4231,10 @@ double func( double *x) if(nagesqr==1) cov[3]= agexact*agexact; for (kk=1; kk<=cptcovage;kk++) { - cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; + if(!FixedV[Tvar[Tage[kk]]]) + cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */ + else + cov[Tage[kk]+2+nagesqr]=cotvar[mw[mi][i]][Tvar[Tage[kk]]-ncovcol-nqv][i]*agexact; /* -ntv because cotvar starts at ntv */ } out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, @@ -4172,8 +4263,11 @@ double func( double *x) double funcone( double *x) { /* Same as func but slower because of a lot of printf and if */ - int i, ii, j, k, mi, d, kk; + int i, ii, j, k, mi, d, kk, kf=0; int ioffset=0; + int ipos=0,iposold=0,ncovv=0; + + double cotvarv, cotvarvold; double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; double **out; double lli; /* Individual log likelihood */ @@ -4195,13 +4289,21 @@ double funcone( double *x) for(k=1; k<=nlstate; k++) ll[k]=0.; ioffset=0; for (i=1,ipmx=0, sw=0.; i<=imx; i++){ + /* Computes the values of the ncovmodel covariates of the model + depending if the covariates are fixed or varying (age dependent) and stores them in cov[] + Then computes with function pmij which return a matrix p[i][j] giving the elementary probability + to be observed in j being in i according to the model. + */ /* ioffset=2+nagesqr+cptcovage; */ ioffset=2+nagesqr; /* Fixed */ /* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */ /* for (k=1; k<=ncoveff;k++){ /\* Simple and product fixed Dummy covariates without age* products *\/ */ - for (k=1; k<=ncovf;k++){ /* Simple and product fixed covariates without age* products *//* Missing values are set to -1 but should be dropped */ - cov[ioffset+TvarFind[k]]=covar[Tvar[TvarFind[k]]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (k=6)*/ + for (kf=1; kf<=ncovf;kf++){ /* Simple and product fixed covariates without age* products *//* Missing values are set to -1 but should be dropped */ + /* printf("Debug3 TvarFind[%d]=%d",kf, TvarFind[kf]); */ + /* printf(" Tvar[TvarFind[kf]]=%d", Tvar[TvarFind[kf]]); */ + /* printf(" i=%d covar[Tvar[TvarFind[kf]]][i]=%f\n",i,covar[Tvar[TvarFind[kf]]][i]); */ + cov[ioffset+TvarFind[kf]]=covar[Tvar[TvarFind[kf]]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (k=6)*/ /* cov[ioffset+TvarFind[1]]=covar[Tvar[TvarFind[1]]][i]; */ /* cov[2+6]=covar[Tvar[6]][i]; */ /* cov[2+6]=covar[2][i]; V2 */ @@ -4212,6 +4314,19 @@ double funcone( double *x) /* cov[2+9]=covar[Tvar[9]][i]; */ /* cov[2+9]=covar[1][i]; V1 */ } + /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] + is 5, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2]=6 + has been calculated etc */ + /* For an individual i, wav[i] gives the number of effective waves */ + /* We compute the contribution to Likelihood of each effective transition + mw[mi][i] is real wave of the mi th effectve wave */ + /* Then statuses are computed at each begin and end of an effective wave s1=s[ mw[mi][i] ][i]; + s2=s[mw[mi+1][i]][i]; + And the iv th varying covariate in the DATA is the cotvar[mw[mi+1][i]][iv][i] + But if the variable is not in the model TTvar[iv] is the real variable effective in the model: + meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i] + */ + /* This part may be useless now because everythin should be in covar */ /* for (k=1; k<=nqfveff;k++){ /\* Simple and product fixed Quantitative covariates without age* products *\/ */ /* cov[++ioffset]=coqvar[TvarFQ[k]][i];/\* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V2 and V1*V2 is fixed (k=6 and 7?)*\/ */ /* } */ @@ -4221,17 +4336,59 @@ double funcone( double *x) for(mi=1; mi<= wav[i]-1; mi++){ /* Varying with waves */ - /* Wave varying (but not age varying) */ - for(k=1; k <= ncovv ; k++){ /* Varying covariates (single and product but no age )*/ - /* cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]][i]; */ - cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]-ncovcol-nqv][i]; - } - /* for(itv=1; itv <= ntveff; itv++){ /\* Varying dummy covariates (single??)*\/ */ - /* iv= Tvar[Tmodelind[ioffset-2-nagesqr-cptcovage+itv]]-ncovcol-nqv; /\* Counting the # varying covariate from 1 to ntveff *\/ */ - /* cov[ioffset+iv]=cotvar[mw[mi][i]][iv][i]; */ - /* k=ioffset-2-nagesqr-cptcovage+itv; /\* position in simple model *\/ */ - /* cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i]; */ - /* printf(" i=%d,mi=%d,itv=%d,TmodelInvind[itv]=%d,cotvar[mw[mi][i]][TmodelInvind[itv]][i]=%f\n", i, mi, itv, TmodelInvind[itv],cotvar[mw[mi][i]][TmodelInvind[itv]][i]); */ + /* Wave varying (but not age varying) *//* V1+V3+age*V1+age*V3+V1*V3 with V4 tv and V5 tvq k= 1 to 5 and extra at V(5+1)=6 for V1*V3 */ + /* for(k=1; k <= ncovv ; k++){ /\* Varying covariates (single and product but no age )*\/ */ + /* /\* cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]][i]; *\/ */ + /* cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]-ncovcol-nqv][i]; */ + /* } */ + + /*# ID V1 V2 weight birth death 1st s1 V3 V4 V5 2nd s2 */ + /* model V1+V3+age*V1+age*V3+V1*V3 */ + /* Tvar={1, 3, 1, 3, 6}, the 6 comes from the fact that there are already V1, V2, V3, V4, V5 native covariates */ + /* TvarVV[1]=V3 (first time varying in the model equation, TvarVV[2]=V1 (in V1*V3) TvarVV[3]=3(V3) */ + /* We need the position of the time varying or product in the model */ + /* TvarVVind={2,5,5}, for V3 at position 2 and then the product V1*V3 is decomposed into V1 and V3 but at same position 5 */ + /* TvarVV gives the variable name */ + /* Other example V1 + V3 + V5 + age*V1 + age*V3 + age*V5 + V1*V3 + V3*V5 + V1*V5 + * k= 1 2 3 4 5 6 7 8 9 + * varying 1 2 3 4 5 + * ncovv 1 2 3 4 5 6 7 8 + * TvarVV V3 5 1 3 3 5 1 5 + * TvarVVind 2 3 7 7 8 8 9 9 + * TvarFind[k] 1 0 0 0 0 0 0 0 0 + * cotvar starts at ntv=2 (because of V3 V4) + */ + for(ncovv=1, iposold=0; ncovv <= ncovvt ; ncovv++){ /* Varying covariates (single and product but no age) including individual from products */ + itv=TvarVV[ncovv]; /* TvarVV={3, 1, 3} gives the name of each varying covariate */ + ipos=TvarVVind[ncovv]; /* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate*/ + if(TvarFind[itv]==0){ /* Not a fixed covariate */ + cotvarv=cotvar[mw[mi][i]][TvarVV[ncovv]-ncovcol-nqv][i]; /* cotvar[wav][ntv+iv][i] */ + }else{ /* fixed covariate */ + cotvarv=covar[Tvar[TvarFind[itv]]][i]; + } + if(ipos!=iposold){ /* Not a product or first of a product */ + cotvarvold=cotvarv; + }else{ /* A second product */ + cotvarv=cotvarv*cotvarvold; + } + iposold=ipos; + cov[ioffset+ipos]=cotvarv; + /* For products */ + } + /* for(itv=1; itv <= ntveff; itv++){ /\* Varying dummy covariates single *\/ */ + /* iv=TvarVDind[itv]; /\* iv, position in the model equation of time varying covariate itv *\/ */ + /* /\* "V1+V3+age*V1+age*V3+V1*V3" with V3 time varying *\/ */ + /* /\* 1 2 3 4 5 *\/ */ + /* /\*itv 1 *\/ */ + /* /\* TvarVInd[1]= 2 *\/ */ + /* /\* iv= Tvar[Tmodelind[itv]]-ncovcol-nqv; /\\* Counting the # varying covariate from 1 to ntveff *\\/ *\/ */ + /* /\* iv= Tvar[Tmodelind[ioffset-2-nagesqr-cptcovage+itv]]-ncovcol-nqv; *\/ */ + /* /\* cov[ioffset+iv]=cotvar[mw[mi][i]][iv][i]; *\/ */ + /* /\* k=ioffset-2-nagesqr-cptcovage+itv; /\\* position in simple model *\\/ *\/ */ + /* /\* cov[ioffset+iv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i]; *\/ */ + /* cov[ioffset+iv]=cotvar[mw[mi][i]][itv][i]; */ + /* /\* printf(" i=%d,mi=%d,itv=%d,TmodelInvind[itv]=%d,cotvar[mw[mi][i]][itv][i]=%f\n", i, mi, itv, TvarVDind[itv],cotvar[mw[mi][i]][itv][i]); *\/ */ + /* } */ /* for(iqtv=1; iqtv <= nqtveff; iqtv++){ /\* Varying quantitatives covariates *\/ */ /* iv=TmodelInvQind[iqtv]; /\* Counting the # varying covariate from 1 to ntveff *\/ */ /* /\* printf(" i=%d,mi=%d,iqtv=%d,TmodelInvQind[iqtv]=%d,cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]=%f\n", i, mi, iqtv, TmodelInvQind[iqtv],cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]); *\/ */ @@ -4269,7 +4426,19 @@ double funcone( double *x) savm=oldm; oldm=newm; } /* end mult */ - + /*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */ + /* But now since version 0.9 we anticipate for bias at large stepm. + * If stepm is larger than one month (smallest stepm) and if the exact delay + * (in months) between two waves is not a multiple of stepm, we rounded to + * the nearest (and in case of equal distance, to the lowest) interval but now + * we keep into memory the bias bh[mi][i] and also the previous matrix product + * (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the + * probability in order to take into account the bias as a fraction of the way + * from savm to out if bh is negative or even beyond if bh is positive. bh varies + * -stepm/2 to stepm/2 . + * For stepm=1 the results are the same as for previous versions of Imach. + * For stepm > 1 the results are less biased than in previous versions. + */ s1=s[mw[mi][i]][i]; s2=s[mw[mi+1][i]][i]; /* if(s2==-1){ */ @@ -4301,27 +4470,52 @@ double funcone( double *x) 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]); */ + printf("Funcone num[i]=%ld i=%6d V= ", num[i], i); + for (kf=1; kf<=ncovf;kf++){ /* Simple and product fixed covariates without age* products *//* Missing values are set to -1 but should be dropped */ + printf("%g",covar[Tvar[TvarFind[kf]]][i]); + } + for(ncovv=1, iposold=0; ncovv <= ncovvt ; ncovv++){ /* Varying covariates (single and product but no age) including individual from products */ + ipos=TvarVVind[ncovv]; /* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate*/ + if(ipos!=iposold){ /* Not a product or first of a product */ + printf(" %g",cov[ioffset+ipos]); + }else{ + printf("*"); + } + iposold=ipos; + } + for (kk=1; kk<=cptcovage;kk++) { + if(!FixedV[Tvar[Tage[kk]]]) + printf(" %g*age",covar[Tvar[Tage[kk]]][i]); + else + printf(" %g*age",cotvar[mw[mi][i]][Tvar[Tage[kk]]-ncovcol-nqv][i]); + } + printf(" s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],(s2==-1? -1: out[s1][s2]),(s2==-1? -1: savm[s1][s2])); if(globpr){ fprintf(ficresilk,"%09ld %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,(s2==-1? -1: out[s1][s2]),(s2==-1? -1: savm[s1][s2])); + /* printf("%09ld %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,(s2==-1? -1: out[s1][s2]),(s2==-1? -1: 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); + /* printf(" %10.6f",-ll[k]*gipmx/gsw); */ } fprintf(ficresilk," %10.6f\n", -llt); + /* printf(" %10.6f\n", -llt); */ } - } /* end of wave */ -} /* end of individual */ -for(k=1,l=0.; k<=nlstate; k++) l += ll[k]; + } /* end of wave */ + } /* end of individual */ + for(k=1,l=0.; k<=nlstate; k++) l += ll[k]; /* printf("l1=%f l2=%f ",ll[1],ll[2]); */ -l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */ -if(globpr==0){ /* First time we count the contributions and weights */ - gipmx=ipmx; - gsw=sw; -} + l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */ + if(globpr==0){ /* First time we count the contributions and weights */ + gipmx=ipmx; + gsw=sw; + } return -l; } @@ -4980,7 +5174,7 @@ Title=%s
Datafile=%s Firstpass=%d La j1=0; /* j=ncoveff; /\* Only fixed dummy covariates *\/ */ - j=cptcoveff; /* Only dummy covariates used in the model */ + j=cptcoveff; /* Only simple dummy covariates used in the model */ /* j=cptcovn; /\* Only dummy covariates of the model *\/ */ if (cptcovn<1) {j=1;ncodemax[1]=1;} @@ -5001,7 +5195,7 @@ Title=%s
Datafile=%s Firstpass=%d La /* if a constant only model, one pass to compute frequency tables and to write it on ficresp */ /* Loop on nj=1 or 2 if dummy covariates j!=0 - * Loop on j1(1 to 2**cptcovn) covariate combination + * Loop on j1(1 to 2**cptcoveff) covariate combination * freq[s1][s2][iage] =0. * Loop on iind * ++freq[s1][s2][iage] weighted @@ -5026,7 +5220,7 @@ Title=%s
Datafile=%s Firstpass=%d La if(nj==1) j=0; /* First pass for the constant */ else{ - j=cptcovs; /* Other passes for the covariate values */ + j=cptcoveff; /* Other passes for the covariate values number of simple covariates in the model V2+V1 =2 (simple dummy fixed or time varying) */ } first=1; for (j1 = 1; j1 <= (int) pow(2,j); j1++){ /* Loop on all dummy covariates combination of the model, ie excluding quantitatives, V4=0, V3=0 for example, fixed or varying covariates */ @@ -5062,13 +5256,16 @@ Title=%s
Datafile=%s Firstpass=%d La bool=1; if(j !=0){ if(anyvaryingduminmodel==0){ /* If All fixed covariates */ - if (cptcovn >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ - for (z1=1; z1<=cptcovn; z1++) { /* loops on covariates in the model */ + if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ + for (z1=1; z1<=cptcoveff; z1++) { /* loops on covariates in the model */ /* if(Tvaraff[z1] ==-20){ */ /* /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */ /* }else if(Tvaraff[z1] ==-10){ */ /* /\* sumnew+=coqvar[z1][iind]; *\/ */ /* }else */ /* TODO TODO codtabm(j1,z1) or codtabm(j1,Tvaraff[z1]]z1)*/ + /* if( iind >=imx-3) printf("Searching error iind=%d Tvaraff[z1]=%d covar[Tvaraff[z1]][iind]=%.f TnsdVar[Tvaraff[z1]]=%d, cptcoveff=%d, cptcovs=%d \n",iind, Tvaraff[z1], covar[Tvaraff[z1]][iind],TnsdVar[Tvaraff[z1]],cptcoveff, cptcovs); */ + if(Tvaraff[z1]<1 || Tvaraff[z1]>=NCOVMAX) + printf("Error Tvaraff[z1]=%d<1 or >=%d, cptcoveff=%d model=1+age+%s\n",Tvaraff[z1],NCOVMAX, cptcoveff, model); if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]){ /* for combination j1 of covariates */ /* Tests if the value of the covariate z1 for this individual iind responded to combination j1 (V4=1 V3=0) */ bool=0; /* bool should be equal to 1 to be selected, one covariate value failed */ @@ -5078,7 +5275,7 @@ Title=%s
Datafile=%s Firstpass=%d La /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/ } /* Onlyf fixed */ } /* end z1 */ - } /* cptcovn > 0 */ + } /* cptcoveff > 0 */ } /* end any */ }/* end j==0 */ if (bool==1){ /* We selected an individual iind satisfying combination j1 (V4=1 V3=0) or all fixed covariates */ @@ -5087,9 +5284,9 @@ Title=%s
Datafile=%s Firstpass=%d La m=mw[mi][iind]; if(j!=0){ if(anyvaryingduminmodel==1){ /* Some are varying covariates */ - for (z1=1; z1<=cptcovn; z1++) { + for (z1=1; z1<=cptcoveff; z1++) { if( Fixed[Tmodelind[z1]]==1){ - iv= Tvar[Tmodelind[z1]]-ncovcol-nqv; + iv= Tvar[Tmodelind[z1]]-ncovcol-nqv; /* Good */ if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]) /* iv=1 to ntv, right modality. If covariate's value is -1, we don't select. It differs from the constant and age model which counts them. */ @@ -5161,16 +5358,16 @@ Title=%s
Datafile=%s Firstpass=%d La /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ - if(cptcovn==0 && nj==1) /* no covariate and first pass */ + if(cptcoveff==0 && nj==1) /* no covariate and first pass */ pstamp(ficresp); - if (cptcovn>0 && j!=0){ + if (cptcoveff>0 && j!=0){ pstamp(ficresp); printf( "\n#********** Variable "); fprintf(ficresp, "\n#********** Variable "); fprintf(ficresphtm, "\n

********** Variable "); fprintf(ficresphtmfr, "\n

********** Variable "); fprintf(ficlog, "\n#********** Variable "); - for (z1=1; z1<=cptcovs; z1++){ + for (z1=1; z1<=cptcoveff; z1++){ if(!FixedV[Tvaraff[z1]]){ printf( "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]); fprintf(ficresp, "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]); @@ -5216,14 +5413,17 @@ Title=%s
Datafile=%s Firstpass=%d La /* } */ fprintf(ficresphtm,""); - if((cptcovn==0 && nj==1)|| nj==2 ) /* no covariate and first pass */ + if((cptcoveff==0 && nj==1)|| nj==2 ) /* no covariate and first pass */ fprintf(ficresp, " Age"); - if(nj==2) for (z1=1; z1<=cptcovn; z1++) fprintf(ficresp, " V%d=%d",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]); + if(nj==2) for (z1=1; z1<=cptcoveff; z1++) { + printf(" V%d=%d, z1=%d, Tvaraff[z1]=%d, j1=%d, TnsdVar[Tvaraff[%d]]=%d |",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])], z1, Tvaraff[z1], j1,z1,TnsdVar[Tvaraff[z1]]); + fprintf(ficresp, " V%d=%d",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]); + } for(i=1; i<=nlstate;i++) { - if((cptcovn==0 && nj==1)|| nj==2 ) fprintf(ficresp," Prev(%d) N(%d) N ",i,i); + if((cptcoveff==0 && nj==1)|| nj==2 ) fprintf(ficresp," Prev(%d) N(%d) N ",i,i); fprintf(ficresphtm, "",i,i); } - if((cptcovn==0 && nj==1)|| nj==2 ) fprintf(ficresp, "\n"); + if((cptcoveff==0 && nj==1)|| nj==2 ) fprintf(ficresp, "\n"); fprintf(ficresphtm, "\n"); /* Header of frequency table by age */ @@ -5291,14 +5491,14 @@ Title=%s
Datafile=%s Firstpass=%d La } /* Writing ficresp */ - if(cptcovn==0 && nj==1){ /* no covariate and first pass */ + if(cptcoveff==0 && nj==1){ /* no covariate and first pass */ if( iage <= iagemax){ fprintf(ficresp," %d",iage); } }else if( nj==2){ if( iage <= iagemax){ fprintf(ficresp," %d",iage); - for (z1=1; z1<=cptcovn; z1++) fprintf(ficresp, " %d %d",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]); + for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresp, " %d %d",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]); } } for(s1=1; s1 <=nlstate ; s1++){ @@ -5313,7 +5513,7 @@ Title=%s
Datafile=%s Firstpass=%d La } if( iage <= iagemax){ if(pos>=1.e-5){ - if(cptcovn==0 && nj==1){ /* no covariate and first pass */ + if(cptcoveff==0 && nj==1){ /* no covariate and first pass */ fprintf(ficresp," %.5f %.0f %.0f",prop[s1][iage]/pospropta, prop[s1][iage],pospropta); }else if( nj==2){ fprintf(ficresp," %.5f %.0f %.0f",prop[s1][iage]/pospropta, prop[s1][iage],pospropta); @@ -5322,7 +5522,7 @@ Title=%s
Datafile=%s Firstpass=%d La /*probs[iage][s1][j1]= pp[s1]/pos;*/ /*printf("\niage=%d s1=%d j1=%d %.5f %.0f %.0f %f",iage,s1,j1,pp[s1]/pos, pp[s1],pos,probs[iage][s1][j1]);*/ } else{ - if((cptcovn==0 && nj==1)|| nj==2 ) fprintf(ficresp," NaNq %.0f %.0f",prop[s1][iage],pospropta); + if((cptcoveff==0 && nj==1)|| nj==2 ) fprintf(ficresp," NaNq %.0f %.0f",prop[s1][iage],pospropta); fprintf(ficresphtm,"",iage, prop[s1][iage],pospropta); } } @@ -5348,7 +5548,7 @@ Title=%s
Datafile=%s Firstpass=%d La } fprintf(ficresphtmfr,"\n "); fprintf(ficresphtm,"\n"); - if((cptcovn==0 && nj==1)|| nj==2 ) { + if((cptcoveff==0 && nj==1)|| nj==2 ) { if(iage <= iagemax) fprintf(ficresp,"\n"); } @@ -5375,7 +5575,7 @@ Title=%s
Datafile=%s Firstpass=%d La printf("# This combination (%d) is not valid and no result will be produced\n",j1); invalidvarcomb[j1]=1; }else{ - fprintf(ficresphtm,"\n

This combination (%d) is valid and result will be produced.

",j1); + fprintf(ficresphtm,"\n

This combination (%d) is valid and result will be produced (or no resultline).

",j1); invalidvarcomb[j1]=0; } fprintf(ficresphtmfr,"
AgePrev(%d)N(%d)N%dNaNq%.0f%.0f
\n"); @@ -5606,7 +5806,7 @@ void prevalence(double ***probs, double if (cptcovn<1) {j=1;ncodemax[1]=1;} first=0; - for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){ /* For each combination of covariate */ + for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){ /* For each combination of simple dummy covariates */ for (i=1; i<=nlstate; i++) for(iage=iagemin-AGEMARGE; iage <= iagemax+4+AGEMARGE; iage++) prop[i][iage]=0.0; @@ -5930,14 +6130,16 @@ void concatwav(int wav[], int **dh, int nbcode[k][j]=0; /* Valgrind */ /* Loop on covariates without age and products and no quantitative variable */ - for (k=1; k<=cptcovt; k++) { /* From model V1 + V2*age + V3 + V3*V4 keeps V1 + V3 = 2 only */ + for (k=1; k<=cptcovt; k++) { /* cptcovt: total number of covariates of the model (2) nbocc(+)+1 = 8 excepting constant and age and age*age */ for (j=-1; (j < maxncov); j++) Ndum[j]=0; - if(Dummy[k]==0 && Typevar[k] !=1){ /* Dummy covariate and not age product */ + printf("Testing k=%d, cptcovt=%d\n",k, cptcovt); + if(Dummy[k]==0 && Typevar[k] !=1 && Typevar[k] != 2){ /* Dummy covariate and not age product nor fixed product */ switch(Fixed[k]) { case 0: /* Testing on fixed dummy covariate, simple or product of fixed */ modmaxcovj=0; modmincovj=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*/ + /* printf("Waiting for error tricode Tvar[%d]=%d i=%d (int)(covar[Tvar[k]][i]=%d\n",k,Tvar[k], i, (int)(covar[Tvar[k]][i])); */ ij=(int)(covar[Tvar[k]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i * If product of Vn*Vm, still boolean *: @@ -6030,6 +6232,10 @@ void concatwav(int wav[], int **dh, int } /* end dummy test */ if(Dummy[k]==1 && Typevar[k] !=1){ /* Quantitative covariate and not age product */ 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[k]<=0 || Tvar[k]>=NCOVMAX){ + printf("Error k=%d \n",k); + exit(1); + } if(isnan(covar[Tvar[k]][i])){ printf("ERROR, IMaCh doesn't treat fixed quantitative covariate with missing values V%d=., individual %d will be skipped.\n",Tvar[k],i); fprintf(ficlog,"ERROR, currently IMaCh doesn't treat covariate with missing values V%d=., individual %d will be skipped.\n",Tvar[k],i); @@ -6037,7 +6243,7 @@ void concatwav(int wav[], int **dh, int exit(1); } } - } + } /* end Quanti */ } /* end of loop on model-covariate k. nbcode[Tvark][1]=-1, nbcode[Tvark][1]=0 and nbcode[Tvark][2]=1 sets the value of covariate k*/ for (k=-1; k< maxncov; k++) Ndum[k]=0; @@ -6051,13 +6257,22 @@ void concatwav(int wav[], int **dh, int 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) *\/ */ - for (k=1; k<= cptcovt; k++) { /* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) */ + for (k=1; k<= cptcovt; k++) { /* cptcovt: total number of covariates of the model (2) nbocc(+)+1 = 8 excepting constant and age and age*age */ + /* 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)){ /\* Tvar[i] <= ncovmodel ? *\/ */ - if(Ndum[Tvar[k]]!=0 && Dummy[k] == 0 && Typevar[k]==0){ /* Only Dummy and non empty in the model */ + if(Ndum[Tvar[k]]!=0 && Dummy[k] == 0 && Typevar[k]==0){ /* Only Dummy simple and non empty in the model */ + /* Typevar[k] =0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product */ + /* Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product*/ /* If product not in single variable we don't print results */ /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ - ++ij;/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, */ + ++ij;/* V5 + V4 + V3 + V4*V3 + V5*age + V2 + V1*V2 + V1*age + V1, *//* V5 quanti, V2 quanti, V4, V3, V1 dummies */ + /* k= 1 2 3 4 5 6 7 8 9 */ + /* Tvar[k]= 5 4 3 6 5 2 7 1 1 */ + /* ij 1 2 3 */ + /* Tvaraff[ij]= 4 3 1 */ + /* Tmodelind[ij]=2 3 9 */ + /* TmodelInvind[ij]=2 1 1 */ Tvaraff[ij]=Tvar[k]; /* For printing combination *//* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, Tvar {5, 4, 3, 6, 5, 2, 7, 1, 1} Tvaraff={4, 3, 1} V4, V3, V1*/ Tmodelind[ij]=k; /* Tmodelind: index in model of dummies Tmodelind[1]=2 V4: pos=2; V3: pos=3, V1=9 {2, 3, 9, ?, ?,} */ TmodelInvind[ij]=Tvar[k]- ncovcol-nqv; /* Inverse TmodelInvind[2=V4]=2 second dummy varying cov (V4)4-1-1 {0, 2, 1, } TmodelInvind[3]=1 */ @@ -6073,7 +6288,7 @@ void concatwav(int wav[], int **dh, int } /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */ /* ij--; */ /* cptcoveff=ij; /\*Number of total covariates*\/ */ - *cptcov=ij; /* cptcov= Number of total real effective covariates: effective (used as cptcoveff in other functions) + *cptcov=ij; /* cptcov= Number of total real effective simple dummies (fixed or time arying) effective (used as cptcoveff in other functions) * because they can be excluded from the model and real * if in the model but excluded because missing values, but how to get k from ij?*/ for(j=ij+1; j<= cptcovt; j++){ @@ -6206,6 +6421,7 @@ void concatwav(int wav[], int **dh, int /* Covariances of health expectancies eij and of total life expectancies according to initial status i, ei. . */ + /* Very time consuming function, but already optimized with precov */ int i, j, nhstepm, hstepm, h, nstepm, k, cptj, cptj2, i2, j2, ij, ji; int nhstepma, nstepma; /* Decreasing with age */ double age, agelim, hf; @@ -6474,11 +6690,16 @@ void concatwav(int wav[], int **dh, int pstamp(ficresprobmorprev); fprintf(ficresprobmorprev,"# probabilities of dying before estepm=%d months for people of exact age and weighted probabilities w1*p1j+w2*p2j+... stand dev in()\n",estepm); fprintf(ficresprobmorprev,"# Selected quantitative variables and dummies"); - for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ /* To be done*/ - fprintf(ficresprobmorprev," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); + + /* We use TinvDoQresult[nres][resultmodel[nres][j] we sort according to the equation model and the resultline: it is a choice */ + /* for (j=1; j<= nsq; j++){ /\* For each selected (single) quantitative value *\/ /\* To be done*\/ */ + /* fprintf(ficresprobmorprev," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + /* } */ + for (j=1; j<= cptcovs; j++){ /* For each selected (single) quantitative value */ /* To be done*/ + fprintf(ficresprobmorprev," V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); } - for(j=1;j<=cptcoveff;j++) - fprintf(ficresprobmorprev," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(ij,TnsdVar[Tvaraff[j]])]); + /* for(j=1;j<=cptcoveff;j++) */ + /* fprintf(ficresprobmorprev," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(ij,TnsdVar[Tvaraff[j]])]); */ fprintf(ficresprobmorprev,"\n"); fprintf(ficresprobmorprev,"# Age cov=%-d",ij); @@ -7125,9 +7346,9 @@ To be simple, these graphs help to under /* Including quantitative variables of the resultline to be done */ for (z1=1; z1<=cptcovs; z1++){ /* Loop on each variable of this resultline */ - printf("Varprob modelresult[%d][%d]=%d model=%s \n",nres, z1, modelresult[nres][z1], model); - fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=%s \n",nres, z1, modelresult[nres][z1], model); - /* fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=%s resultline[%d]=%s \n",nres, z1, modelresult[nres][z1], model, nres, resultline[nres]); */ + printf("Varprob modelresult[%d][%d]=%d model=1+age+%s \n",nres, z1, modelresult[nres][z1], model); + fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=1+age+%s \n",nres, z1, modelresult[nres][z1], model); + /* fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=1+age+%s resultline[%d]=%s \n",nres, z1, modelresult[nres][z1], model, nres, resultline[nres]); */ if(Dummy[modelresult[nres][z1]]==0){/* Dummy variable of the variable in position modelresult in the model corresponding to z1 in resultline */ if(Fixed[modelresult[nres][z1]]==0){ /* Fixed referenced to model equation */ fprintf(ficresprob,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */ @@ -7149,7 +7370,7 @@ To be simple, these graphs help to under } }else if(Dummy[modelresult[nres][z1]]==1){ /* Quanti variable */ /* For each selected (single) quantitative value */ - fprintf(ficresprob," V%d=%f ",Tvqresult[nres][z1],Tqresult[nres][z1]); + fprintf(ficresprob," V%d=%lg ",Tvqresult[nres][z1],Tqresult[nres][z1]); if(Fixed[modelresult[nres][z1]]==0){ /* Fixed */ fprintf(ficresprob,"fixed "); fprintf(ficresprobcov,"fixed "); @@ -7496,29 +7717,39 @@ void printinghtml(char fileresu[], char jj1=0; fprintf(fichtm," \n"); fprintf(fichtm,"\ @@ -7680,7 +7910,7 @@ See page 'Matrix of variance-covariance /* - Population forecasting (if popforecast=1): pop%s
\n */ /*
",fileres,fileres,fileres,fileres); */ /* else */ -/* fprintf(fichtm,"\n No population forecast: popforecast = %d (instead of 1) or stepm = %d (instead of 1) or model=%s (instead of .)

\n",popforecast, stepm, model); */ +/* fprintf(fichtm,"\n No population forecast: popforecast = %d (instead of 1) or stepm = %d (instead of 1) or model=1+age+%s (instead of .)

\n",popforecast, stepm, model); */ fflush(fichtm); m=pow(2,cptcoveff); @@ -7691,28 +7921,24 @@ See page 'Matrix of variance-covariance jj1=0; fprintf(fichtm," \n"); jj1=0; for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - for(k1=1; k1<=m;k1++){ - if(m != 1 && TKresult[nres]!= k1) - continue; + /* k1=nres; */ + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + /* for(k1=1; k1<=m;k1++){ */ + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ /* for(i1=1; i1<=ncodemax[k1];i1++){ */ jj1++; if (cptcovn > 0) { fprintf(fichtm,"\n

"); fprintf(fichtm,"


************ Results for covariates"); - for (cpt=1; cpt<=cptcoveff;cpt++){ /**< cptcoveff number of variables */ - fprintf(fichtm," V%d=%d ",Tvresult[nres][cpt],Tresult[nres][cpt]); - printf(" V%d=%d ",Tvresult[nres][cpt],Tresult[nres][cpt]);fflush(stdout); + for (cpt=1; cpt<=cptcovs;cpt++){ /**< cptcoveff number of variables */ + fprintf(fichtm," V%d=%lg ",Tvresult[nres][cpt],TinvDoQresult[nres][Tvresult[nres][cpt]]); + printf(" V%d=%lg ",Tvresult[nres][cpt],TinvDoQresult[nres][Tvresult[nres][cpt]]); /* fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]); */ } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - fprintf(fichtm," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); - } - fprintf(fichtm," (model=%s) ************\n
",model); + fprintf(fichtm," (model=1+age+%s) ************\n
",model); if(invalidvarcomb[k1]){ fprintf(fichtm,"\n

Combination (%d) ignored because no cases

\n",k1); continue; } - } + } /* If cptcovn >0 */ for(cpt=1; cpt<=nlstate;cpt++) { fprintf(fichtm,"\n
- Observed (cross-sectional with mov_average=%d) and period (incidence based) \ prevalence (with 95%% confidence interval) in state (%d):
%s_%d-%d-%d.svg",mobilav,cpt,subdirf2(optionfilefiname,"V_"),cpt,k1,nres,subdirf2(optionfilefiname,"V_"),cpt,k1,nres); @@ -7772,7 +7995,6 @@ true period expectancies (those weighted fprintf(fichtm," (data from text file %s.txt) \n
",subdirf2(optionfilefiname,"T_"),subdirf2(optionfilefiname,"T_")); fprintf(fichtm,"",subdirf2(optionfilefiname,"E_"),k1,nres); /* } /\* end i1 *\/ */ - }/* End k1 */ }/* End nres */ fprintf(fichtm,""); fflush(fichtm); @@ -7850,31 +8072,37 @@ void printinggnuplot(char fileresu[], ch strcpy(optfileres,"vpl"); /* 1eme*/ for (cpt=1; cpt<= nlstate ; cpt ++){ /* For each live state */ - for (k1=1; k1<= m ; k1 ++){ /* For each valid combination of covariate */ + /* for (k1=1; k1<= m ; k1 ++){ /\* For each valid combination of covariate *\/ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */ - if(m != 1 && TKresult[nres]!= k1) - continue; + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ /* We are interested in selected combination by the resultline */ /* printf("\n# 1st: Period (stable) prevalence with CI: 'VPL_' files and live state =%d ", cpt); */ fprintf(ficgp,"\n# 1st: Forward (stable period) prevalence with CI: 'VPL_' files and live state =%d ", cpt); strcpy(gplotlabel,"("); - 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 *\/ */ - lv=codtabm(k1,TnsdVar[Tvaraff[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 */ - vlv= nbcode[Tvaraff[k]][lv]; /* vlv is the value of the covariate lv, 0 or 1 */ - /* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv */ - /* printf(" V%d=%d ",Tvaraff[k],vlv); */ - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - /* printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ - fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); + for (k=1; k<=cptcovs; k++){ /* For each covariate k get corresponding value lv for combination k1 */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + + /* 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 *\\/ *\/ */ + /* lv=codtabm(k1,TnsdVar[Tvaraff[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 *\/ */ + /* vlv= nbcode[Tvaraff[k]][lv]; /\* vlv is the value of the covariate lv, 0 or 1 *\/ */ + /* /\* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv *\/ */ + /* /\* printf(" V%d=%d ",Tvaraff[k],vlv); *\/ */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* /\* printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); *\/ */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ } strcpy(gplotlabel+strlen(gplotlabel),")"); /* printf("\n#\n"); */ @@ -7888,7 +8116,7 @@ void printinggnuplot(char fileresu[], ch fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"V_"),cpt,k1,nres); fprintf(ficgp,"\n#set out \"V_%s_%d-%d-%d.svg\" \n",optionfilefiname,cpt,k1,nres); /* fprintf(ficgp,"set label \"Alive state %d %s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",cpt,gplotlabel); */ - fprintf(ficgp,"set title \"Alive state %d %s model=%s\" font \"Helvetica,12\"\n",cpt,gplotlabel,model); + fprintf(ficgp,"set title \"Alive state %d %s model=1+age+%s\" font \"Helvetica,12\"\n",cpt,gplotlabel,model); fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \nset ter svg size 640, 480\nplot [%.f:%.f] \"%s\" every :::%d::%d u 1:($2==%d ? $3:1/0) \"%%lf %%lf",ageminpar,fage,subdirf2(fileresu,"VPL_"),nres-1,nres-1,nres); /* fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \nset ter svg size 640, 480\nplot [%.f:%.f] \"%s\" every :::%d::%d u 1:($2==%d ? $3:1/0) \"%%lf %%lf",ageminpar,fage,subdirf2(fileresu,"VPL_"),k1-1,k1-1,nres); */ /* k1-1 error should be nres-1*/ @@ -7987,33 +8215,38 @@ void printinggnuplot(char fileresu[], ch /* fprintf(ficgp,"\nset out ;unset label;\n"); */ fprintf(ficgp,"\nset out ;unset title;\n"); } /* nres */ - } /* k1 */ + /* } /\* k1 *\/ */ } /* cpt */ /*2 eme*/ - for (k1=1; k1<= m ; k1 ++){ + /* for (k1=1; k1<= m ; k1 ++){ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(m != 1 && TKresult[nres]!= k1) - continue; + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files "); strcpy(gplotlabel,"("); - 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 *\/ */ - lv=codtabm(k1,TnsdVar[Tvaraff[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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - /* for(k=1; k <= ncovds; k++){ */ - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); - fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); + for (k=1; k<=cptcovs; k++){ /* For each covariate k get corresponding value lv for combination k1 */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + /* 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 *\\/ *\/ */ + /* lv=codtabm(k1,TnsdVar[Tvaraff[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 *\/ */ + /* /\* vlv= nbcode[Tvaraff[k]][lv]; *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* /\* for(k=1; k <= ncovds; k++){ *\/ */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ } strcpy(gplotlabel+strlen(gplotlabel),")"); fprintf(ficgp,"\n#\n"); @@ -8055,33 +8288,38 @@ void printinggnuplot(char fileresu[], ch } /* vpopbased */ fprintf(ficgp,"\nset out;set out \"%s_%d-%d.svg\"; replot; set out; unset label;\n",subdirf2(optionfilefiname,"E_"),k1,nres); /* Buggy gnuplot */ } /* end nres */ - } /* k1 end 2 eme*/ + /* } /\* k1 end 2 eme*\/ */ /*3eme*/ - for (k1=1; k1<= m ; k1 ++){ + /* for (k1=1; k1<= m ; k1 ++){ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(m != 1 && TKresult[nres]!= k1) - continue; + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ for (cpt=1; cpt<= nlstate ; cpt ++) { /* Fragile no verification of covariate values */ fprintf(ficgp,"\n\n# 3d: Life expectancy with EXP_ files: combination=%d state=%d",k1, cpt); strcpy(gplotlabel,"("); - 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 *\/ */ - lv= codtabm(k1,TnsdVar[Tvaraff[k]]); /* 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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][resultmodel[nres][k4]]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][resultmodel[nres][k4]]); - } + for (k=1; k<=cptcovs; k++){ /* For each covariate k get corresponding value lv for combination k1 */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + /* 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 *\\/ *\/ */ + /* lv= codtabm(k1,TnsdVar[Tvaraff[k]]); /\* 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 *\/ */ + /* /\* vlv= nbcode[Tvaraff[k]][lv]; *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][resultmodel[nres][k4]]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][resultmodel[nres][k4]]); */ + } strcpy(gplotlabel+strlen(gplotlabel),")"); fprintf(ficgp,"\n#\n"); if(invalidvarcomb[k1]){ @@ -8112,31 +8350,36 @@ plot [%.f:%.f] \"%s\" every :::%d::%d u } fprintf(ficgp,"\nunset label;\n"); } /* end nres */ - } /* end kl 3eme */ + /* } /\* end kl 3eme *\/ */ /* 4eme */ /* Survival functions (period) from state i in state j by initial state i */ - for (k1=1; k1<=m; k1++){ /* For each covariate and each value */ + /* for (k1=1; k1<=m; k1++){ /\* For each covariate and each value *\/ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(m != 1 && TKresult[nres]!= k1) - continue; + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state cpt*/ strcpy(gplotlabel,"("); - fprintf(ficgp,"\n#\n#\n# Survival functions in state j : 'LIJ_' files, cov=%d state=%d",k1, cpt); - for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ - lv=codtabm(k1,TnsdVar[Tvaraff[k]]); - /* 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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); + fprintf(ficgp,"\n#\n#\n# Survival functions in state %d : 'LIJ_' files, cov=%d state=%d", cpt, k1, cpt); + for (k=1; k<=cptcovs; k++){ /* For each covariate k get corresponding value lv for combination k1 */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + /* for (k=1; k<=cptcoveff; k++){ /\* For each covariate and each value *\/ */ + /* lv=codtabm(k1,TnsdVar[Tvaraff[k]]); */ + /* /\* 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 *\/ */ + /* /\* vlv= nbcode[Tvaraff[k]][lv]; *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ } strcpy(gplotlabel+strlen(gplotlabel),")"); fprintf(ficgp,"\n#\n"); @@ -8165,31 +8408,36 @@ set ter svg size 640, 480\nunset log y\n fprintf(ficgp,"\nset out; unset label;\n"); } /* end cpt state*/ } /* end nres */ - } /* end covariate k1 */ + /* } /\* end covariate k1 *\/ */ /* 5eme */ /* Survival functions (period) from state i in state j by final state j */ - for (k1=1; k1<= m ; k1++){ /* For each covariate combination if any */ + /* for (k1=1; k1<= m ; k1++){ /\* For each covariate combination if any *\/ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(m != 1 && TKresult[nres]!= k1) - continue; + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each inital state */ strcpy(gplotlabel,"("); 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<=cptcoveff; k++){ /* For each covariate and each value */ - lv=codtabm(k1,TnsdVar[Tvaraff[k]]); - /* 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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); + for (k=1; k<=cptcovs; k++){ /* For each covariate k get corresponding value lv for combination k1 */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + /* for (k=1; k<=cptcoveff; k++){ /\* For each covariate and each value *\/ */ + /* lv=codtabm(k1,TnsdVar[Tvaraff[k]]); */ + /* /\* 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 *\/ */ + /* /\* vlv= nbcode[Tvaraff[k]][lv]; *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ } strcpy(gplotlabel+strlen(gplotlabel),")"); fprintf(ficgp,"\n#\n"); @@ -8225,32 +8473,37 @@ set ter svg size 640, 480\nunset log y\n } fprintf(ficgp,"\nset out; unset label;\n"); } /* end cpt state*/ - } /* end covariate */ + /* } /\* end covariate *\/ */ } /* end nres */ /* 6eme */ /* CV preval stable (period) for each covariate */ - for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */ + /* for (k1=1; k1<= m ; k1 ++) /\* For each covariate combination if any *\/ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(m != 1 && TKresult[nres]!= k1) - continue; + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state of arrival */ strcpy(gplotlabel,"("); fprintf(ficgp,"\n#\n#\n#CV preval stable (forward): 'pij' files, covariatecombination#=%d state=%d",k1, cpt); - 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 *\/ */ - lv=codtabm(k1,TnsdVar[Tvaraff[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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); + for (k=1; k<=cptcovs; k++){ /* For each covariate k get corresponding value lv for combination k1 */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + /* 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 *\\/ *\/ */ + /* lv=codtabm(k1,TnsdVar[Tvaraff[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 *\/ */ + /* /\* vlv= nbcode[Tvaraff[k]][lv]; *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ } strcpy(gplotlabel+strlen(gplotlabel),")"); fprintf(ficgp,"\n#\n"); @@ -8283,27 +8536,32 @@ set ter svg size 640, 480\nunset log y\n /* 7eme */ if(prevbcast == 1){ /* CV backward prevalence for each covariate */ - for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */ + /* for (k1=1; k1<= m ; k1 ++) /\* For each covariate combination if any *\/ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(m != 1 && TKresult[nres]!= k1) - continue; + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life origin state */ strcpy(gplotlabel,"("); fprintf(ficgp,"\n#\n#\n#CV Backward stable prevalence: 'pijb' files, covariatecombination#=%d state=%d",k1, cpt); - 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 *\/ */ - lv=codtabm(k1,TnsdVar[Tvaraff[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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); + for (k=1; k<=cptcovs; k++){ /* For each covariate k get corresponding value lv for combination k1 */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + /* 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 *\\/ *\/ */ + /* lv=codtabm(k1,TnsdVar[Tvaraff[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 *\/ */ + /* /\* vlv= nbcode[Tvaraff[k]][lv]; *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ } strcpy(gplotlabel+strlen(gplotlabel),")"); fprintf(ficgp,"\n#\n"); @@ -8341,27 +8599,32 @@ set ter svg size 640, 480\nunset log y\n if(prevfcast==1){ /* Projection from cross-sectional to forward stable (period) prevalence for each covariate */ - for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */ + /* for (k1=1; k1<= m ; k1 ++) /\* For each covariate combination if any *\/ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(m != 1 && TKresult[nres]!= k1) - continue; + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ strcpy(gplotlabel,"("); fprintf(ficgp,"\n#\n#\n#Projection of prevalence to forward stable prevalence (period): 'PROJ_' files, covariatecombination#=%d state=%d",k1, cpt); - 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 *\/ */ - lv=codtabm(k1,TnsdVar[Tvaraff[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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); + for (k=1; k<=cptcovs; k++){ /* For each covariate k get corresponding value lv for combination k1 */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + /* 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 *\\/ *\/ */ + /* lv=codtabm(k1,TnsdVar[Tvaraff[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 *\/ */ + /* /\* vlv= nbcode[Tvaraff[k]][lv]; *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ } strcpy(gplotlabel+strlen(gplotlabel),")"); fprintf(ficgp,"\n#\n"); @@ -8458,27 +8721,32 @@ set ter svg size 640, 480\nunset log y\n if(prevbcast==1){ /* Back projection from cross-sectional to stable (mixed) for each covariate */ - for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */ + /* for (k1=1; k1<= m ; k1 ++) /\* For each covariate combination if any *\/ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(m != 1 && TKresult[nres]!= k1) - continue; + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ strcpy(gplotlabel,"("); fprintf(ficgp,"\n#\n#\n#Back projection of prevalence to stable (mixed) back prevalence: 'BPROJ_' files, covariatecombination#=%d originstate=%d",k1, cpt); - 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 *\/ */ - lv= codtabm(k1,TnsdVar[Tvaraff[k]]); /* 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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); + for (k=1; k<=cptcovs; k++){ /* For each covariate k get corresponding value lv for combination k1 */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + /* 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 *\\/ *\/ */ + /* lv= codtabm(k1,TnsdVar[Tvaraff[k]]); /\* 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 *\/ */ + /* /\* vlv= nbcode[Tvaraff[k]][lv]; *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ } strcpy(gplotlabel+strlen(gplotlabel),")"); fprintf(ficgp,"\n#\n"); @@ -8533,19 +8801,25 @@ set ter svg size 640, 480\nunset log y\n fprintf(ficgp," u %d:(",ioffset); kl=0; strcpy(gplotcondition,"("); - 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 *\/ */ - lv= codtabm(k1,TnsdVar[Tvaraff[k]]); /* 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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; /\* Value of the modality of Tvaraff[k] *\/ */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - kl++; - sprintf(gplotcondition+strlen(gplotcondition),"$%d==%d && $%d==%d " ,kl,Tvaraff[k], kl+1, nbcode[Tvaraff[k]][lv]); - kl++; - if(k 1) - sprintf(gplotcondition+strlen(gplotcondition)," && "); + for (k=1; k<=cptcovs; k++){ /* For each covariate k of the resultline, get corresponding value lv for combination k1 */ + if(Dummy[modelresult[nres][k]]==0){ /* To be verified */ + /* 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 *\/ */ + /* lv= codtabm(k1,TnsdVar[Tvaraff[k]]); /\* Should be the covariate value corresponding to combination k1 and covariate k *\/ */ + lv=Tvresult[nres][k]; + vlv=TinvDoQresult[nres][Tvresult[nres][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 */ + /* vlv= nbcode[Tvaraff[k]][lv]; /\* Value of the modality of Tvaraff[k] *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + kl++; + /* sprintf(gplotcondition+strlen(gplotcondition),"$%d==%d && $%d==%d " ,kl,Tvaraff[k], kl+1, nbcode[Tvaraff[k]][lv]); */ + sprintf(gplotcondition+strlen(gplotcondition),"$%d==%d && $%d==%lg " ,kl,Tvresult[nres][k], kl+1,TinvDoQresult[nres][Tvresult[nres][k]]); + kl++; + if(k 1) + sprintf(gplotcondition+strlen(gplotcondition)," && "); + } } strcpy(gplotcondition+strlen(gplotcondition),")"); /* kl=6+(cpt-1)*(nlstate+1)+1+(i-1); /\* 6+(1-1)*(2+1)+1+(1-1)=7, 6+(2-1)(2+1)+1+(1-1)=10 *\/ */ @@ -8610,31 +8884,43 @@ set ter svg size 640, 480\nunset log y\n 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,"#Number of graphics: first is logit, 2nd is probabilities, third is incidences per year\n"); - fprintf(ficgp,"#model=%s \n",model); + fprintf(ficgp,"#model=1+age+%s \n",model); fprintf(ficgp,"# Type of graphic ng=%d\n",ng); fprintf(ficgp,"# k1=1 to 2^%d=%d\n",cptcoveff,m);/* to be checked */ - for(k1=1; k1 <=m; k1++) /* For each combination of covariate */ + /* for(k1=1; k1 <=m; k1++) /\* For each combination of covariate *\/ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(m != 1 && TKresult[nres]!= k1) - continue; - fprintf(ficgp,"\n\n# Combination of dummy k1=%d which is ",k1); + /* k1=nres; */ + k1=TKresult[nres]; + if(TKresult[nres]==0) k1=1; /* To be checked for noresult */ + fprintf(ficgp,"\n\n# Resultline k1=%d ",k1); strcpy(gplotlabel,"("); /*sprintf(gplotlabel+strlen(gplotlabel)," Dummy combination %d ",k1);*/ - 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 *\/ */ - lv= codtabm(k1,TnsdVar[Tvaraff[k]]); /* 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 */ - /* vlv= nbcode[Tvaraff[k]][lv]; */ - vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; - fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); - sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); - } + for (k=1; k<=cptcovs; k++){ /**< cptcovs number of SIMPLE covariates in the model V2+V1 =2 (dummy or quantit or time varying) */ + /* for each resultline nres, and position k, Tvresult[nres][k] gives the name of the variable and + TinvDoQresult[nres][Tvresult[nres][k]] gives its value double or integer) */ + fprintf(ficgp," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + sprintf(gplotlabel+strlen(gplotlabel)," V%d=%lg ",Tvresult[nres][k],TinvDoQresult[nres][Tvresult[nres][k]]); + } + /* if(m != 1 && TKresult[nres]!= k1) */ + /* continue; */ + /* fprintf(ficgp,"\n\n# Combination of dummy k1=%d which is ",k1); */ + /* strcpy(gplotlabel,"("); */ + /* /\*sprintf(gplotlabel+strlen(gplotlabel)," Dummy combination %d ",k1);*\/ */ + /* 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 *\\/ *\/ */ + /* lv= codtabm(k1,TnsdVar[Tvaraff[k]]); /\* 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 *\/ */ + /* /\* vlv= nbcode[Tvaraff[k]][lv]; *\/ */ + /* vlv= nbcode[Tvaraff[k]][codtabm(k1,TnsdVar[Tvaraff[k]])]; */ + /* fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); */ + /* } */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* fprintf(ficgp," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ + /* sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][resultmodel[nres][k4]],Tqresult[nres][resultmodel[nres][k4]]); */ + /* } */ strcpy(gplotlabel+strlen(gplotlabel),")"); fprintf(ficgp,"\n#\n"); fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" ",subdirf2(optionfilefiname,"PE_"),k1,ng,nres); @@ -8850,7 +9136,7 @@ set ter svg size 640, 480\nunset log y\n } /* end k2 */ /* fprintf(ficgp,"\n set out; unset label;set key default;\n"); */ fprintf(ficgp,"\n set out; unset title;set key default;\n"); - } /* end k1 */ + } /* end resultline */ } /* end ng */ /* avoid: */ fflush(ficgp); @@ -9419,23 +9705,27 @@ void prevforecast(char fileres[], double i1=pow(2,cptcoveff); if (cptcovn < 1){i1=1;} - for(nres=1; nres <= nresult; nres++) /* For each resultline */ - for(k=1; k<=i1;k++){ /* We find the combination equivalent to result line values of dummies */ + for(nres=1; nres <= nresult; nres++){ /* For each resultline */ + k=TKresult[nres]; + if(TKresult[nres]==0) k=1; /* To be checked for noresult */ + /* for(k=1; k<=i1;k++){ /\* We find the combination equivalent to result line values of dummies *\/ */ if(i1 != 1 && TKresult[nres]!= k) continue; fprintf(ficresvpl,"\n#****** "); printf("\n#****** "); fprintf(ficlog,"\n#****** "); - for(j=1;j<=cptcoveff;j++) { - fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); + for(j=1;j<=cptcovs;j++) { + fprintf(ficresvpl,"V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + fprintf(ficlog,"V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + printf("V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + /* fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ } - for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ - printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); - fprintf(ficresvpl," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); - fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); - } + /* for (j=1; j<= nsq; j++){ /\* For each selected (single) quantitative value *\/ */ + /* printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + /* fprintf(ficresvpl," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + /* fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + /* } */ fprintf(ficresvpl,"******\n"); printf("******\n"); fprintf(ficlog,"******\n"); @@ -9476,22 +9766,28 @@ void prevforecast(char fileres[], double i1=pow(2,cptcoveff); if (cptcovn < 1){i1=1;} - for(nres=1; nres <= nresult; nres++) /* For each resultline */ - for(k=1; k<=i1;k++){ - if(i1 != 1 && TKresult[nres]!= k) - continue; + for(nres=1; nres <= nresult; nres++){ /* For each resultline */ + k=TKresult[nres]; + if(TKresult[nres]==0) k=1; /* To be checked for noresult */ + /* for(k=1; k<=i1;k++){ */ + /* if(i1 != 1 && TKresult[nres]!= k) */ + /* continue; */ fprintf(ficresvbl,"\n#****** "); printf("\n#****** "); fprintf(ficlog,"\n#****** "); - for(j=1;j<=cptcoveff;j++) { - fprintf(ficresvbl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - } - for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ - printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); - fprintf(ficresvbl," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); - fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); + for (j=1; j<= cptcovs; j++){ /* For each selected (single) quantitative value */ + printf(" V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][resultmodel[nres][j]]); + fprintf(ficresvbl," V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][resultmodel[nres][j]]); + fprintf(ficlog," V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][resultmodel[nres][j]]); + /* for(j=1;j<=cptcoveff;j++) { */ + /* fprintf(ficresvbl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* } */ + /* for (j=1; j<= nsq; j++){ /\* For each selected (single) quantitative value *\/ */ + /* printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + /* fprintf(ficresvbl," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + /* fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ } fprintf(ficresvbl,"******\n"); printf("******\n"); @@ -9978,7 +10274,9 @@ int readdata(char datafile[], int firsto printf("Covariate type in the data: V%d, DummyV(V%d)=%d, FixedV(V%d)=%d\n",v,v,DummyV[v],v,FixedV[v]); fprintf(ficlog,"Covariate type in the data: V%d, DummyV(V%d)=%d, FixedV(V%d)=%d\n",v,v,DummyV[v],v,FixedV[v]); } - + + ncovcolt=ncovcol+nqv+ntv+nqtv; /* total of covariates in the data, not in the model equation */ + if((fic=fopen(datafile,"r"))==NULL) { printf("Problem while opening datafile: %s with errno='%s'\n", datafile,strerror(errno));fflush(stdout); fprintf(ficlog,"Problem while opening datafile: %s with errno='%s'\n", datafile,strerror(errno));fflush(ficlog);return 1; @@ -10378,8 +10676,8 @@ int decoderesult( char resultline[], int } } if(match == 0){ - printf("Error in result line (Dummy single): V%d is missing in result: %s according to model=%s. Tvar[k1=%d]=%d is different from Tvarsel[k2=%d]=%d.\n",Tvar[k1], resultline, model,k1, Tvar[k1], k2, Tvarsel[k2]); - fprintf(ficlog,"Error in result line (Dummy single): V%d is missing in result: %s according to model=%s\n",Tvar[k1], resultline, model); + printf("Error in result line (Dummy single): V%d is missing in result: %s according to model=1+age+%s. Tvar[k1=%d]=%d is different from Tvarsel[k2=%d]=%d.\n",Tvar[k1], resultline, model,k1, Tvar[k1], k2, Tvarsel[k2]); + fprintf(ficlog,"Error in result line (Dummy single): V%d is missing in result: %s according to model=1+age+%s\n",Tvar[k1], resultline, model); return 1; } }else if(Typevar[k1]==1){ /* Product with age We want to get the position k2 in the resultline of the product k1 in the model line*/ @@ -10395,8 +10693,8 @@ int decoderesult( char resultline[], int } } if(match == 0){ - printf("Error in result line (Product with age): V%d is missing in result: %s according to model=%s (Tvarsel[k2=%d]=%d)\n",Tvar[k1], resultline, model, k2, Tvarsel[k2]); - fprintf(ficlog,"Error in result line (Product with age): V%d is missing in result: %s according to model=%s (Tvarsel[k2=%d]=%d)\n",Tvar[k1], resultline, model, k2, Tvarsel[k2]); + printf("Error in result line (Product with age): V%d is missing in result: %s according to model=1+age+%s (Tvarsel[k2=%d]=%d)\n",Tvar[k1], resultline, model, k2, Tvarsel[k2]); + fprintf(ficlog,"Error in result line (Product with age): V%d is missing in result: %s according to model=1+age+%s (Tvarsel[k2=%d]=%d)\n",Tvar[k1], resultline, model, k2, Tvarsel[k2]); return 1; } }else if(Typevar[k1]==2){ /* Product No age We want to get the position in the resultline of the product in the model line*/ @@ -10411,8 +10709,8 @@ int decoderesult( char resultline[], int } } if(match == 0){ - printf("Error in result line (Product without age first variable): V%d is missing in result: %s according to model=%s\n",Tvardk[k1][1], resultline, model); - fprintf(ficlog,"Error in result line (Product without age first variable): V%d is missing in result: %s according to model=%s\n",Tvardk[k1][1], resultline, model); + printf("Error in result line (Product without age first variable): V%d is missing in result: %s according to model=1+age+%s\n",Tvardk[k1][1], resultline, model); + fprintf(ficlog,"Error in result line (Product without age first variable): V%d is missing in result: %s according to model=1+age+%s\n",Tvardk[k1][1], resultline, model); return 1; } match=0; @@ -10425,8 +10723,8 @@ int decoderesult( char resultline[], int } } if(match == 0){ - printf("Error in result line (Product without age second variable): V%d is missing in result: %s according to model=%s\n",Tvardk[k1][2], resultline, model); - fprintf(ficlog,"Error in result line (Product without age second variable): V%d is missing in result : %s according to model=%s\n",Tvardk[k1][2], resultline, model); + printf("Error in result line (Product without age second variable): V%d is missing in result: %s according to model=1+age+%s\n",Tvardk[k1][2], resultline, model); + fprintf(ficlog,"Error in result line (Product without age second variable): V%d is missing in result : %s according to model=1+age+%s\n",Tvardk[k1][2], resultline, model); return 1; } }/* End of testing */ @@ -10446,12 +10744,12 @@ int decoderesult( char resultline[], int } } if(match == 0){ - printf("Error in result line: variable V%d is missing in model; result: %s, model=%s\n",Tvarsel[k2], resultline, model); - fprintf(ficlog,"Error in result line: variable V%d is missing in model; result: %s, model=%s\n",Tvarsel[k2], resultline, model); + printf("Error in result line: variable V%d is missing in model; result: %s, model=1+age+%s\n",Tvarsel[k2], resultline, model); + fprintf(ficlog,"Error in result line: variable V%d is missing in model; result: %s, model=1+age+%s\n",Tvarsel[k2], resultline, model); return 1; }else if(match > 1){ - printf("Error in result line: %d doubled; result: %s, model=%s\n",k2, resultline, model); - fprintf(ficlog,"Error in result line: %d doubled; result: %s, model=%s\n",k2, resultline, model); + printf("Error in result line: %d doubled; result: %s, model=1+age+%s\n",k2, resultline, model); + fprintf(ficlog,"Error in result line: %d doubled; result: %s, model=1+age+%s\n",k2, resultline, model); return 1; } } @@ -10559,8 +10857,9 @@ int decodemodel( char model[], int lasto * - cptcovn or number of covariates k of the models excluding age*products =6 and age*age * - cptcovage number of covariates with age*products =2 * - cptcovs number of simple covariates + * ncovcolt=ncovcol+nqv+ntv+nqtv total of covariates in the data, not in the model equation * - Tvar[k] is the id of the kth covariate Tvar[1]@12 {1, 2, 3, 8, 10, 11, 8, 3, 7, 8, 5, 6}, thus Tvar[5=V7*V8]=10 - * which is a new column after the 9 (ncovcol) variables. + * which is a new column after the 9 (ncovcol+nqv+ntv+nqtv) variables. * - if k is a product Vn*Vm, covar[k][i] is filled with correct values for each individual * - Tprod[l] gives the kth covariates of the product Vn*Vm l=1 to cptcovprod-cptcovage * Tprod[1]@2 {5, 6}: position of first product V7*V8 is 5, and second V5*V6 is 6. @@ -10583,18 +10882,18 @@ int decodemodel( char model[], int lasto return 1; } if (strstr(model,"v") !=0){ - printf("Error. 'v' must be in upper case 'V' model=%s ",model); - fprintf(ficlog,"Error. 'v' must be in upper case model=%s ",model);fflush(ficlog); + printf("Error. 'v' must be in upper case 'V' model=1+age+%s ",model); + fprintf(ficlog,"Error. 'v' must be in upper case model=1+age+%s ",model);fflush(ficlog); return 1; } strcpy(modelsav,model); if ((strpt=strstr(model,"age*age")) !=0){ - printf(" strpt=%s, model=%s\n",strpt, model); + printf(" strpt=%s, model=1+age+%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=1+age+%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=1+age+%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; @@ -10704,13 +11003,21 @@ int decodemodel( char model[], int lasto 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 + Tvar[k]=ncovcol+nqv+ntv+nqtv+k1; /* ncovcolt+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 + If already ncovcol=4 and model= V2 + V1 + V1*V4 + age*V3 + V3*V2 thus after V4 we invent V5 and V6 because age*V3 will be computed in 4 - Tvar[3=V1*V4]=4+1=5 Tvar[5=V3*V2]=4 + 2= 6, Tvar[4=age*V3]=4 etc */ - Typevar[k]=2; /* 2 for double fixed dummy covariates */ + Tvar[3=V1*V4]=4+1=5 Tvar[5=V3*V2]=4 + 2= 6, Tvar[4=age*V3]=3 etc */ + /* Please remark that the new variables are model dependent */ + /* If we have 4 variable but the model uses only 3, like in + * model= V1 + age*V1 + V2 + V3 + age*V2 + age*V3 + V1*V2 + V1*V3 + * k= 1 2 3 4 5 6 7 8 + * Tvar[k]=1 1 2 3 2 3 (5 6) (and not 4 5 because of V4 missing) + * Tage[kk] [1]= 2 [2]=5 [3]=6 kk=1 to cptcovage=3 + * Tvar[Tage[kk]][1]=2 [2]=2 [3]=3 + */ + Typevar[k]=2; /* 2 for product */ 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 */ Tposprod[k]=k1; /* Tposprod[3]=1, Tposprod[2]=5 */ @@ -10723,11 +11030,13 @@ int decodemodel( char model[], int lasto /* 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++){ + if( FixedV[Tvardk[k][1]] == 0 && FixedV[Tvardk[k][2]] == 0){ /* If the product is a fixed covariate then we feed the new column with Vn*Vm */ + for (i=1; i<=lastobs;i++){/* For fixed product */ /* 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]; - } + covar[ncovcolt+k1][i]=covar[atoi(stre)][i]*covar[atoi(strc)][i]; + } + } /*End of FixedV */ } /* End age is not in the model */ } /* End if model includes a product */ else { /* not a product */ @@ -10779,7 +11088,7 @@ Typevar: 0 for simple covariate (dummy, Fixed[k] 0=fixed (product or simple), 1 varying, 2 fixed with age product, 3 varying with age product \n\ Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product\n",model); for(k=-1;k<=cptcovt; k++){ Fixed[k]=0; Dummy[k]=0;} - for(k=1, ncovf=0, nsd=0, nsq=0, ncovv=0, ncova=0, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */ + for(k=1, ncovf=0, nsd=0, nsq=0, ncovv=0, ncova=0, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0, ncovvt=0;k<=cptcovt; k++){ /* or cptocvt */ if (Tvar[k] <=ncovcol && Typevar[k]==0 ){ /* Simple fixed dummy (<=ncovcol) covariates */ Fixed[k]= 0; Dummy[k]= 0; @@ -10794,7 +11103,8 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( TvarFind[ncovf]=k; TvarFD[ncoveff]=Tvar[k]; /* TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ TvarFDind[ncoveff]=k; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ - }else if( Tvar[k] <=ncovcol && Typevar[k]==2){ /* Product of fixed dummy (<=ncovcol) covariates */ + /* }else if( Tvar[k] <=ncovcol && Typevar[k]==2){ /\* Product of fixed dummy (<=ncovcol) covariates For a fixed product k is higher than ncovcol *\/ */ + }else if( Tposprod[k]>0 && Typevar[k]==2 && FixedV[Tvardk[k][1]] == 0 && FixedV[Tvardk[k][2]] == 0){ /* Needs a fixed product Product of fixed dummy (<=ncovcol) covariates For a fixed product k is higher than ncovcol */ Fixed[k]= 0; Dummy[k]= 0; ncoveff++; @@ -10820,6 +11130,13 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( TvarFQ[nqfveff]=Tvar[k]-ncovcol; /* TvarFQ[1]=V2-1=1st in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */ TvarFQind[nqfveff]=k; /* TvarFQind[1]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */ }else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){/* Only simple time varying dummy variables */ + /*# ID V1 V2 weight birth death 1st s1 V3 V4 V5 2nd s2 */ + /* model V1+V3+age*V1+age*V3+V1*V3 */ + /* Tvar={1, 3, 1, 3, 6}, the 6 comes from the fact that there are already V1, V2, V3, V4, V5 native covariates */ + ncovvt++; + TvarVV[ncovvt]=Tvar[k]; /* TvarVV[1]=V3 (first time varying in the model equation */ + TvarVVind[ncovvt]=k; /* TvarVVind[1]=2 (second position in the model equation */ + Fixed[k]= 1; Dummy[k]= 0; ntveff++; /* Only simple time varying dummy variable */ @@ -10837,6 +11154,13 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( printf("Quasi Tmodelind[%d]=%d,Tvar[Tmodelind[%d]]=V%d, ncovcol=%d, nqv=%d,Tvar[k]- ncovcol-nqv=%d\n",ntveff,k,ntveff,Tvar[k], ncovcol, nqv,Tvar[k]- ncovcol-nqv); printf("Quasi TmodelInvind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv); }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv && Typevar[k]==0){ /* Only simple time varying quantitative variable V5*/ + /*# ID V1 V2 weight birth death 1st s1 V3 V4 V5 2nd s2 */ + /* model V1+V3+age*V1+age*V3+V1*V3 */ + /* Tvar={1, 3, 1, 3, 6}, the 6 comes from the fact that there are already V1, V2, V3, V4, V5 native covariates */ + ncovvt++; + TvarVV[ncovvt]=Tvar[k]; /* TvarVV[1]=V3 (first time varying in the model equation */ + TvarVVind[ncovvt]=k; /* TvarVV[1]=V3 (first time varying in the model equation */ + Fixed[k]= 1; Dummy[k]= 1; nqtveff++; @@ -10883,10 +11207,21 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( modell[k].subtype= APVQ; /* Product age * varying quantitative */ /* nqtveff++;/\* Only simple time varying quantitative variable *\/ */ } - }else if (Typevar[k] == 2) { /* product without age */ - k1=Tposprod[k]; - if(Tvard[k1][1] <=ncovcol){ - if(Tvard[k1][2] <=ncovcol){ + }else if (Typevar[k] == 2) { /* product Vn * Vm without age, V1+V3+age*V1+age*V3+V1*V3 looking at V1*V3, Typevar={0, 0, 1, 1, 2}, k=5, V1 is fixed, V3 is timevary, V5 is a product */ + /*# ID V1 V2 weight birth death 1st s1 V3 V4 V5 2nd s2 */ + /* model V1+V3+age*V1+age*V3+V1*V3 */ + /* Tvar={1, 3, 1, 3, 6}, the 6 comes from the fact that there are already V1, V2, V3, V4, V5 native covariates */ + k1=Tposprod[k]; /* Position in the products of product k, Tposprod={0, 0, 0, 0, 1} k1=1 first product but second time varying because of V3 */ + ncovvt++; + TvarVV[ncovvt]=Tvard[k1][1]; /* TvarVV[2]=V1 (because TvarVV[1] was V3, first time varying covariates */ + TvarVVind[ncovvt]=k; /* TvarVVind[2]=5 (because TvarVVind[2] was V1*V3 at position 5 */ + ncovvt++; + TvarVV[ncovvt]=Tvard[k1][2]; /* TvarVV[3]=V3 */ + TvarVVind[ncovvt]=k; /* TvarVVind[2]=5 (because TvarVVind[2] was V1*V3 at position 5 */ + + + if(Tvard[k1][1] <=ncovcol){ /* Vn is dummy fixed, (Tvard[1][1]=V1), (Tvard[1][1]=V3 time varying) */ + if(Tvard[k1][2] <=ncovcol){ /* Vm is dummy fixed */ Fixed[k]= 1; Dummy[k]= 0; modell[k].maintype= FTYPE; @@ -10894,23 +11229,23 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( ncovf++; /* Fixed variables without age */ TvarF[ncovf]=Tvar[k]; TvarFind[ncovf]=k; - }else if(Tvard[k1][2] <=ncovcol+nqv){ - Fixed[k]= 0; /* or 2 ?*/ + }else if(Tvard[k1][2] <=ncovcol+nqv){ /* Vm is quanti fixed */ + Fixed[k]= 0; /* Fixed product */ Dummy[k]= 1; modell[k].maintype= FTYPE; modell[k].subtype= FPDQ; /* Product fixed dummy * fixed quantitative */ ncovf++; /* Varying variables without age */ TvarF[ncovf]=Tvar[k]; TvarFind[ncovf]=k; - }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ + }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ /* Vm is a time varying dummy covariate */ Fixed[k]= 1; Dummy[k]= 0; modell[k].maintype= VTYPE; modell[k].subtype= VPDD; /* Product fixed dummy * varying dummy */ ncovv++; /* Varying variables without age */ - TvarV[ncovv]=Tvar[k]; - TvarVind[ncovv]=k; - }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ + TvarV[ncovv]=Tvar[k]; /* TvarV[1]=Tvar[5]=5 because there is a V4 */ + TvarVind[ncovv]=k;/* TvarVind[1]=5 */ + }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ /* Vm is a time varying quantitative covariate */ Fixed[k]= 1; Dummy[k]= 1; modell[k].maintype= VTYPE; @@ -10919,16 +11254,16 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( TvarV[ncovv]=Tvar[k]; TvarVind[ncovv]=k; } - }else if(Tvard[k1][1] <=ncovcol+nqv){ - if(Tvard[k1][2] <=ncovcol){ - Fixed[k]= 0; /* or 2 ?*/ + }else if(Tvard[k1][1] <=ncovcol+nqv){ /* Vn is fixed quanti */ + if(Tvard[k1][2] <=ncovcol){ /* Vm is fixed dummy */ + Fixed[k]= 0; /* Fixed product */ Dummy[k]= 1; modell[k].maintype= FTYPE; modell[k].subtype= FPDQ; /* Product fixed quantitative * fixed dummy */ ncovf++; /* Fixed variables without age */ TvarF[ncovf]=Tvar[k]; TvarFind[ncovf]=k; - }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ + }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ /* Vm is time varying */ Fixed[k]= 1; Dummy[k]= 1; modell[k].maintype= VTYPE; @@ -10936,7 +11271,7 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( ncovv++; /* Varying variables without age */ TvarV[ncovv]=Tvar[k]; TvarVind[ncovv]=k; - }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ + }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ /* Vm is time varying quanti */ Fixed[k]= 1; Dummy[k]= 1; modell[k].maintype= VTYPE; @@ -10948,7 +11283,7 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( TvarV[ncovv]=Tvar[k]; TvarVind[ncovv]=k; } - }else if(Tvard[k1][1] <=ncovcol+nqv+ntv){ + }else if(Tvard[k1][1] <=ncovcol+nqv+ntv){ /* Vn is time varying dummy */ if(Tvard[k1][2] <=ncovcol){ Fixed[k]= 1; Dummy[k]= 1; @@ -10982,7 +11317,7 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( TvarV[ncovv]=Tvar[k]; TvarVind[ncovv]=k; } - }else if(Tvard[k1][1] <=ncovcol+nqv+ntv+nqtv){ + }else if(Tvard[k1][1] <=ncovcol+nqv+ntv+nqtv){ /* Vn is time varying quanti */ if(Tvard[k1][2] <=ncovcol){ Fixed[k]= 1; Dummy[k]= 1; @@ -11035,16 +11370,16 @@ Dummy[k] 0=dummy (0 1), 1 quantitative ( if((Typevar[k1]==Typevar[k2]) && (Fixed[k1]==Fixed[k2]) && (Dummy[k1]==Dummy[k2] )){ if((Typevar[k1] == 0 || Typevar[k1] == 1)){ /* Simple or age product */ if(Tvar[k1]==Tvar[k2]){ - printf("Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[k1],Dummy[k1]); - fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[k1],Dummy[k1]); fflush(ficlog); + printf("Error duplication in the model=1+age+%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[k1],Dummy[k1]); + fprintf(ficlog,"Error duplication in the model=1+age+%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[k1],Dummy[k1]); fflush(ficlog); return(1); } }else if (Typevar[k1] ==2){ k3=Tposprod[k1]; k4=Tposprod[k2]; if( ((Tvard[k3][1]== Tvard[k4][1])&&(Tvard[k3][2]== Tvard[k4][2])) || ((Tvard[k3][1]== Tvard[k4][2])&&(Tvard[k3][2]== Tvard[k4][1])) ){ - printf("Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); - fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog); + printf("Error duplication in the model=1+age+%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); + fprintf(ficlog,"Error duplication in the model=1+age+%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog); return(1); } } @@ -11400,10 +11735,12 @@ int prevalence_limit(double *p, double * i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */ if (cptcovn < 1){i1=1;} - for(k=1; k<=i1;k++){ /* For each combination k of dummy covariates in the model */ + /* for(k=1; k<=i1;k++){ /\* For each combination k of dummy covariates in the model *\/ */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - if(i1 != 1 && TKresult[nres]!= k) - continue; + k=TKresult[nres]; + if(TKresult[nres]==0) k=1; /* To be checked for noresult */ + /* if(i1 != 1 && TKresult[nres]!= k) /\* We found the combination k corresponding to the resultline value of dummies *\/ */ + /* continue; */ /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */ @@ -11414,17 +11751,19 @@ int prevalence_limit(double *p, double * fprintf(ficrespl,"#******"); printf("#******"); fprintf(ficlog,"#******"); - for(j=1;j<=cptcoveff ;j++) {/* all covariates */ + for(j=1;j<=cptcovs ;j++) {/**< cptcovs number of SIMPLE covariates in the model or resultline V2+V1 =2 (dummy or quantit or time varying) */ /* fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,Tvaraff[j])]); /\* Here problem for varying dummy*\/ */ - fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); /* Here problem for varying dummy*/ - printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - } - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); - fprintf(ficrespl," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); - fprintf(ficlog," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); - } + /* printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + fprintf(ficrespl," V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + printf(" V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + fprintf(ficlog," V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + } + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ + /* fprintf(ficrespl," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ + /* fprintf(ficlog," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ + /* } */ fprintf(ficrespl,"******\n"); printf("******\n"); fprintf(ficlog,"******\n"); @@ -11436,18 +11775,24 @@ 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]][codtabm(k,TnsdVar[Tvaraff[j]])]); + /* for(j=1;j<=cptcoveff;j++) { */ + /* fprintf(ficrespl,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* } */ + for(j=1;j<=cptcovs;j++) { /* New the quanti variable is added */ + fprintf(ficrespl,"V%d %lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); } for(i=1; i<=nlstate;i++) fprintf(ficrespl," %d-%d ",i,i); fprintf(ficrespl,"Total Years_to_converge\n"); for (age=agebase; age<=agelim; age++){ /* for (age=agebase; age<=agebase; age++){ */ - prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k, nres); + /**< Computes the prevalence limit in each live state at age x and for covariate combination (k and) nres */ + prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k, nres); /* Nicely done */ fprintf(ficrespl,"%.0f ",age ); - for(j=1;j<=cptcoveff;j++) - fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); + /* for(j=1;j<=cptcoveff;j++) */ + /* fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + for(j=1;j<=cptcovs;j++) + fprintf(ficrespl,"%d %lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); tot=0.; for(i=1; i<=nlstate;i++){ tot += prlim[i][i]; @@ -11456,8 +11801,8 @@ int prevalence_limit(double *p, double * fprintf(ficrespl," %.3f %d\n", tot, *ncvyearp); } /* Age */ /* was end of cptcod */ - } /* cptcov */ - } /* nres */ + } /* nres */ + /* } /\* for each combination *\/ */ return 0; } @@ -11499,23 +11844,30 @@ int back_prevalence_limit(double *p, dou if (cptcovn < 1){i1=1;} for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */ - if(i1 != 1 && TKresult[nres]!= k) - continue; - /*printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));*/ + /* for(k=1; k<=i1;k++){ /\* For any combination of dummy covariates, fixed and varying *\/ */ + k=TKresult[nres]; + if(TKresult[nres]==0) k=1; /* To be checked for noresult */ + /* if(i1 != 1 && TKresult[nres]!= k) */ + /* continue; */ + /* /\*printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));*\/ */ fprintf(ficresplb,"#******"); printf("#******"); fprintf(ficlog,"#******"); - for(j=1;j<=cptcoveff ;j++) {/* all covariates */ - fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - } - for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ - printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); - fprintf(ficresplb," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); - fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); - } + for(j=1;j<=cptcovs ;j++) {/**< cptcovs number of SIMPLE covariates in the model or resultline V2+V1 =2 (dummy or quantit or time varying) */ + printf(" V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + fprintf(ficresplb," V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + fprintf(ficlog," V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + } + /* for(j=1;j<=cptcoveff ;j++) {/\* all covariates *\/ */ + /* fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* } */ + /* for (j=1; j<= nsq; j++){ /\* For each selected (single) quantitative value *\/ */ + /* printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + /* fprintf(ficresplb," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + /* fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + /* } */ fprintf(ficresplb,"******\n"); printf("******\n"); fprintf(ficlog,"******\n"); @@ -11527,8 +11879,8 @@ int back_prevalence_limit(double *p, dou } fprintf(ficresplb,"#Age "); - for(j=1;j<=cptcoveff;j++) { - fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); + for(j=1;j<=cptcovs;j++) { + fprintf(ficresplb,"V%d %lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); } for(i=1; i<=nlstate;i++) fprintf(ficresplb," %d-%d ",i,i); fprintf(ficresplb,"Total Years_to_converge\n"); @@ -11551,8 +11903,8 @@ int back_prevalence_limit(double *p, dou /* exit(1); */ } fprintf(ficresplb,"%.0f ",age ); - for(j=1;j<=cptcoveff;j++) - fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); + for(j=1;j<=cptcovs;j++) + fprintf(ficresplb,"%d %lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); tot=0.; for(i=1; i<=nlstate;i++){ tot += bprlim[i][i]; @@ -11562,7 +11914,7 @@ int back_prevalence_limit(double *p, dou } /* Age */ /* was end of cptcod */ /*fprintf(ficresplb,"\n");*/ /* Seems to be necessary for gnuplot only if two result lines and no covariate. */ - } /* end of any combination */ + /* } /\* end of any combination *\/ */ } /* end of nres */ /* hBijx(p, bage, fage); */ /* fclose(ficrespijb); */ @@ -11572,7 +11924,7 @@ int back_prevalence_limit(double *p, dou int hPijx(double *p, int bage, int fage){ /*------------- h Pij x at various ages ------------*/ - + /* to be optimized with precov */ int stepsize; int agelim; int hstepm; @@ -11582,74 +11934,77 @@ int hPijx(double *p, int bage, int fage) double agedeb; double ***p3mat; - strcpy(filerespij,"PIJ_"); strcat(filerespij,fileresu); - if((ficrespij=fopen(filerespij,"w"))==NULL) { - printf("Problem with Pij resultfile: %s\n", filerespij); return 1; - fprintf(ficlog,"Problem with Pij resultfile: %s\n", filerespij); return 1; - } - printf("Computing pij: result on file '%s' \n", filerespij); - fprintf(ficlog,"Computing pij: result on file '%s' \n", filerespij); - - stepsize=(int) (stepm+YEARM-1)/YEARM; - /*if (stepm<=24) stepsize=2;*/ - - agelim=AGESUP; - hstepm=stepsize*YEARM; /* Every year of age */ - hstepm=hstepm/stepm; /* Typically 2 years, = 2/6 months = 4 */ - - /* 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,cptcoveff); - /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ - /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ - /* k=k+1; */ - for(nres=1; nres <= nresult; nres++) /* For each resultline */ - for(k=1; k<=i1;k++){ - if(i1 != 1 && TKresult[nres]!= k) - continue; - fprintf(ficrespij,"\n#****** "); - for(j=1;j<=cptcoveff;j++) - fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ - printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); - fprintf(ficrespij," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); - } - fprintf(ficrespij,"******\n"); - - for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */ - nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */ - nhstepm = nhstepm/hstepm; /* Typically 40/4=10 */ - - /* nhstepm=nhstepm*YEARM; aff par mois*/ - - p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); - oldm=oldms;savm=savms; - hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k, nres); - fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j="); + strcpy(filerespij,"PIJ_"); strcat(filerespij,fileresu); + if((ficrespij=fopen(filerespij,"w"))==NULL) { + printf("Problem with Pij resultfile: %s\n", filerespij); return 1; + fprintf(ficlog,"Problem with Pij resultfile: %s\n", filerespij); return 1; + } + printf("Computing pij: result on file '%s' \n", filerespij); + fprintf(ficlog,"Computing pij: result on file '%s' \n", filerespij); + + stepsize=(int) (stepm+YEARM-1)/YEARM; + /*if (stepm<=24) stepsize=2;*/ + + agelim=AGESUP; + hstepm=stepsize*YEARM; /* Every year of age */ + hstepm=hstepm/stepm; /* Typically 2 years, = 2/6 months = 4 */ + + /* 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,cptcoveff); + /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ + /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ + /* k=k+1; */ + for(nres=1; nres <= nresult; nres++){ /* For each resultline */ + k=TKresult[nres]; + if(TKresult[nres]==0) k=1; /* To be checked for noresult */ + /* for(k=1; k<=i1;k++){ */ + /* if(i1 != 1 && TKresult[nres]!= k) */ + /* continue; */ + fprintf(ficrespij,"\n#****** "); + for(j=1;j<=cptcovs;j++){ + fprintf(ficrespij," V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + /* fprintf(ficrespij,"@wV%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* for (k4=1; k4<= nsq; k4++){ /\* For each selected (single) quantitative value *\/ */ + /* printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ + /* fprintf(ficrespij," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ + } + fprintf(ficrespij,"******\n"); + + for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */ + nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */ + nhstepm = nhstepm/hstepm; /* Typically 40/4=10 */ + + /* nhstepm=nhstepm*YEARM; aff par mois*/ + + p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); + oldm=oldms;savm=savms; + hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k, nres); + fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j="); + for(i=1; i<=nlstate;i++) + for(j=1; j<=nlstate+ndeath;j++) + fprintf(ficrespij," %1d-%1d",i,j); + fprintf(ficrespij,"\n"); + for (h=0; h<=nhstepm; h++){ + /*agedebphstep = agedeb + h*hstepm/YEARM*stepm;*/ + fprintf(ficrespij,"%d %3.f %3.f",k, agedeb, agedeb + h*hstepm/YEARM*stepm ); for(i=1; i<=nlstate;i++) for(j=1; j<=nlstate+ndeath;j++) - fprintf(ficrespij," %1d-%1d",i,j); - fprintf(ficrespij,"\n"); - for (h=0; h<=nhstepm; h++){ - /*agedebphstep = agedeb + h*hstepm/YEARM*stepm;*/ - fprintf(ficrespij,"%d %3.f %3.f",k, agedeb, agedeb + h*hstepm/YEARM*stepm ); - for(i=1; i<=nlstate;i++) - for(j=1; j<=nlstate+ndeath;j++) - fprintf(ficrespij," %.5f", p3mat[i][j][h]); - fprintf(ficrespij,"\n"); - } - free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); + fprintf(ficrespij," %.5f", p3mat[i][j][h]); fprintf(ficrespij,"\n"); } - /*}*/ + free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); + fprintf(ficrespij,"\n"); } - return 0; + } + /*}*/ + return 0; } int hBijx(double *p, int bage, int fage, double ***prevacurrent){ /*------------- h Bij x at various ages ------------*/ - + /* To be optimized with precov */ int stepsize; /* int agelim; */ int ageminl; @@ -11684,54 +12039,58 @@ int hPijx(double *p, int bage, int fage) /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ /* k=k+1; */ for(nres=1; nres <= nresult; nres++){ /* For each resultline */ - for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */ - if(i1 != 1 && TKresult[nres]!= k) - continue; - fprintf(ficrespijb,"\n#****** "); - for(j=1;j<=cptcoveff;j++) - fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); - for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ - fprintf(ficrespijb," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); - } - fprintf(ficrespijb,"******\n"); - if(invalidvarcomb[k]){ /* Is it necessary here? */ - fprintf(ficrespijb,"\n#Combination (%d) ignored because no cases \n",k); - continue; - } - - /* for (agedeb=fage; agedeb>=bage; agedeb--){ /\* If stepm=6 months *\/ */ - for (agedeb=bage; agedeb<=fage; agedeb++){ /* If stepm=6 months and estepm=24 (2 years) */ - /* nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /\* Typically 20 years = 20*12/6=40 *\/ */ - nhstepm=(int) rint((agedeb-ageminl)*YEARM/stepm+0.1)-1; /* Typically 20 years = 20*12/6=40 or 55*12/24=27.5-1.1=>27 */ - nhstepm = nhstepm/hstepm; /* Typically 40/4=10, because estepm=24 stepm=6 => hstepm=24/6=4 or 28*/ - - /* nhstepm=nhstepm*YEARM; aff par mois*/ - - p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); /* We can't have it at an upper level because of nhstepm */ - /* and memory limitations if stepm is small */ - - /* oldm=oldms;savm=savms; */ - /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); */ - hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm, k, nres);/* Bug valgrind */ - /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm,oldm,savm, dnewm, doldm, dsavm, k); */ - fprintf(ficrespijb,"# Cov Agex agex-h hbijx with i,j="); + k=TKresult[nres]; + if(TKresult[nres]==0) k=1; /* To be checked for noresult */ + /* for(k=1; k<=i1;k++){ /\* For any combination of dummy covariates, fixed and varying *\/ */ + /* if(i1 != 1 && TKresult[nres]!= k) */ + /* continue; */ + fprintf(ficrespijb,"\n#****** "); + for(j=1;j<=cptcovs;j++){ + fprintf(ficrespijb," V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][Tvresult[nres][j]]); + /* for(j=1;j<=cptcoveff;j++) */ + /* fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ + /* for (j=1; j<= nsq; j++){ /\* For each selected (single) quantitative value *\/ */ + /* fprintf(ficrespijb," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ + } + fprintf(ficrespijb,"******\n"); + if(invalidvarcomb[k]){ /* Is it necessary here? */ + fprintf(ficrespijb,"\n#Combination (%d) ignored because no cases \n",k); + continue; + } + + /* for (agedeb=fage; agedeb>=bage; agedeb--){ /\* If stepm=6 months *\/ */ + for (agedeb=bage; agedeb<=fage; agedeb++){ /* If stepm=6 months and estepm=24 (2 years) */ + /* nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /\* Typically 20 years = 20*12/6=40 *\/ */ + nhstepm=(int) rint((agedeb-ageminl)*YEARM/stepm+0.1)-1; /* Typically 20 years = 20*12/6=40 or 55*12/24=27.5-1.1=>27 */ + nhstepm = nhstepm/hstepm; /* Typically 40/4=10, because estepm=24 stepm=6 => hstepm=24/6=4 or 28*/ + + /* nhstepm=nhstepm*YEARM; aff par mois*/ + + p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); /* We can't have it at an upper level because of nhstepm */ + /* and memory limitations if stepm is small */ + + /* oldm=oldms;savm=savms; */ + /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); */ + hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm, k, nres);/* Bug valgrind */ + /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm,oldm,savm, dnewm, doldm, dsavm, k); */ + fprintf(ficrespijb,"# Cov Agex agex-h hbijx with i,j="); + for(i=1; i<=nlstate;i++) + for(j=1; j<=nlstate+ndeath;j++) + fprintf(ficrespijb," %1d-%1d",i,j); + fprintf(ficrespijb,"\n"); + for (h=0; h<=nhstepm; h++){ + /*agedebphstep = agedeb + h*hstepm/YEARM*stepm;*/ + fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb - h*hstepm/YEARM*stepm ); + /* fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb + h*hstepm/YEARM*stepm ); */ for(i=1; i<=nlstate;i++) for(j=1; j<=nlstate+ndeath;j++) - fprintf(ficrespijb," %1d-%1d",i,j); - fprintf(ficrespijb,"\n"); - for (h=0; h<=nhstepm; h++){ - /*agedebphstep = agedeb + h*hstepm/YEARM*stepm;*/ - fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb - h*hstepm/YEARM*stepm ); - /* fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb + h*hstepm/YEARM*stepm ); */ - for(i=1; i<=nlstate;i++) - for(j=1; j<=nlstate+ndeath;j++) - fprintf(ficrespijb," %.5f", p3mat[i][j][h]);/* Bug valgrind */ - fprintf(ficrespijb,"\n"); - } - free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); + fprintf(ficrespijb," %.5f", p3mat[i][j][h]);/* Bug valgrind */ fprintf(ficrespijb,"\n"); - } /* end age deb */ - } /* end combination */ + } + free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); + fprintf(ficrespijb,"\n"); + } /* end age deb */ + /* } /\* end combination *\/ */ } /* end nres */ return 0; } /* hBijx */ @@ -12127,7 +12486,7 @@ int main(int argc, char *argv[]) strcpy(model,modeltemp); } } - /* printf(" model=1+age%s modeltemp= %s, model=%s\n",model, modeltemp, model);fflush(stdout); */ + /* printf(" model=1+age%s modeltemp= %s, model=1+age+%s\n",model, modeltemp, model);fflush(stdout); */ printf("model=1+age+%s\n",model);fflush(stdout); fprintf(ficparo,"model=1+age+%s\n",model);fflush(stdout); fprintf(ficres,"model=1+age+%s\n",model);fflush(stdout); @@ -12169,6 +12528,7 @@ int main(int argc, char *argv[]) if(nqv>=1)coqvar=matrix(1,nqv,firstobs,lastobs); /**< Fixed quantitative covariate */ if(nqtv>=1)cotqvar=ma3x(1,maxwav,1,nqtv,firstobs,lastobs); /**< Time varying quantitative covariate */ if(ntv+nqtv>=1)cotvar=ma3x(1,maxwav,1,ntv+nqtv,firstobs,lastobs); /**< Time varying covariate (dummy and quantitative)*/ + /* if(ntv+nqtv>=1)cotvar=ma3x(1,maxwav,ncovcol+nqv+1,ncovcol+nqv+ntv+nqtv,firstobs,lastobs); /\**< Might be better *\/ */ 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 @@ -12411,7 +12771,7 @@ Please run with mle=-1 to get a correct mint=matrix(1,maxwav,firstobs,lastobs); anint=matrix(1,maxwav,firstobs,lastobs); s=imatrix(1,maxwav+1,firstobs,lastobs); /* s[i][j] health state for wave i and individual j */ - printf("BUG ncovmodel=%d NCOVMAX=%d 2**ncovmodel=%f BUG\n",ncovmodel,NCOVMAX,pow(2,ncovmodel)); + /* printf("BUG ncovmodel=%d NCOVMAX=%d 2**ncovmodel=%f BUG\n",ncovmodel,NCOVMAX,pow(2,ncovmodel)); */ 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 */ @@ -12431,6 +12791,7 @@ Please run with mle=-1 to get a correct Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */ TvarsDind=ivector(1,NCOVMAX); /* */ TnsdVar=ivector(1,NCOVMAX); /* */ + /* for(i=1; i<=NCOVMAX;i++) TnsdVar[i]=3; */ TvarsD=ivector(1,NCOVMAX); /* */ TvarsQind=ivector(1,NCOVMAX); /* */ TvarsQ=ivector(1,NCOVMAX); /* */ @@ -12448,6 +12809,8 @@ Please run with mle=-1 to get a correct TvarVDind=ivector(1,NCOVMAX); /* */ TvarVQ=ivector(1,NCOVMAX); /* */ TvarVQind=ivector(1,NCOVMAX); /* */ + TvarVV=ivector(1,NCOVMAX); /* */ + TvarVVind=ivector(1,NCOVMAX); /* */ Tvalsel=vector(1,NCOVMAX); /* */ Tvarsel=ivector(1,NCOVMAX); /* */ @@ -12553,12 +12916,12 @@ Please run with mle=-1 to get a correct Ndum =ivector(-1,NCOVMAX); 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]; */ + tricode(&cptcoveff,Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; as well as calculate cptcoveff or number of total effective dummy covariates*/ } ncovcombmax=pow(2,cptcoveff); - invalidvarcomb=ivector(1, ncovcombmax); - for(i=1;iDatafile=%s Firstpass=%d La optionfilehtmcov,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model); } - fprintf(fichtm,"\n\n\nIMaCh %s\n IMaCh for Interpolated Markov Chain
\nSponsored by Copyright (C) 2002-2015 INED-EUROREVES-Institut de longévité-2013-2022-Japan Society for the Promotion of Sciences 日本学術振興会 (Grant-in-Aid for Scientific Research 25293121) - Intel Software 2015-2018
\ -
\n\ + fprintf(fichtm,"\n\n\ +IMaCh %s\n\ + IMaCh for Interpolated Markov Chain
\n\ +Sponsored by Copyright (C) 2002-2015 INED\ +-EUROREVES-Institut de longévité-2013-2022-Japan Society for the Promotion of Sciences 日本学術振興会 \ +(Grant-in-Aid for Scientific Research 25293121) - \ +Intel Software 2015-2018
\n", optionfilehtm); + + fprintf(fichtm,"
\n\ IMaCh-%s
%s
\
\n\ -Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s
\n\ +This file: %s
Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s
\n\ \n\
\
  • Parameter files

    \n\ @@ -12705,7 +13075,7 @@ Title=%s
    Datafile=%s Firstpass=%d La - Log file of the run: %s
    \n\ - Gnuplot file name: %s
    \n\ - Date and time at start: %s
\n",\ - optionfilehtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model,\ + version,fullversion,optionfilehtm,optionfilehtm,title,datafile,datafile,firstpass,lastpass,stepm, weightopt, model, \ optionfilefiname,optionfilext,optionfilefiname,optionfilext,\ fileres,fileres,\ filelog,filelog,optionfilegnuplot,optionfilegnuplot,strstart); @@ -13019,6 +13389,7 @@ Please run with mle=-1 to get a correct globpr=1; /* again, to print the individual contributions using computed gpimx and gsw */ likelione(ficres, p, npar, nlstate, &globpr, &ipmx, &sw, &fretone, funcone); /* Prints the contributions to the likelihood */ printf("Second Likeli=%12.6f ipmx=%ld sw=%12.6f",fretone,ipmx,sw); + /* exit(0); */ for (k=1; k<=npar;k++) printf(" %d %8.5f",k,p[k]); printf("\n"); @@ -13697,8 +14068,8 @@ Please run with mle=-1 to get a correct printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); } for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ - printf(" V%d=%f ",TvarsQ[j], TinvDoQresult[nres][TvarsQ[j]]); /* TvarsQ[j] gives the name of the jth quantitative (fixed or time v) */ - fprintf(ficreseij,"V%d=%f ",TvarsQ[j], TinvDoQresult[nres][TvarsQ[j]]); + printf(" V%d=%lg ",TvarsQ[j], TinvDoQresult[nres][TvarsQ[j]]); /* TvarsQ[j] gives the name of the jth quantitative (fixed or time v) */ + fprintf(ficreseij,"V%d=%lg ",TvarsQ[j], TinvDoQresult[nres][TvarsQ[j]]); } fprintf(ficreseij,"******\n"); printf("******\n"); @@ -13716,7 +14087,7 @@ Please run with mle=-1 to get a correct /*---------- State-specific expectancies and variances ------------*/ - + /* Should be moved in a function */ strcpy(filerest,"T_"); strcat(filerest,fileresu); if((ficrest=fopen(filerest,"w"))==NULL) { @@ -13790,9 +14161,9 @@ Please run with mle=-1 to get a correct printf("\n j=%d In computing T_ Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=%d cptcovs=%d, cptcoveff=%d Fixed[modelresult[nres][j]]=%d\n", j, nres, j, Dummy[modelresult[nres][j]],nres,j,modelresult[nres][j],cptcovs, cptcoveff,Fixed[modelresult[nres][j]]); /* end if dummy or quanti */ if(Dummy[modelresult[nres][j]]==0){/* Dummy variable of the variable in position modelresult in the model corresponding to j in resultline */ - printf("V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */ - fprintf(ficlog,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */ - fprintf(ficrest,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */ + printf("V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */ + fprintf(ficlog,"V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */ + fprintf(ficrest,"V%d=%lg ",Tvresult[nres][j],TinvDoQresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */ if(Fixed[modelresult[nres][j]]==0){ /* Fixed */ printf("fixed ");fprintf(ficlog,"fixed ");fprintf(ficrest,"fixed "); }else{ @@ -13802,7 +14173,9 @@ Please run with mle=-1 to get a correct /* fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ }else if(Dummy[modelresult[nres][j]]==1){ /* Quanti variable */ /* For each selected (single) quantitative value */ - printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); + printf(" V%d=%lg ",Tvqresult[nres][j],Tqresult[nres][j]); + fprintf(ficlog," V%d=%lg ",Tvqresult[nres][j],Tqresult[nres][j]); + fprintf(ficrest," V%d=%lg ",Tvqresult[nres][j],Tqresult[nres][j]); if(Fixed[modelresult[nres][j]]==0){ /* Fixed */ printf("fixed ");fprintf(ficlog,"fixed ");fprintf(ficrest,"fixed "); }else{ @@ -13813,7 +14186,7 @@ Please run with mle=-1 to get a correct fprintf(ficlog,"Error in computing T_ Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=%d cptcovs=%d, cptcoveff=%d \n", nres, j, Dummy[modelresult[nres][j]],nres,j,modelresult[nres][j],cptcovs, cptcoveff); /* end if dummy or quanti */ exit(1); } - } + } /* End loop for each variable in the resultline */ /* for (j=1; j<= nsq; j++){ /\* For each selected (single) quantitative value *\/ */ /* printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); /\* Wrong j is not in the equation model *\/ */ /* fprintf(ficrest," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */ @@ -13825,14 +14198,16 @@ Please run with mle=-1 to get a correct fprintf(ficresstdeij,"\n#****** "); fprintf(ficrescveij,"\n#****** "); + /* It could have been: for(j=1;j<=cptcoveff;j++) {printf("V=%d=%lg",Tvresult[nres][cpt],TinvDoQresult[nres][Tvresult[nres][cpt]]);} */ + /* But it won't be sorted and depends on how the resultline is ordered */ for(j=1;j<=cptcoveff;j++) { fprintf(ficresstdeij,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ /* fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */ } for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value, TvarsQind gives the position of a quantitative in model equation */ - fprintf(ficresstdeij," V%d=%f ",Tvar[TvarsQind[j]],Tqresult[nres][resultmodel[nres][TvarsQind[j]]]); - fprintf(ficrescveij," V%d=%f ",Tvar[TvarsQind[j]],Tqresult[nres][resultmodel[nres][TvarsQind[j]]]); + fprintf(ficresstdeij," V%d=%lg ",Tvar[TvarsQind[j]],Tqresult[nres][resultmodel[nres][TvarsQind[j]]]); + fprintf(ficrescveij," V%d=%lg ",Tvar[TvarsQind[j]],Tqresult[nres][resultmodel[nres][TvarsQind[j]]]); } fprintf(ficresstdeij,"******\n"); fprintf(ficrescveij,"******\n"); @@ -13840,10 +14215,11 @@ Please run with mle=-1 to get a correct fprintf(ficresvij,"\n#****** "); /* pstamp(ficresvij); */ for(j=1;j<=cptcoveff;j++) - fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[TnsdVar[Tvaraff[j]]])]); + fprintf(ficresvij,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); + /* fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[TnsdVar[Tvaraff[j]]])]); */ for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ /* fprintf(ficresvij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); /\* To solve *\/ */ - fprintf(ficresvij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); /* Solved */ + fprintf(ficresvij," V%d=%lg ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); /* Solved */ } fprintf(ficresvij,"******\n"); @@ -13874,7 +14250,7 @@ Please run with mle=-1 to get a correct fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav); else fprintf(ficrest,"the age specific forward period (stable) prevalences in each health state \n"); - fprintf(ficrest,"# Age popbased mobilav e.. (std) "); + fprintf(ficrest,"# Age popbased mobilav e.. (std) "); /* Adding covariate values? */ 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"); */ @@ -13921,12 +14297,12 @@ Please run with mle=-1 to get a correct printf("done selection\n");fflush(stdout); fprintf(ficlog,"done selection\n");fflush(ficlog); - } /* End k selection */ + } /* End k selection or end covariate selection for nres */ printf("done State-specific expectancies\n");fflush(stdout); fprintf(ficlog,"done State-specific expectancies\n");fflush(ficlog); - /* variance-covariance of forward period prevalence*/ + /* variance-covariance of forward period prevalence */ varprlim(fileresu, nresult, mobaverage, mobilavproj, bage, fage, prlim, &ncvyear, ftolpl, p, matcov, delti, stepm, cptcoveff); @@ -13995,12 +14371,15 @@ Please run with mle=-1 to get a correct free_ivector(TvarVDind,1,NCOVMAX); free_ivector(TvarVQ,1,NCOVMAX); free_ivector(TvarVQind,1,NCOVMAX); + free_ivector(TvarVV,1,NCOVMAX); + free_ivector(TvarVVind,1,NCOVMAX); + free_ivector(Tvarsel,1,NCOVMAX); free_vector(Tvalsel,1,NCOVMAX); free_ivector(Tposprod,1,NCOVMAX); free_ivector(Tprod,1,NCOVMAX); free_ivector(Tvaraff,1,NCOVMAX); - free_ivector(invalidvarcomb,1,ncovcombmax); + free_ivector(invalidvarcomb,0,ncovcombmax); free_ivector(Tage,1,NCOVMAX); free_ivector(Tmodelind,1,NCOVMAX); free_ivector(TmodelInvind,1,NCOVMAX);