|
|
| version 1.234, 2016/08/23 16:51:20 | version 1.266, 2017/05/13 07:26:12 |
|---|---|
| Line 1 | Line 1 |
| /* $Id$ | /* $Id$ |
| $State$ | $State$ |
| $Log$ | $Log$ |
| Revision 1.266 2017/05/13 07:26:12 brouard | |
| Summary: Version 0.99r13 (improvements and bugs fixed) | |
| Revision 1.265 2017/04/26 16:22:11 brouard | |
| Summary: imach 0.99r13 Some bugs fixed | |
| Revision 1.264 2017/04/26 06:01:29 brouard | |
| Summary: Labels in graphs | |
| Revision 1.263 2017/04/24 15:23:15 brouard | |
| Summary: to save | |
| Revision 1.262 2017/04/18 16:48:12 brouard | |
| *** empty log message *** | |
| Revision 1.261 2017/04/05 10:14:09 brouard | |
| Summary: Bug in E_ as well as in T_ fixed nres-1 vs k1-1 | |
| Revision 1.260 2017/04/04 17:46:59 brouard | |
| Summary: Gnuplot indexations fixed (humm) | |
| Revision 1.259 2017/04/04 13:01:16 brouard | |
| Summary: Some errors to warnings only if date of death is unknown but status is death we could set to pi3 | |
| Revision 1.258 2017/04/03 10:17:47 brouard | |
| Summary: Version 0.99r12 | |
| Some cleanings, conformed with updated documentation. | |
| Revision 1.257 2017/03/29 16:53:30 brouard | |
| Summary: Temp | |
| Revision 1.256 2017/03/27 05:50:23 brouard | |
| Summary: Temporary | |
| Revision 1.255 2017/03/08 16:02:28 brouard | |
| Summary: IMaCh version 0.99r10 bugs in gnuplot fixed | |
| Revision 1.254 2017/03/08 07:13:00 brouard | |
| Summary: Fixing data parameter line | |
| Revision 1.253 2016/12/15 11:59:41 brouard | |
| Summary: 0.99 in progress | |
| Revision 1.252 2016/09/15 21:15:37 brouard | |
| *** empty log message *** | |
| Revision 1.251 2016/09/15 15:01:13 brouard | |
| Summary: not working | |
| Revision 1.250 2016/09/08 16:07:27 brouard | |
| Summary: continue | |
| Revision 1.249 2016/09/07 17:14:18 brouard | |
| Summary: Starting values from frequencies | |
| Revision 1.248 2016/09/07 14:10:18 brouard | |
| *** empty log message *** | |
| Revision 1.247 2016/09/02 11:11:21 brouard | |
| *** empty log message *** | |
| Revision 1.246 2016/09/02 08:49:22 brouard | |
| *** empty log message *** | |
| Revision 1.245 2016/09/02 07:25:01 brouard | |
| *** empty log message *** | |
| Revision 1.244 2016/09/02 07:17:34 brouard | |
| *** empty log message *** | |
| Revision 1.243 2016/09/02 06:45:35 brouard | |
| *** empty log message *** | |
| Revision 1.242 2016/08/30 15:01:20 brouard | |
| Summary: Fixing a lots | |
| Revision 1.241 2016/08/29 17:17:25 brouard | |
| Summary: gnuplot problem in Back projection to fix | |
| Revision 1.240 2016/08/29 07:53:18 brouard | |
| Summary: Better | |
| Revision 1.239 2016/08/26 15:51:03 brouard | |
| Summary: Improvement in Powell output in order to copy and paste | |
| Author: | |
| Revision 1.238 2016/08/26 14:23:35 brouard | |
| Summary: Starting tests of 0.99 | |
| Revision 1.237 2016/08/26 09:20:19 brouard | |
| Summary: to valgrind | |
| Revision 1.236 2016/08/25 10:50:18 brouard | |
| *** empty log message *** | |
| Revision 1.235 2016/08/25 06:59:23 brouard | |
| *** empty log message *** | |
| Revision 1.234 2016/08/23 16:51:20 brouard | Revision 1.234 2016/08/23 16:51:20 brouard |
| *** empty log message *** | *** empty log message *** |
| Line 75 | Line 175 |
| Author: Nicolas Brouard | Author: Nicolas Brouard |
| Revision 1.210 2015/11/18 17:41:20 brouard | Revision 1.210 2015/11/18 17:41:20 brouard |
| Summary: Start working on projected prevalences | Summary: Start working on projected prevalences Revision 1.209 2015/11/17 22:12:03 brouard |
| Revision 1.209 2015/11/17 22:12:03 brouard | |
| Summary: Adding ftolpl parameter | Summary: Adding ftolpl parameter |
| Author: N Brouard | Author: N Brouard |
| Line 865 typedef struct { | Line 963 typedef struct { |
| /* #include <libintl.h> */ | /* #include <libintl.h> */ |
| /* #define _(String) gettext (String) */ | /* #define _(String) gettext (String) */ |
| #define MAXLINE 1024 /* Was 256. Overflow with 312 with 2 states and 4 covariates. Should be ok */ | #define MAXLINE 2048 /* Was 256 and 1024. Overflow with 312 with 2 states and 4 covariates. Should be ok */ |
| #define GNUPLOTPROGRAM "gnuplot" | #define GNUPLOTPROGRAM "gnuplot" |
| /*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/ | /*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/ |
| Line 1020 double dval; | Line 1118 double dval; |
| #define FTOL 1.0e-10 | #define FTOL 1.0e-10 |
| #define NRANSI | #define NRANSI |
| #define ITMAX 200 | #define ITMAX 200 |
| #define ITPOWMAX 20 /* This is now multiplied by the number of parameters */ | |
| #define TOL 2.0e-4 | #define TOL 2.0e-4 |
| Line 1105 int *TvarsDind; | Line 1204 int *TvarsDind; |
| int *TvarsQ; | int *TvarsQ; |
| int *TvarsQind; | int *TvarsQind; |
| #define MAXRESULTLINES 10 | |
| int nresult=0; | |
| int parameterline=0; /* # of the parameter (type) line */ | |
| int TKresult[MAXRESULTLINES]; | |
| int Tresult[MAXRESULTLINES][NCOVMAX];/* For dummy variable , value (output) */ | |
| int Tinvresult[MAXRESULTLINES][NCOVMAX];/* For dummy variable , value (output) */ | |
| int Tvresult[MAXRESULTLINES][NCOVMAX]; /* For dummy variable , variable # (output) */ | |
| double Tqresult[MAXRESULTLINES][NCOVMAX]; /* For quantitative variable , value (output) */ | |
| double Tqinvresult[MAXRESULTLINES][NCOVMAX]; /* For quantitative variable , value (output) */ | |
| int Tvqresult[MAXRESULTLINES][NCOVMAX]; /* For quantitative variable , variable # (output) */ | |
| /* int *TDvar; /\**< TDvar[1]=4, TDvarF[2]=3, TDvar[3]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 *\/ */ | /* int *TDvar; /\**< TDvar[1]=4, TDvarF[2]=3, TDvar[3]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 *\/ */ |
| int *TvarF; /**< TvarF[1]=Tvar[6]=2, TvarF[2]=Tvar[7]=7, TvarF[3]=Tvar[9]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | int *TvarF; /**< TvarF[1]=Tvar[6]=2, TvarF[2]=Tvar[7]=7, TvarF[3]=Tvar[9]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ |
| int *TvarFind; /**< TvarFind[1]=6, TvarFind[2]=7, Tvarind[3]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | int *TvarFind; /**< TvarFind[1]=6, TvarFind[2]=7, Tvarind[3]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ |
| Line 1126 double *Tvalsel; /**< Selected modality | Line 1236 double *Tvalsel; /**< Selected modality |
| int *Typevar; /**< 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product */ | int *Typevar; /**< 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product */ |
| int *Fixed; /** Fixed[k] 0=fixed, 1 varying, 2 fixed with age product, 3 varying with age product */ | int *Fixed; /** Fixed[k] 0=fixed, 1 varying, 2 fixed with age product, 3 varying with age product */ |
| int *Dummy; /** Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product */ | int *Dummy; /** Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product */ |
| int *DummyV; /** Dummy[v] 0=dummy (0 1), 1 quantitative */ | |
| int *FixedV; /** FixedV[v] 0 fixed, 1 varying */ | |
| int *Tage; | int *Tage; |
| int anyvaryingduminmodel=0; /**< Any varying dummy in Model=1 yes, 0 no, to avoid a loop on waves in freq */ | int anyvaryingduminmodel=0; /**< Any varying dummy in Model=1 yes, 0 no, to avoid a loop on waves in freq */ |
| int *Tmodelind; /** Tmodelind[Tvaraff[3]]=9 for V1 position,Tvaraff[1]@9={4, 3, 1, 0, 0, 0, 0, 0, 0}, model=V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1*/ | int *Tmodelind; /** Tmodelind[Tvaraff[3]]=9 for V1 position,Tvaraff[1]@9={4, 3, 1, 0, 0, 0, 0, 0, 0}, model=V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1*/ |
| Line 1135 int *Ndum; /** Freq of modality (tricode | Line 1247 int *Ndum; /** Freq of modality (tricode |
| /* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */ | /* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */ |
| int **Tvard; | int **Tvard; |
| int *Tprod;/**< Gives the k position of the k1 product */ | int *Tprod;/**< Gives the k position of the k1 product */ |
| /* Tprod[k1=1]=3(=V1*V4) for V2+V1+V1*V4+age*V3 */ | |
| int *Tposprod; /**< Gives the k1 product from the k position */ | int *Tposprod; /**< Gives the k1 product from the k position */ |
| /* Tprod[k1=1]=3(=V1*V4) for V2+V1+V1*V4+age*V3 | /* if V2+V1+V1*V4+age*V3+V3*V2 TProd[k1=2]=5 (V3*V2) */ |
| if V2+V1+V1*V4+age*V3+V3*V2 TProd[k1=2]=5 (V3*V2) | /* Tposprod[k]=k1 , Tposprod[3]=1, Tposprod[5(V3*V2)]=2 (2nd product without age) */ |
| Tposprod[k]=k1 , Tposprod[3]=1, Tposprod[5]=2 | |
| */ | |
| int cptcovprod, *Tvaraff, *invalidvarcomb; | int cptcovprod, *Tvaraff, *invalidvarcomb; |
| double *lsurv, *lpop, *tpop; | double *lsurv, *lpop, *tpop; |
| Line 2038 void powell(double p[], double **xi, int | Line 2149 void powell(double p[], double **xi, int |
| void linmin(double p[], double xi[], int n, double *fret, | void linmin(double p[], double xi[], int n, double *fret, |
| double (*func)(double [])); | double (*func)(double [])); |
| #else | #else |
| void linmin(double p[], double xi[], int n, double *fret, | void linmin(double p[], double xi[], int n, double *fret, |
| double (*func)(double []),int *flat); | double (*func)(double []),int *flat); |
| #endif | #endif |
| int i,ibig,j; | int i,ibig,j,jk,k; |
| double del,t,*pt,*ptt,*xit; | double del,t,*pt,*ptt,*xit; |
| double directest; | double directest; |
| double fp,fptt; | double fp,fptt; |
| Line 2073 void powell(double p[], double **xi, int | Line 2184 void powell(double p[], double **xi, int |
| fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret,rcurr_time-rlast_time, rcurr_time-rstart_time); fflush(ficlog); | fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret,rcurr_time-rlast_time, rcurr_time-rstart_time); fflush(ficlog); |
| /* fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tm_sec-start_time.tm_sec); */ | /* fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tm_sec-start_time.tm_sec); */ |
| for (i=1;i<=n;i++) { | for (i=1;i<=n;i++) { |
| printf(" %d %.12f",i, p[i]); | |
| fprintf(ficlog," %d %.12lf",i, p[i]); | |
| fprintf(ficrespow," %.12lf", p[i]); | fprintf(ficrespow," %.12lf", p[i]); |
| } | } |
| fprintf(ficrespow,"\n");fflush(ficrespow); | |
| printf("\n#model= 1 + age "); | |
| fprintf(ficlog,"\n#model= 1 + age "); | |
| if(nagesqr==1){ | |
| printf(" + age*age "); | |
| fprintf(ficlog," + age*age "); | |
| } | |
| for(j=1;j <=ncovmodel-2;j++){ | |
| if(Typevar[j]==0) { | |
| printf(" + V%d ",Tvar[j]); | |
| fprintf(ficlog," + V%d ",Tvar[j]); | |
| }else if(Typevar[j]==1) { | |
| printf(" + V%d*age ",Tvar[j]); | |
| fprintf(ficlog," + V%d*age ",Tvar[j]); | |
| }else if(Typevar[j]==2) { | |
| printf(" + V%d*V%d ",Tvard[Tposprod[j]][1],Tvard[Tposprod[j]][2]); | |
| fprintf(ficlog," + V%d*V%d ",Tvard[Tposprod[j]][1],Tvard[Tposprod[j]][2]); | |
| } | |
| } | |
| printf("\n"); | printf("\n"); |
| /* printf("12 47.0114589 0.0154322 33.2424412 0.3279905 2.3731903 */ | |
| /* 13 -21.5392400 0.1118147 1.2680506 1.2973408 -1.0663662 */ | |
| fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); |
| fprintf(ficrespow,"\n");fflush(ficrespow); | for(i=1,jk=1; i <=nlstate; i++){ |
| if(*iter <=3){ | for(k=1; k <=(nlstate+ndeath); k++){ |
| if (k != i) { | |
| printf("%d%d ",i,k); | |
| fprintf(ficlog,"%d%d ",i,k); | |
| for(j=1; j <=ncovmodel; j++){ | |
| printf("%12.7f ",p[jk]); | |
| fprintf(ficlog,"%12.7f ",p[jk]); | |
| jk++; | |
| } | |
| printf("\n"); | |
| fprintf(ficlog,"\n"); | |
| } | |
| } | |
| } | |
| if(*iter <=3 && *iter >1){ | |
| tml = *localtime(&rcurr_time); | tml = *localtime(&rcurr_time); |
| strcpy(strcurr,asctime(&tml)); | strcpy(strcurr,asctime(&tml)); |
| rforecast_time=rcurr_time; | rforecast_time=rcurr_time; |
| itmp = strlen(strcurr); | itmp = strlen(strcurr); |
| if(strcurr[itmp-1]=='\n') /* Windows outputs with a new line */ | if(strcurr[itmp-1]=='\n') /* Windows outputs with a new line */ |
| strcurr[itmp-1]='\0'; | strcurr[itmp-1]='\0'; |
| printf("\nConsidering the time needed for the last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); | printf("\nConsidering the time needed for the last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); |
| fprintf(ficlog,"\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); | fprintf(ficlog,"\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); |
| for(niterf=10;niterf<=30;niterf+=10){ | for(niterf=10;niterf<=30;niterf+=10){ |
| rforecast_time=rcurr_time+(niterf-*iter)*(rcurr_time-rlast_time); | rforecast_time=rcurr_time+(niterf-*iter)*(rcurr_time-rlast_time); |
| forecast_time = *localtime(&rforecast_time); | forecast_time = *localtime(&rforecast_time); |
| strcpy(strfor,asctime(&forecast_time)); | strcpy(strfor,asctime(&forecast_time)); |
| itmp = strlen(strfor); | itmp = strlen(strfor); |
| if(strfor[itmp-1]=='\n') | if(strfor[itmp-1]=='\n') |
| strfor[itmp-1]='\0'; | strfor[itmp-1]='\0'; |
| printf(" - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); | printf(" - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); |
| fprintf(ficlog," - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); | fprintf(ficlog," - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); |
| } | } |
| } | } |
| for (i=1;i<=n;i++) { /* For each direction i */ | for (i=1;i<=n;i++) { /* For each direction i */ |
| Line 2151 void powell(double p[], double **xi, int | Line 2295 void powell(double p[], double **xi, int |
| /* printf("\n"); */ | /* printf("\n"); */ |
| /* fprintf(ficlog,"\n"); */ | /* fprintf(ficlog,"\n"); */ |
| } | } |
| if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { /* Did we reach enough precision? */ | /* if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { /\* Did we reach enough precision? *\/ */ |
| if (2.0*fabs(fp-(*fret)) <= ftol) { /* Did we reach enough precision? */ | |
| /* We could compare with a chi^2. chisquare(0.95,ddl=1)=3.84 */ | /* We could compare with a chi^2. chisquare(0.95,ddl=1)=3.84 */ |
| /* By adding age*age in a model, the new -2LL should be lower and the difference follows a */ | /* By adding age*age in a model, the new -2LL should be lower and the difference follows a */ |
| /* a chisquare statistics with 1 degree. To be significant at the 95% level, it should have */ | /* a chisquare statistics with 1 degree. To be significant at the 95% level, it should have */ |
| Line 2197 void powell(double p[], double **xi, int | Line 2342 void powell(double p[], double **xi, int |
| free_vector(pt,1,n); | free_vector(pt,1,n); |
| return; | return; |
| } /* enough precision */ | } /* enough precision */ |
| if (*iter == ITMAX) nrerror("powell exceeding maximum iterations."); | if (*iter == ITMAX*n) nrerror("powell exceeding maximum iterations."); |
| for (j=1;j<=n;j++) { /* Computes the extrapolated point P_0 + 2 (P_n-P_0) */ | for (j=1;j<=n;j++) { /* Computes the extrapolated point P_0 + 2 (P_n-P_0) */ |
| ptt[j]=2.0*p[j]-pt[j]; | ptt[j]=2.0*p[j]-pt[j]; |
| xit[j]=p[j]-pt[j]; | xit[j]=p[j]-pt[j]; |
| Line 2294 void powell(double p[], double **xi, int | Line 2439 void powell(double p[], double **xi, int |
| flatd++; | flatd++; |
| } | } |
| if(flatd >0){ | if(flatd >0){ |
| printf("%d flat directions\n",flatd); | printf("%d flat directions: ",flatd); |
| fprintf(ficlog,"%d flat directions\n",flatd); | fprintf(ficlog,"%d flat directions :",flatd); |
| for (j=1;j<=n;j++) { | for (j=1;j<=n;j++) { |
| if(flatdir[j]>0){ | if(flatdir[j]>0){ |
| printf("%d ",j); | printf("%d ",j); |
| Line 2333 void powell(double p[], double **xi, int | Line 2478 void powell(double p[], double **xi, int |
| /**** Prevalence limit (stable or period prevalence) ****************/ | /**** Prevalence limit (stable or period prevalence) ****************/ |
| double **prevalim(double **prlim, int nlstate, double x[], double age, double **oldm, double **savm, double ftolpl, int *ncvyear, int ij) | 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 combiation ij by left multiplying the unit | /* Computes the prevalence limit in each live state at age x and for covariate combination ij |
| (and selected quantitative values in nres) | |
| by left multiplying the unit | |
| matrix by transitions matrix until convergence is reached with precision ftolpl */ | matrix by transitions matrix until convergence is reached with precision ftolpl */ |
| /* Wx= Wx-1 Px-1= Wx-2 Px-2 Px-1 = Wx-n Px-n ... Px-2 Px-1 I */ | /* Wx= Wx-1 Px-1= Wx-2 Px-2 Px-1 = Wx-n Px-n ... Px-2 Px-1 I */ |
| /* Wx is row vector: population in state 1, population in state 2, population dead */ | /* Wx is row vector: population in state 1, population in state 2, population dead */ |
| Line 2387 double **prevalim(double **prlim, int nl | Line 2534 double **prevalim(double **prlim, int nl |
| for (k=1; k<=nsd;k++) { /* For single dummy covariates only */ | for (k=1; k<=nsd;k++) { /* For single dummy covariates only */ |
| /* Here comes the value of the covariate 'ij' after renumbering k with single dummy covariates */ | /* Here comes the value of the covariate 'ij' after renumbering k with single dummy covariates */ |
| cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)]; | cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)]; |
| printf("prevalim ij=%d k=%d TvarsD[%d]=%d TvarsDind[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); | /* printf("prevalim Dummy combi=%d k=%d TvarsD[%d]=V%d TvarsDind[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); */ |
| } | } |
| for (k=1; k<=nsq;k++) { /* For single varying covariates only */ | for (k=1; k<=nsq;k++) { /* For single varying covariates only */ |
| /* Here comes the value of quantitative after renumbering k with single quantitative covariates */ | /* Here comes the value of quantitative after renumbering k with single quantitative covariates */ |
| /* cov[2+nagesqr+TvarsQind[k]]=qselvar[k]; */ | cov[2+nagesqr+TvarsQind[k]]=Tqresult[nres][k]; |
| printf("prevalim ij=%d k=%d TvarsQind[%d]=%d \n",ij,k,k,TvarsQind[k]); | /* printf("prevalim Quantitative k=%d TvarsQind[%d]=%d, TvarsQ[%d]=V%d,Tqresult[%d][%d]=%f\n",k,k,TvarsQind[k],k,TvarsQ[k],nres,k,Tqresult[nres][k]); */ |
| } | } |
| /*wrong? for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | for (k=1; k<=cptcovage;k++){ /* For product with age */ |
| /* for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]*cov[2]; */ | |
| for (k=1; k<=cptcovage;k++){ | |
| if(Dummy[Tvar[Tage[k]]]){ | if(Dummy[Tvar[Tage[k]]]){ |
| cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; | cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; |
| } else{ | } else{ |
| ; | cov[2+nagesqr+Tage[k]]=Tqresult[nres][k]; |
| /* cov[2+nagesqr+Tage[k]]=qselvar[k]; */ | |
| } | } |
| printf("prevalim Age ij=%d k=%d Tage[%d]=%d \n",ij,k,k,Tage[k]); | /* printf("prevalim Age combi=%d k=%d Tage[%d]=V%d Tqresult[%d][%d]=%f\n",ij,k,k,Tage[k],nres,k,Tqresult[nres][k]); */ |
| } | } |
| for (k=1; k<=cptcovprod;k++){ /* */ | for (k=1; k<=cptcovprod;k++){ /* For product without age */ |
| printf("prevalim Prod ij=%d k=%d Tprod[%d]=%d Tvard[%d][1]=%d, Tvard[%d][2]=%d\n",ij,k,k,Tprod[k], k,Tvard[k][1], k,Tvard[k][2]); | /* printf("prevalim Prod ij=%d k=%d Tprod[%d]=%d Tvard[%d][1]=V%d, Tvard[%d][2]=V%d\n",ij,k,k,Tprod[k], k,Tvard[k][1], k,Tvard[k][2]); */ |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; | if(Dummy[Tvard[k][1]==0]){ |
| if(Dummy[Tvard[k][2]==0]){ | |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; | |
| }else{ | |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * Tqresult[nres][k]; | |
| } | |
| }else{ | |
| if(Dummy[Tvard[k][2]==0]){ | |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][2]][codtabm(ij,k)] * Tqinvresult[nres][Tvard[k][1]]; | |
| }else{ | |
| cov[2+nagesqr+Tprod[k]]=Tqinvresult[nres][Tvard[k][1]]* Tqinvresult[nres][Tvard[k][2]]; | |
| } | |
| } | |
| } | } |
| /*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/ | /*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/ |
| /*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/ | /*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/ |
| Line 2466 Earliest age to start was %d-%d=%d, ncvl | Line 2622 Earliest age to start was %d-%d=%d, ncvl |
| /* double **bprevalim(double **bprlim, double ***prevacurrent, int nlstate, double x[], double age, double ageminpar, double agemaxpar, double **oldm, double **savm, double **dnewm, double **doldm, double **dsavm, double ftolpl, int *ncvyear, int ij) */ | /* double **bprevalim(double **bprlim, double ***prevacurrent, int nlstate, double x[], double age, double ageminpar, double agemaxpar, double **oldm, double **savm, double **dnewm, double **doldm, double **dsavm, double ftolpl, int *ncvyear, int ij) */ |
| /* double **bprevalim(double **bprlim, double ***prevacurrent, int nlstate, double x[], double age, double **oldm, double **savm, double **dnewm, double **doldm, double **dsavm, double ftolpl, int *ncvyear, int ij) */ | /* double **bprevalim(double **bprlim, double ***prevacurrent, int nlstate, double x[], double age, double **oldm, double **savm, double **dnewm, double **doldm, double **dsavm, double ftolpl, int *ncvyear, int ij) */ |
| double **bprevalim(double **bprlim, double ***prevacurrent, int nlstate, double x[], double age, double ftolpl, int *ncvyear, int ij) | double **bprevalim(double **bprlim, double ***prevacurrent, int nlstate, double x[], double age, double ftolpl, int *ncvyear, int ij, int nres) |
| { | { |
| /* Computes the prevalence limit in each live state at age x and covariate ij by left multiplying the unit | /* Computes the prevalence limit in each live state at age x and for covariate combination ij (<=2**cptcoveff) by left multiplying the unit |
| matrix by transitions matrix until convergence is reached with precision ftolpl */ | matrix by transitions matrix until convergence is reached with precision ftolpl */ |
| /* Wx= Wx-1 Px-1= Wx-2 Px-2 Px-1 = Wx-n Px-n ... Px-2 Px-1 I */ | /* Wx= Wx-1 Px-1= Wx-2 Px-2 Px-1 = Wx-n Px-n ... Px-2 Px-1 I */ |
| /* Wx is row vector: population in state 1, population in state 2, population dead */ | /* Wx is row vector: population in state 1, population in state 2, population dead */ |
| Line 2489 Earliest age to start was %d-%d=%d, ncvl | Line 2645 Earliest age to start was %d-%d=%d, ncvl |
| /* If we start from prlim again, prlim tends to a constant matrix */ | /* If we start from prlim again, prlim tends to a constant matrix */ |
| int i, ii,j,k; | int i, ii,j,k; |
| int first=0; | |
| double *min, *max, *meandiff, maxmax,sumnew=0.; | double *min, *max, *meandiff, maxmax,sumnew=0.; |
| /* double **matprod2(); */ /* test */ | /* double **matprod2(); */ /* test */ |
| double **out, cov[NCOVMAX+1], **bmij(); | double **out, cov[NCOVMAX+1], **bmij(); |
| Line 2503 Earliest age to start was %d-%d=%d, ncvl | Line 2660 Earliest age to start was %d-%d=%d, ncvl |
| max=vector(1,nlstate); | max=vector(1,nlstate); |
| meandiff=vector(1,nlstate); | meandiff=vector(1,nlstate); |
| dnewm=ddnewms; doldm=ddoldms; dsavm=ddsavms; | dnewm=ddnewms; doldm=ddoldms; dsavm=ddsavms; |
| oldm=oldms; savm=savms; | oldm=oldms; savm=savms; |
| /* Starting with matrix unity */ | /* Starting with matrix unity */ |
| for (ii=1;ii<=nlstate+ndeath;ii++) | for (ii=1;ii<=nlstate+ndeath;ii++) |
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ |
| oldm[ii][j]=(ii==j ? 1.0 : 0.0); | oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
| } | } |
| Line 2525 Earliest age to start was %d-%d=%d, ncvl | Line 2682 Earliest age to start was %d-%d=%d, ncvl |
| cov[2]=agefin; | cov[2]=agefin; |
| if(nagesqr==1) | if(nagesqr==1) |
| cov[3]= agefin*agefin;; | cov[3]= agefin*agefin;; |
| for (k=1; k<=cptcovn;k++) { | for (k=1; k<=nsd;k++) { /* For single dummy covariates only */ |
| /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; */ | /* Here comes the value of the covariate 'ij' after renumbering k with single dummy covariates */ |
| cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; | cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)]; |
| /* printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtabm(ij,Tvar[k])],cov[2+k], ij, k, codtabm(ij,Tvar[k])]); */ | /* printf("bprevalim Dummy agefin=%.0f combi=%d k=%d TvarsD[%d]=V%d TvarsDind[%d]=%d nbcode=%d cov[%d]=%lf codtabm(%d,Tvar[%d])=%d \n",agefin,ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],2+nagesqr+TvarsDind[k],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); */ |
| } | } |
| /*wrong? for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | /* for (k=1; k<=cptcovn;k++) { */ |
| /* for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]*cov[2]; */ | /* /\* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; *\/ */ |
| for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,k)]*cov[2]; | /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; */ |
| for (k=1; k<=cptcovprod;k++) /* Useless */ | /* /\* printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtabm(ij,Tvar[k])],cov[2+k], ij, k, codtabm(ij,Tvar[k])]); *\/ */ |
| /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])] * nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */ | /* } */ |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; | for (k=1; k<=nsq;k++) { /* For single varying covariates only */ |
| /* Here comes the value of quantitative after renumbering k with single quantitative covariates */ | |
| cov[2+nagesqr+TvarsQind[k]]=Tqresult[nres][k]; | |
| /* printf("prevalim Quantitative k=%d TvarsQind[%d]=%d, TvarsQ[%d]=V%d,Tqresult[%d][%d]=%f\n",k,k,TvarsQind[k],k,TvarsQ[k],nres,k,Tqresult[nres][k]); */ | |
| } | |
| /* for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,k)]*cov[2]; */ | |
| /* for (k=1; k<=cptcovprod;k++) /\* Useless *\/ */ | |
| /* /\* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])] * nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; *\/ */ | |
| /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; */ | |
| for (k=1; k<=cptcovage;k++){ /* For product with age */ | |
| if(Dummy[Tvar[Tage[k]]]){ | |
| cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; | |
| } else{ | |
| cov[2+nagesqr+Tage[k]]=Tqresult[nres][k]; | |
| } | |
| /* printf("prevalim Age combi=%d k=%d Tage[%d]=V%d Tqresult[%d][%d]=%f\n",ij,k,k,Tage[k],nres,k,Tqresult[nres][k]); */ | |
| } | |
| for (k=1; k<=cptcovprod;k++){ /* For product without age */ | |
| /* printf("prevalim Prod ij=%d k=%d Tprod[%d]=%d Tvard[%d][1]=V%d, Tvard[%d][2]=V%d\n",ij,k,k,Tprod[k], k,Tvard[k][1], k,Tvard[k][2]); */ | |
| if(Dummy[Tvard[k][1]==0]){ | |
| if(Dummy[Tvard[k][2]==0]){ | |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; | |
| }else{ | |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * Tqresult[nres][k]; | |
| } | |
| }else{ | |
| if(Dummy[Tvard[k][2]==0]){ | |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][2]][codtabm(ij,k)] * Tqinvresult[nres][Tvard[k][1]]; | |
| }else{ | |
| cov[2+nagesqr+Tprod[k]]=Tqinvresult[nres][Tvard[k][1]]* Tqinvresult[nres][Tvard[k][2]]; | |
| } | |
| } | |
| } | |
| /*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/ | /*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/ |
| /*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/ | /*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/ |
| Line 2550 Earliest age to start was %d-%d=%d, ncvl | Line 2739 Earliest age to start was %d-%d=%d, ncvl |
| /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, ageminpar, agemaxpar, dnewm, doldm, dsavm,ij)); /\* Bug Valgrind *\/ */ | /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, ageminpar, agemaxpar, dnewm, doldm, dsavm,ij)); /\* Bug Valgrind *\/ */ |
| /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, dnewm, doldm, dsavm,ij)); /\* Bug Valgrind *\/ */ | /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, dnewm, doldm, dsavm,ij)); /\* Bug Valgrind *\/ */ |
| out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent,ij)); /* Bug Valgrind */ | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent,ij)); /* Bug Valgrind */ |
| /* if((int)age == 70){ */ | |
| /* printf(" Backward prevalim age=%d agefin=%d \n", (int) age, (int) agefin); */ | |
| /* for(i=1; i<=nlstate+ndeath; i++) { */ | |
| /* printf("%d newm= ",i); */ | |
| /* for(j=1;j<=nlstate+ndeath;j++) { */ | |
| /* printf("%f ",newm[i][j]); */ | |
| /* } */ | |
| /* printf("oldm * "); */ | |
| /* for(j=1;j<=nlstate+ndeath;j++) { */ | |
| /* printf("%f ",oldm[i][j]); */ | |
| /* } */ | |
| /* printf(" pmmij "); */ | |
| /* for(j=1;j<=nlstate+ndeath;j++) { */ | |
| /* printf("%f ",pmmij[i][j]); */ | |
| /* } */ | |
| /* printf("\n"); */ | |
| /* } */ | |
| /* } */ | |
| savm=oldm; | savm=oldm; |
| oldm=newm; | oldm=newm; |
| for(j=1; j<=nlstate; j++){ | for(j=1; j<=nlstate; j++){ |
| max[j]=0.; | max[j]=0.; |
| min[j]=1.; | min[j]=1.; |
| Line 2582 Earliest age to start was %d-%d=%d, ncvl | Line 2790 Earliest age to start was %d-%d=%d, ncvl |
| } | } |
| } /* age loop */ | } /* age loop */ |
| /* After some age loop it doesn't converge */ | /* After some age loop it doesn't converge */ |
| printf("Warning: the back stable prevalence at age %d did not converge with the required precision (%g > ftolpl=%g) within %.0f years. Try to lower 'ftolpl'. \n\ | if(first){ |
| first=1; | |
| printf("Warning: the back stable prevalence at age %d did not converge with the required precision (%g > ftolpl=%g) within %.0f years. Try to lower 'ftolpl'. Others in log file only...\n\ | |
| Oldest age to start was %d-%d=%d, ncvloop=%d, ncvyear=%d\n", (int)age, maxmax, ftolpl, delaymax, (int)age, (int)delaymax, (int)agefin, ncvloop, *ncvyear); | |
| } | |
| fprintf(ficlog,"Warning: the back stable prevalence at age %d did not converge with the required precision (%g > ftolpl=%g) within %.0f years. Try to lower 'ftolpl'. \n\ | |
| Oldest age to start was %d-%d=%d, ncvloop=%d, ncvyear=%d\n", (int)age, maxmax, ftolpl, delaymax, (int)age, (int)delaymax, (int)agefin, ncvloop, *ncvyear); | Oldest age to start was %d-%d=%d, ncvloop=%d, ncvyear=%d\n", (int)age, maxmax, ftolpl, delaymax, (int)age, (int)delaymax, (int)agefin, ncvloop, *ncvyear); |
| /* Try to lower 'ftol', for example from 1.e-8 to 6.e-9.\n", ftolpl, (int)age, (int)delaymax, (int)agefin, ncvloop, (int)age-(int)agefin); */ | /* Try to lower 'ftol', for example from 1.e-8 to 6.e-9.\n", ftolpl, (int)age, (int)delaymax, (int)agefin, ncvloop, (int)age-(int)agefin); */ |
| free_vector(min,1,nlstate); | free_vector(min,1,nlstate); |
| Line 2597 Oldest age to start was %d-%d=%d, ncvloo | Line 2810 Oldest age to start was %d-%d=%d, ncvloo |
| double **pmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate ) | double **pmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate ) |
| { | { |
| /* According to parameters values stored in x and the covariate's values stored in cov, | /* According to parameters values stored in x and the covariate's values stored in cov, |
| computes the probability to be observed in state j being in state i by appying the | computes the probability to be observed in state j (after stepm years) being in state i by appying the |
| model to the ncovmodel covariates (including constant and age). | model to the ncovmodel covariates (including constant and age). |
| lnpijopii=ln(pij/pii)= aij+bij*age+cij*v1+dij*v2+... = sum_nc=1^ncovmodel xij(nc)*cov[nc] | lnpijopii=ln(pij/pii)= aij+bij*age+cij*v1+dij*v2+... = sum_nc=1^ncovmodel xij(nc)*cov[nc] |
| and, according on how parameters are entered, the position of the coefficient xij(nc) of the | and, according on how parameters are entered, the position of the coefficient xij(nc) of the |
| Line 2606 double **pmij(double **ps, double *cov, | Line 2819 double **pmij(double **ps, double *cov, |
| j>=i nc + ((i-1)*(nlstate+ndeath-1)+(j-2))*ncovmodel | j>=i nc + ((i-1)*(nlstate+ndeath-1)+(j-2))*ncovmodel |
| Computes ln(pij/pii) (lnpijopii), deduces pij/pii by exponentiation, | Computes ln(pij/pii) (lnpijopii), deduces pij/pii by exponentiation, |
| sums on j different of i to get 1-pii/pii, deduces pii, and then all pij. | sums on j different of i to get 1-pii/pii, deduces pii, and then all pij. |
| Outputs ps[i][j] the probability to be observed in j being in j according to | Outputs ps[i][j] or probability to be observed in j being in i according to |
| the values of the covariates cov[nc] and corresponding parameter values x[nc+shiftij] | the values of the covariates cov[nc] and corresponding parameter values x[nc+shiftij] |
| Sum on j ps[i][j] should equal to 1. | |
| */ | */ |
| double s1, lnpijopii; | double s1, lnpijopii; |
| /*double t34;*/ | /*double t34;*/ |
| Line 2671 double **pmij(double **ps, double *cov, | Line 2885 double **pmij(double **ps, double *cov, |
| /* | /* |
| for(i=1; i<= npar; i++) printf("%f ",x[i]); | for(i=1; i<= npar; i++) printf("%f ",x[i]); |
| goto end;*/ | goto end;*/ |
| return ps; | return ps; /* Pointer is unchanged since its call */ |
| } | } |
| /*************** backward transition probabilities ***************/ | /*************** backward transition probabilities ***************/ |
| Line 2680 double **pmij(double **ps, double *cov, | Line 2894 double **pmij(double **ps, double *cov, |
| /* double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, double ***dnewm, double **doldm, double **dsavm, int ij ) */ | /* double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, double ***dnewm, double **doldm, double **dsavm, int ij ) */ |
| double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, int ij ) | double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, int ij ) |
| { | { |
| /* Computes the backward probability at age agefin and covariate ij | /* Computes the backward probability at age agefin and covariate combination ij. In fact cov is already filled and x too. |
| * and returns in **ps as well as **bmij. | * Call to pmij(cov and x), call to cross prevalence, sums and inverses, left multiply, and returns in **ps as well as **bmij. |
| */ | */ |
| int i, ii, j,k; | int i, ii, j,k; |
| Line 2698 double **pmij(double **ps, double *cov, | Line 2912 double **pmij(double **ps, double *cov, |
| agefin=cov[2]; | agefin=cov[2]; |
| /* bmij *//* age is cov[2], ij is included in cov, but we need for | /* bmij *//* age is cov[2], ij is included in cov, but we need for |
| the observed prevalence (with this covariate ij) */ | the observed prevalence (with this covariate ij) at beginning of transition */ |
| dsavm=pmij(pmmij,cov,ncovmodel,x,nlstate); | /* dsavm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ |
| pmmij=pmij(pmmij,cov,ncovmodel,x,nlstate); /*This is forward probability from agefin to agefin + stepm */ | |
| /* outputs pmmij which is a stochastic matrix */ | |
| /* We do have the matrix Px in savm and we need pij */ | /* We do have the matrix Px in savm and we need pij */ |
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ |
| sumnew=0.; /* w1 p11 + w2 p21 only on live states */ | sumnew=0.; /* w1 p11 + w2 p21 only on live states N1./N..*N11/N1. + N2./N..*N21/N2.=(N11+N21)/N..=N.1/N.. */ |
| for (ii=1;ii<=nlstate;ii++){ | for (ii=1;ii<=nlstate;ii++){ |
| sumnew+=dsavm[ii][j]*prevacurrent[(int)agefin][ii][ij]; | /* sumnew+=dsavm[ii][j]*prevacurrent[(int)agefin][ii][ij]; */ |
| sumnew+=pmmij[ii][j]*prevacurrent[(int)agefin][ii][ij]; /* Yes prevalence at beginning of transition */ | |
| } /* sumnew is (N11+N21)/N..= N.1/N.. = sum on i of w_i pij */ | } /* sumnew is (N11+N21)/N..= N.1/N.. = sum on i of w_i pij */ |
| for (ii=1;ii<=nlstate+ndeath;ii++){ | if(sumnew >= 1.e-10){ |
| if(sumnew >= 1.e-10){ | for (ii=1;ii<=nlstate+ndeath;ii++){ |
| /* if(agefin >= agemaxpar && agefin <= agemaxpar+stepm/YEARM){ */ | /* if(agefin >= agemaxpar && agefin <= agemaxpar+stepm/YEARM){ */ |
| /* doldm[ii][j]=(ii==j ? 1./sumnew : 0.0); */ | /* doldm[ii][j]=(ii==j ? 1./sumnew : 0.0); */ |
| /* }else if(agefin >= agemaxpar+stepm/YEARM){ */ | /* }else if(agefin >= agemaxpar+stepm/YEARM){ */ |
| /* doldm[ii][j]=(ii==j ? 1./sumnew : 0.0); */ | /* doldm[ii][j]=(ii==j ? 1./sumnew : 0.0); */ |
| /* }else */ | /* }else */ |
| doldm[ii][j]=(ii==j ? 1./sumnew : 0.0); | doldm[ii][j]=(ii==j ? 1./sumnew : 0.0); |
| }else{ | } /*End ii */ |
| printf("ii=%d, i=%d, doldm=%lf dsavm=%lf, probs=%lf, sumnew=%lf,agefin=%d\n",ii,j,doldm[ii][j],dsavm[ii][j],prevacurrent[(int)agefin][ii][ij],sumnew, (int)agefin); | }else{ /* We put the identity matrix */ |
| } | for (ii=1;ii<=nlstate+ndeath;ii++){ |
| } /*End ii */ | doldm[ii][j]=(ii==j ? 1. : 0.0); |
| } /* End j, At the end doldm is diag[1/(w_1p1i+w_2 p2i)] */ | } /*End ii */ |
| /* left Product of this diag matrix by dsavm=Px (newm=dsavm*doldm) */ | /* printf("Problem internal bmij A: sum_i w_i*p_ij=N.j/N.. <1.e-10 i=%d, j=%d, sumnew=%lf,agefin=%d\n",ii,j,sumnew, (int)agefin); */ |
| bbmij=matprod2(dnewm, dsavm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, doldm); /* Bug Valgrind */ | } |
| } /* End j, At the end doldm is diag[1/(w_1p1i+w_2 p2i)] or identity*/ | |
| /* left Product of this diag matrix by dsavm=Px (dnewm=dsavm*doldm) */ | |
| /* bbmij=matprod2(dnewm, dsavm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, doldm); /\* Bug Valgrind *\/ */ | |
| bbmij=matprod2(dnewm, pmmij,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, doldm); /* Bug Valgrind */ | |
| /* dsavm=doldm; /\* dsavm is now diag [1/(w_1p1i+w_2 p2i)] but can be overwritten*\/ */ | /* dsavm=doldm; /\* dsavm is now diag [1/(w_1p1i+w_2 p2i)] but can be overwritten*\/ */ |
| /* doldm=dnewm; /\* doldm is now Px * diag [1/(w_1p1i+w_2 p2i)] *\/ */ | /* doldm=dnewm; /\* doldm is now Px * diag [1/(w_1p1i+w_2 p2i)] *\/ */ |
| /* dnewm=dsavm; /\* doldm is now Px * diag [1/(w_1p1i+w_2 p2i)] *\/ */ | /* dnewm=dsavm; /\* doldm is now Px * diag [1/(w_1p1i+w_2 p2i)] *\/ */ |
| /* left Product of this matrix by diag matrix of prevalences (savm) */ | /* left Product of this matrix by diag matrix of prevalences (savm) */ |
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ |
| sumnew=0.; | |
| for (ii=1;ii<=nlstate+ndeath;ii++){ | for (ii=1;ii<=nlstate+ndeath;ii++){ |
| sumnew+=prevacurrent[(int)agefin][ii][ij]; | |
| dsavm[ii][j]=(ii==j ? prevacurrent[(int)agefin][ii][ij] : 0.0); | dsavm[ii][j]=(ii==j ? prevacurrent[(int)agefin][ii][ij] : 0.0); |
| } | } |
| } /* End j, At the end oldm is diag[1/(w_1p1i+w_2 p2i)] */ | /* if(sumnew <0.9){ */ |
| ps=matprod2(doldm, dsavm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, dnewm); /* Bug Valgrind */ | /* printf("Problem internal bmij B: sum on i wi <0.9: j=%d, sum_i wi=%lf,agefin=%d\n",j,sumnew, (int)agefin); */ |
| /* } */ | |
| } /* End j, At the end dsavm is diag[(w_i)] */ | |
| /* What if dsavm doesn't sum ii to 1? */ | |
| /* ps=matprod2(doldm, dsavm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, dnewm); /\* Bug Valgrind *\/ */ | |
| ps=matprod2(ps, dsavm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, dnewm); /* Bug Valgrind */ | |
| /* newm or out is now diag[w_i] * Px * diag [1/(w_1p1i+w_2 p2i)] */ | /* newm or out is now diag[w_i] * Px * diag [1/(w_1p1i+w_2 p2i)] */ |
| /* end bmij */ | /* end bmij */ |
| return ps; | return ps; /*pointer is unchanged */ |
| } | } |
| /*************** transition probabilities ***************/ | /*************** transition probabilities ***************/ |
| Line 2856 double **matprod2(double **out, double * | Line 3084 double **matprod2(double **out, double * |
| /************* Higher Matrix Product ***************/ | /************* Higher Matrix Product ***************/ |
| double ***hpxij(double ***po, int nhstepm, double age, int hstepm, double *x, int nlstate, int stepm, double **oldm, double **savm, int ij ) | 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 combination of covariate values corresponding to ij over | /* Computes the transition matrix starting at age 'age' and combination of covariate values corresponding to ij over |
| 'nhstepm*hstepm*stepm' months (i.e. until | 'nhstepm*hstepm*stepm' months (i.e. until |
| Line 2892 double ***hpxij(double ***po, int nhstep | Line 3120 double ***hpxij(double ***po, int nhstep |
| cov[2]=agexact; | cov[2]=agexact; |
| if(nagesqr==1) | if(nagesqr==1) |
| cov[3]= agexact*agexact; | cov[3]= agexact*agexact; |
| for (k=1; k<=cptcovn;k++) | for (k=1; k<=nsd;k++) { /* For single dummy covariates only */ |
| cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; | /* Here comes the value of the covariate 'ij' after renumbering k with single dummy covariates */ |
| /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; */ | cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)]; |
| for (k=1; k<=cptcovage;k++) /* Should start at cptcovn+1 */ | /* printf("hpxij Dummy combi=%d k=%d TvarsD[%d]=V%d TvarsDind[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); */ |
| /* cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | } |
| cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; | for (k=1; k<=nsq;k++) { /* For single varying covariates only */ |
| /* cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k]])]*cov[2]; */ | /* Here comes the value of quantitative after renumbering k with single quantitative covariates */ |
| for (k=1; k<=cptcovprod;k++) /* Useless because included in cptcovn */ | cov[2+nagesqr+TvarsQind[k]]=Tqresult[nres][k]; |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; | /* printf("hPxij Quantitative k=%d TvarsQind[%d]=%d, TvarsQ[%d]=V%d,Tqresult[%d][%d]=%f\n",k,k,TvarsQind[k],k,TvarsQ[k],nres,k,Tqresult[nres][k]); */ |
| /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])]*nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */ | } |
| for (k=1; k<=cptcovage;k++){ | |
| if(Dummy[Tvar[Tage[k]]]){ | |
| cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; | |
| } else{ | |
| cov[2+nagesqr+Tage[k]]=Tqresult[nres][k]; | |
| } | |
| /* printf("hPxij Age combi=%d k=%d Tage[%d]=V%d Tqresult[%d][%d]=%f\n",ij,k,k,Tage[k],nres,k,Tqresult[nres][k]); */ | |
| } | |
| for (k=1; k<=cptcovprod;k++){ /* */ | |
| /* printf("hPxij Prod ij=%d k=%d Tprod[%d]=%d Tvard[%d][1]=V%d, Tvard[%d][2]=V%d\n",ij,k,k,Tprod[k], k,Tvard[k][1], k,Tvard[k][2]); */ | |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; | |
| } | |
| /* for (k=1; k<=cptcovn;k++) */ | |
| /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; */ | |
| /* for (k=1; k<=cptcovage;k++) /\* Should start at cptcovn+1 *\/ */ | |
| /* cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; */ | |
| /* for (k=1; k<=cptcovprod;k++) /\* Useless because included in cptcovn *\/ */ | |
| /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; */ | |
| /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/ | /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/ |
| Line 2941 double ***hpxij(double ***po, int nhstep | Line 3187 double ***hpxij(double ***po, int nhstep |
| /* double ***hbxij(double ***po, int nhstepm, double age, int hstepm, double *x, double ***prevacurrent, int nlstate, int stepm, double **oldm, double **savm, double **dnewm, double **doldm, double **dsavm, int ij ) */ | /* double ***hbxij(double ***po, int nhstepm, double age, int hstepm, double *x, double ***prevacurrent, int nlstate, int stepm, double **oldm, double **savm, double **dnewm, double **doldm, double **dsavm, int ij ) */ |
| double ***hbxij(double ***po, int nhstepm, double age, int hstepm, double *x, double ***prevacurrent, int nlstate, int stepm, int ij ) | double ***hbxij(double ***po, int nhstepm, double age, int hstepm, double *x, double ***prevacurrent, int nlstate, int stepm, int ij ) |
| { | { |
| /* Computes the transition matrix starting at age 'age' over | /* For a combination of dummy covariate ij, computes the transition matrix starting at age 'age' over |
| 'nhstepm*hstepm*stepm' months (i.e. until | 'nhstepm*hstepm*stepm' months (i.e. until |
| age (in years) age+nhstepm*hstepm*stepm/12) by multiplying | age (in years) age+nhstepm*hstepm*stepm/12) by multiplying |
| nhstepm*hstepm matrices. | nhstepm*hstepm matrices. |
| Line 2949 double ***hbxij(double ***po, int nhstep | Line 3195 double ***hbxij(double ***po, int nhstep |
| (typically every 2 years instead of every month which is too big | (typically every 2 years instead of every month which is too big |
| for the memory). | for the memory). |
| Model is determined by parameters x and covariates have to be | Model is determined by parameters x and covariates have to be |
| included manually here. | included manually here. Then we use a call to bmij(x and cov) |
| The addresss of po (p3mat allocated to the dimension of nhstepm) should be stored for output | |
| */ | */ |
| int i, j, d, h, k; | int i, j, d, h, k; |
| double **out, cov[NCOVMAX+1]; | double **out, cov[NCOVMAX+1], **bmij(); |
| double **newm; | double **newm, ***newmm; |
| double agexact; | double agexact; |
| double agebegin, ageend; | double agebegin, ageend; |
| double **oldm, **savm; | double **oldm, **savm; |
| oldm=oldms;savm=savms; | newmm=po; /* To be saved */ |
| oldm=oldms;savm=savms; /* Global pointers */ | |
| /* Hstepm could be zero and should return the unit matrix */ | /* Hstepm could be zero and should return the unit matrix */ |
| for (i=1;i<=nlstate+ndeath;i++) | for (i=1;i<=nlstate+ndeath;i++) |
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ |
| Line 2973 double ***hbxij(double ***po, int nhstep | Line 3220 double ***hbxij(double ***po, int nhstep |
| newm=savm; | newm=savm; |
| /* Covariates have to be included here again */ | /* Covariates have to be included here again */ |
| cov[1]=1.; | cov[1]=1.; |
| agexact=age-((h-1)*hstepm + (d-1))*stepm/YEARM; /* age just before transition */ | agexact=age-((h-1)*hstepm + (d))*stepm/YEARM; /* age just before transition, d or d-1? */ |
| /* agexact=age+((h-1)*hstepm + (d-1))*stepm/YEARM; /\* age just before transition *\/ */ | /* agexact=age+((h-1)*hstepm + (d-1))*stepm/YEARM; /\* age just before transition *\/ */ |
| cov[2]=agexact; | cov[2]=agexact; |
| if(nagesqr==1) | if(nagesqr==1) |
| cov[3]= agexact*agexact; | cov[3]= agexact*agexact; |
| for (k=1; k<=cptcovn;k++) | for (k=1; k<=cptcovn;k++){ |
| cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; | /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; */ |
| /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; */ | /* /\* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; *\/ */ |
| cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)]; | |
| /* printf("hbxij Dummy agexact=%.0f combi=%d k=%d TvarsD[%d]=V%d TvarsDind[%d]=%d nbcode=%d cov[%d]=%lf codtabm(%d,Tvar[%d])=%d \n",agexact,ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],2+nagesqr+TvarsDind[k],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); */ | |
| } | |
| for (k=1; k<=cptcovage;k++) /* Should start at cptcovn+1 */ | for (k=1; k<=cptcovage;k++) /* Should start at cptcovn+1 */ |
| /* cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | /* cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ |
| cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; | cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; |
| Line 2989 double ***hbxij(double ***po, int nhstep | Line 3240 double ***hbxij(double ***po, int nhstep |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; | cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; |
| /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])]*nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */ | /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])]*nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */ |
| /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/ | /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/ |
| /*printf("h=%d d=%d age=%f cov=%f\n",h,d,age,cov[2]);*/ | /*printf("h=%d d=%d age=%f cov=%f\n",h,d,age,cov[2]);*/ |
| /* Careful transposed matrix */ | /* Careful transposed matrix */ |
| /* age is in cov[2] */ | /* age is in cov[2], prevacurrent at beginning of transition. */ |
| /* out=matprod2(newm, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, dnewm, doldm, dsavm,ij),\ */ | /* out=matprod2(newm, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, dnewm, doldm, dsavm,ij),\ */ |
| /* 1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); */ | /* 1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); */ |
| out=matprod2(newm, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent,ij),\ | out=matprod2(newm, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent,ij),\ |
| Line 3080 double func( double *x) | Line 3330 double func( double *x) |
| Then computes with function pmij which return a matrix p[i][j] giving the elementary probability | 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. | to be observed in j being in i according to the model. |
| */ | */ |
| ioffset=2+nagesqr+cptcovage; | ioffset=2+nagesqr ; |
| /* Fixed */ | /* Fixed */ |
| for (k=1; k<=ncovf;k++){ /* Simple and product fixed covariates without age* products */ | for (k=1; k<=ncovf;k++){ /* Simple and product fixed covariates without age* products */ |
| 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)*/ | 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)*/ |
| Line 3099 double func( double *x) | Line 3349 double func( double *x) |
| */ | */ |
| for(mi=1; mi<= wav[i]-1; mi++){ | for(mi=1; mi<= wav[i]-1; mi++){ |
| for(k=1; k <= ncovv ; k++){ /* Varying covariates (single and product but no age )*/ | 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]]][i]; */ |
| cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]-ncovcol-nqv][i]; | |
| } | } |
| for (ii=1;ii<=nlstate+ndeath;ii++) | for (ii=1;ii<=nlstate+ndeath;ii++) |
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ |
| Line 3113 double func( double *x) | Line 3364 double func( double *x) |
| if(nagesqr==1) | if(nagesqr==1) |
| cov[3]= agexact*agexact; /* Should be changed here */ | cov[3]= agexact*agexact; /* Should be changed here */ |
| for (kk=1; kk<=cptcovage;kk++) { | for (kk=1; kk<=cptcovage;kk++) { |
| 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 */ | 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; | |
| } | } |
| out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
| 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
| Line 3395 double funcone( double *x) | Line 3649 double funcone( double *x) |
| for(k=1; k<=nlstate; k++) ll[k]=0.; | for(k=1; k<=nlstate; k++) ll[k]=0.; |
| ioffset=0; | ioffset=0; |
| for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
| ioffset=2+nagesqr+cptcovage; | /* ioffset=2+nagesqr+cptcovage; */ |
| ioffset=2+nagesqr; | |
| /* Fixed */ | /* Fixed */ |
| /* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */ | /* 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<=ncoveff;k++){ /\* Simple and product fixed Dummy covariates without age* products *\/ */ |
| Line 3422 double funcone( double *x) | Line 3677 double funcone( double *x) |
| for(mi=1; mi<= wav[i]-1; mi++){ /* Varying with waves */ | for(mi=1; mi<= wav[i]-1; mi++){ /* Varying with waves */ |
| /* Wave varying (but not age varying) */ | /* Wave varying (but not age varying) */ |
| for(k=1; k <= ncovv ; k++){ /* Varying covariates (single and product but no age )*/ | 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]]][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??)*\/ */ | /* 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 *\/ */ | /* 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]; */ | /* cov[ioffset+iv]=cotvar[mw[mi][i]][iv][i]; */ |
| /* k=ioffset-2-nagesqr-cptcovage+itv; /\* position in simple model *\/ */ | /* k=ioffset-2-nagesqr-cptcovage+itv; /\* position in simple model *\/ */ |
| /* cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i]; */ | /* 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]); */ | /* 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 *\/ */ | /* for(iqtv=1; iqtv <= nqtveff; iqtv++){ /\* Varying quantitatives covariates *\/ */ |
| /* iv=TmodelInvQind[iqtv]; /\* Counting the # varying covariate from 1 to ntveff *\/ */ | /* 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]); *\/ */ | /* /\* 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]; */ | /* cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]; */ |
| /* } */ | /* } */ |
| for (ii=1;ii<=nlstate+ndeath;ii++) | for (ii=1;ii<=nlstate+ndeath;ii++) |
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ |
| oldm[ii][j]=(ii==j ? 1.0 : 0.0); | oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
| savm[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 */ | 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 */ | ageend=agev[mw[mi][i]][i] + (dh[mi][i])*stepm/YEARM; /* Age at end of effective wave and at the end of transition */ |
| for(d=0; d<dh[mi][i]; d++){ /* Delay between two effective waves */ | for(d=0; d<dh[mi][i]; d++){ /* Delay between two effective waves */ |
| /*dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i] | /* for(d=0; d<=0; d++){ /\* Delay between two effective waves Only one matrix to speed up*\/ */ |
| and mw[mi+1][i]. dh depends on stepm.*/ | /*dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i] |
| newm=savm; | and mw[mi+1][i]. dh depends on stepm.*/ |
| agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | newm=savm; |
| cov[2]=agexact; | agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; /* Here d is needed */ |
| if(nagesqr==1) | cov[2]=agexact; |
| cov[3]= agexact*agexact; | if(nagesqr==1) |
| for (kk=1; kk<=cptcovage;kk++) { | cov[3]= agexact*agexact; |
| cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | for (kk=1; kk<=cptcovage;kk++) { |
| } | if(!FixedV[Tvar[Tage[kk]]]) |
| /* printf("i=%d,mi=%d,d=%d,mw[mi][i]=%d\n",i, mi,d,mw[mi][i]); */ | cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
| /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ | else |
| out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | cov[Tage[kk]+2+nagesqr]=cotvar[mw[mi][i]][Tvar[Tage[kk]]-ncovcol-nqv][i]*agexact; |
| 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | } |
| /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, */ | /* printf("i=%d,mi=%d,d=%d,mw[mi][i]=%d\n",i, mi,d,mw[mi][i]); */ |
| /* 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); */ | /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ |
| savm=oldm; | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
| oldm=newm; | 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
| /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, */ | |
| /* 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); */ | |
| savm=oldm; | |
| oldm=newm; | |
| } /* end mult */ | } /* end mult */ |
| s1=s[mw[mi][i]][i]; | s1=s[mw[mi][i]][i]; |
| Line 3475 double funcone( double *x) | Line 3735 double funcone( double *x) |
| * is higher than the multiple of stepm and negative otherwise. | * is higher than the multiple of stepm and negative otherwise. |
| */ | */ |
| if( s2 > nlstate && (mle <5) ){ /* Jackson */ | if( s2 > nlstate && (mle <5) ){ /* Jackson */ |
| lli=log(out[s1][s2] - savm[s1][s2]); | lli=log(out[s1][s2] - savm[s1][s2]); |
| } else if ( s2==-1 ) { /* alive */ | } else if ( s2==-1 ) { /* alive */ |
| for (j=1,survp=0. ; j<=nlstate; j++) | for (j=1,survp=0. ; j<=nlstate; j++) |
| survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; | survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; |
| lli= log(survp); | lli= log(survp); |
| }else if (mle==1){ | }else if (mle==1){ |
| lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ | lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ |
| } else if(mle==2){ | } else if(mle==2){ |
| lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* linear interpolation */ | lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* linear interpolation */ |
| } else if(mle==3){ /* exponential inter-extrapolation */ | } else if(mle==3){ /* exponential inter-extrapolation */ |
| lli= (savm[s1][s2]>(double)1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */ | lli= (savm[s1][s2]>(double)1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */ |
| } else if (mle==4){ /* mle=4 no inter-extrapolation */ | } else if (mle==4){ /* mle=4 no inter-extrapolation */ |
| lli=log(out[s1][s2]); /* Original formula */ | lli=log(out[s1][s2]); /* Original formula */ |
| } else{ /* mle=0 back to 1 */ | } else{ /* mle=0 back to 1 */ |
| lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ | lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ |
| /*lli=log(out[s1][s2]); */ /* Original formula */ | /*lli=log(out[s1][s2]); */ /* Original formula */ |
| } /* End of if */ | } /* End of if */ |
| ipmx +=1; | ipmx +=1; |
| sw += weight[i]; | sw += weight[i]; |
| ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | 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]); */ |
| if(globpr){ | if(globpr){ |
| fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\ | 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 ", \ | %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, | num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw, |
| 2*weight[i]*lli,out[s1][s2],savm[s1][s2]); | 2*weight[i]*lli,out[s1][s2],savm[s1][s2]); |
| for(k=1,llt=0.,l=0.; k<=nlstate; k++){ | for(k=1,llt=0.,l=0.; k<=nlstate; k++){ |
| llt +=ll[k]*gipmx/gsw; | llt +=ll[k]*gipmx/gsw; |
| fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw); | fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw); |
| } | } |
| fprintf(ficresilk," %10.6f\n", -llt); | fprintf(ficresilk," %10.6f\n", -llt); |
| } | } |
| } /* end of wave */ | } /* end of wave */ |
| } /* end of individual */ | } /* end of individual */ |
| Line 3855 double hessij( double x[], double **hess | Line 4115 double hessij( double x[], double **hess |
| kmax=kmax+10; | kmax=kmax+10; |
| } | } |
| if(kmax >=10 || firstime ==1){ | if(kmax >=10 || firstime ==1){ |
| printf("Warning: directions %d-%d, you are not estimating the Hessian at the exact maximum likelihood; you may increase ftol=%.2e\n",thetai,thetaj, ftol); | printf("Warning: directions %d-%d, you are not estimating the Hessian at the exact maximum likelihood; you could increase ftol=%.2e\n",thetai,thetaj, ftol); |
| fprintf(ficlog,"Warning: directions %d-%d, you are not estimating the Hessian at the exact maximum likelihood; you may increase ftol=%.2e\n",thetai,thetaj, ftol); | fprintf(ficlog,"Warning: directions %d-%d, you are not estimating the Hessian at the exact maximum likelihood; you could increase ftol=%.2e\n",thetai,thetaj, ftol); |
| printf("%d %d k=%d, k1=%.12e k2=%.12e k3=%.12e k4=%.12e delti*k=%.12e deltj*k=%.12e, xi-de*k=%.12e xj-de*k=%.12e res=%.12e k1234=%.12e,k1-2=%.12e,k3-4=%.12e\n",thetai,thetaj,k,k1,k2,k3,k4,delti[thetai]/k,delti[thetaj]/k,x[thetai]-delti[thetai]/k,x[thetaj]-delti[thetaj]/k, res,k1-k2-k3+k4,k1-k2,k3-k4); | printf("%d %d k=%d, k1=%.12e k2=%.12e k3=%.12e k4=%.12e delti*k=%.12e deltj*k=%.12e, xi-de*k=%.12e xj-de*k=%.12e res=%.12e k1234=%.12e,k1-2=%.12e,k3-4=%.12e\n",thetai,thetaj,k,k1,k2,k3,k4,delti[thetai]/k,delti[thetaj]/k,x[thetai]-delti[thetai]/k,x[thetaj]-delti[thetaj]/k, res,k1-k2-k3+k4,k1-k2,k3-k4); |
| fprintf(ficlog,"%d %d k=%d, k1=%.12e k2=%.12e k3=%.12e k4=%.12e delti*k=%.12e deltj*k=%.12e, xi-de*k=%.12e xj-de*k=%.12e res=%.12e k1234=%.12e,k1-2=%.12e,k3-4=%.12e\n",thetai,thetaj,k,k1,k2,k3,k4,delti[thetai]/k,delti[thetaj]/k,x[thetai]-delti[thetai]/k,x[thetaj]-delti[thetaj]/k, res,k1-k2-k3+k4,k1-k2,k3-k4); | fprintf(ficlog,"%d %d k=%d, k1=%.12e k2=%.12e k3=%.12e k4=%.12e delti*k=%.12e deltj*k=%.12e, xi-de*k=%.12e xj-de*k=%.12e res=%.12e k1234=%.12e,k1-2=%.12e,k3-4=%.12e\n",thetai,thetaj,k,k1,k2,k3,k4,delti[thetai]/k,delti[thetaj]/k,x[thetai]-delti[thetai]/k,x[thetaj]-delti[thetaj]/k, res,k1-k2-k3+k4,k1-k2,k3-k4); |
| } | } |
| Line 3945 void ludcmp(double **a, int n, int *indx | Line 4205 void ludcmp(double **a, int n, int *indx |
| big=0.0; | big=0.0; |
| for (j=1;j<=n;j++) | for (j=1;j<=n;j++) |
| if ((temp=fabs(a[i][j])) > big) big=temp; | if ((temp=fabs(a[i][j])) > big) big=temp; |
| if (big == 0.0) nrerror("Singular matrix in routine ludcmp"); | if (big == 0.0){ |
| printf(" Singular Hessian matrix at row %d:\n",i); | |
| for (j=1;j<=n;j++) { | |
| printf(" a[%d][%d]=%f,",i,j,a[i][j]); | |
| fprintf(ficlog," a[%d][%d]=%f,",i,j,a[i][j]); | |
| } | |
| fflush(ficlog); | |
| fclose(ficlog); | |
| nrerror("Singular matrix in routine ludcmp"); | |
| } | |
| vv[i]=1.0/big; | vv[i]=1.0/big; |
| } | } |
| for (j=1;j<=n;j++) { | for (j=1;j<=n;j++) { |
| Line 4011 void pstamp(FILE *fichier) | Line 4280 void pstamp(FILE *fichier) |
| fprintf(fichier,"# %s.%s\n#IMaCh version %s, %s\n#%s\n# %s", optionfilefiname,optionfilext,version,copyright, fullversion, strstart); | fprintf(fichier,"# %s.%s\n#IMaCh version %s, %s\n#%s\n# %s", optionfilefiname,optionfilext,version,copyright, fullversion, strstart); |
| } | } |
| int linreg(int ifi, int ila, int *no, const double x[], const double y[], double* a, double* b, double* r, double* sa, double * sb) { | |
| /* y=a+bx regression */ | |
| double sumx = 0.0; /* sum of x */ | |
| double sumx2 = 0.0; /* sum of x**2 */ | |
| double sumxy = 0.0; /* sum of x * y */ | |
| double sumy = 0.0; /* sum of y */ | |
| double sumy2 = 0.0; /* sum of y**2 */ | |
| double sume2; /* sum of square or residuals */ | |
| double yhat; | |
| double denom=0; | |
| int i; | |
| int ne=*no; | |
| for ( i=ifi, ne=0;i<=ila;i++) { | |
| if(!isfinite(x[i]) || !isfinite(y[i])){ | |
| /* printf(" x[%d]=%f, y[%d]=%f\n",i,x[i],i,y[i]); */ | |
| continue; | |
| } | |
| ne=ne+1; | |
| sumx += x[i]; | |
| sumx2 += x[i]*x[i]; | |
| sumxy += x[i] * y[i]; | |
| sumy += y[i]; | |
| sumy2 += y[i]*y[i]; | |
| denom = (ne * sumx2 - sumx*sumx); | |
| /* printf("ne=%d, i=%d,x[%d]=%f, y[%d]=%f sumx=%f, sumx2=%f, sumxy=%f, sumy=%f, sumy2=%f, denom=%f\n",ne,i,i,x[i],i,y[i], sumx, sumx2,sumxy, sumy, sumy2,denom); */ | |
| } | |
| denom = (ne * sumx2 - sumx*sumx); | |
| if (denom == 0) { | |
| // vertical, slope m is infinity | |
| *b = INFINITY; | |
| *a = 0; | |
| if (r) *r = 0; | |
| return 1; | |
| } | |
| *b = (ne * sumxy - sumx * sumy) / denom; | |
| *a = (sumy * sumx2 - sumx * sumxy) / denom; | |
| if (r!=NULL) { | |
| *r = (sumxy - sumx * sumy / ne) / /* compute correlation coeff */ | |
| sqrt((sumx2 - sumx*sumx/ne) * | |
| (sumy2 - sumy*sumy/ne)); | |
| } | |
| *no=ne; | |
| for ( i=ifi, ne=0;i<=ila;i++) { | |
| if(!isfinite(x[i]) || !isfinite(y[i])){ | |
| /* printf(" x[%d]=%f, y[%d]=%f\n",i,x[i],i,y[i]); */ | |
| continue; | |
| } | |
| ne=ne+1; | |
| yhat = y[i] - *a -*b* x[i]; | |
| sume2 += yhat * yhat ; | |
| denom = (ne * sumx2 - sumx*sumx); | |
| /* printf("ne=%d, i=%d,x[%d]=%f, y[%d]=%f sumx=%f, sumx2=%f, sumxy=%f, sumy=%f, sumy2=%f, denom=%f\n",ne,i,i,x[i],i,y[i], sumx, sumx2,sumxy, sumy, sumy2,denom); */ | |
| } | |
| *sb = sqrt(sume2/(ne-2)/(sumx2 - sumx * sumx /ne)); | |
| *sa= *sb * sqrt(sumx2/ne); | |
| return 0; | |
| } | |
| /************ Frequencies ********************/ | /************ Frequencies ********************/ |
| void freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \ | void freqsummary(char fileres[], double p[], double pstart[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \ |
| int *Tvaraff, int *invalidvarcomb, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[], \ | int *Tvaraff, int *invalidvarcomb, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[], \ |
| int firstpass, int lastpass, int stepm, int weightopt, char model[]) | int firstpass, int lastpass, int stepm, int weightopt, char model[]) |
| { /* Some frequencies */ | { /* Some frequencies as well as proposing some starting values */ |
| int i, m, jk, j1, bool, z1,j, k, iv; | int i, m, jk, j1, bool, z1,j, nj, nl, k, iv, jj=0, s1=1, s2=1; |
| int iind=0, iage=0; | int iind=0, iage=0; |
| int mi; /* Effective wave */ | int mi; /* Effective wave */ |
| int first; | int first; |
| double ***freq; /* Frequencies */ | double ***freq; /* Frequencies */ |
| double *x, *y, a,b,r, sa, sb; /* for regression, y=b+m*x and r is the correlation coefficient */ | |
| int no; | |
| double *meanq; | double *meanq; |
| double **meanqt; | double **meanqt; |
| double *pp, **prop, *posprop, *pospropt; | double *pp, **prop, *posprop, *pospropt; |
| Line 4030 void freqsummary(char fileres[], int ia | Line 4366 void freqsummary(char fileres[], int ia |
| double agebegin, ageend; | double agebegin, ageend; |
| pp=vector(1,nlstate); | pp=vector(1,nlstate); |
| prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE); | prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+4+AGEMARGE); |
| posprop=vector(1,nlstate); /* Counting the number of transition starting from a live state per age */ | posprop=vector(1,nlstate); /* Counting the number of transition starting from a live state per age */ |
| pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */ | pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */ |
| /* prop=matrix(1,nlstate,iagemin,iagemax+3); */ | /* prop=matrix(1,nlstate,iagemin,iagemax+3); */ |
| Line 4044 void freqsummary(char fileres[], int ia | Line 4380 void freqsummary(char fileres[], int ia |
| fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp); | fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp); |
| exit(0); | exit(0); |
| } | } |
| strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm")); | strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm")); |
| if((ficresphtm=fopen(fileresphtm,"w"))==NULL) { | if((ficresphtm=fopen(fileresphtm,"w"))==NULL) { |
| printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno)); | printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno)); |
| Line 4054 void freqsummary(char fileres[], int ia | Line 4390 void freqsummary(char fileres[], int ia |
| } | } |
| else{ | else{ |
| fprintf(ficresphtm,"<html><head>\n<title>IMaCh PHTM_ %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \ | fprintf(ficresphtm,"<html><head>\n<title>IMaCh PHTM_ %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \ |
| <hr size=\"2\" color=\"#EC5E5E\"> \n\ | <hr size=\"2\" color=\"#EC5E5E\"> \n \ |
| Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\ | Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\ |
| fileresphtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model); | fileresphtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model); |
| } | } |
| fprintf(ficresphtm,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies and prevalence by age at begin of transition</h4>\n",fileresphtm, fileresphtm); | fprintf(ficresphtm,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies and prevalence by age at begin of transition and dummy covariate value at beginning of transition</h4>\n",fileresphtm, fileresphtm); |
| strcpy(fileresphtmfr,subdirfext(optionfilefiname,"PHTMFR_",".htm")); | strcpy(fileresphtmfr,subdirfext(optionfilefiname,"PHTMFR_",".htm")); |
| if((ficresphtmfr=fopen(fileresphtmfr,"w"))==NULL) { | if((ficresphtmfr=fopen(fileresphtmfr,"w"))==NULL) { |
| printf("Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno)); | printf("Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno)); |
| fprintf(ficlog,"Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno)); | fprintf(ficlog,"Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno)); |
| fflush(ficlog); | fflush(ficlog); |
| exit(70); | exit(70); |
| } | } else{ |
| else{ | |
| fprintf(ficresphtmfr,"<html><head>\n<title>IMaCh PHTM_Frequency table %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \ | fprintf(ficresphtmfr,"<html><head>\n<title>IMaCh PHTM_Frequency table %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \ |
| <hr size=\"2\" color=\"#EC5E5E\"> \n\ | <hr size=\"2\" color=\"#EC5E5E\"> \n \ |
| Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\ | Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\ |
| fileresphtmfr,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model); | fileresphtmfr,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model); |
| } | } |
| fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions by age at begin of transition </h4>Unknown status is -1<br/>\n",fileresphtmfr, fileresphtmfr); | fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions of the model, by age at begin of transition, and covariate value at the begin of transition (if the covariate is a varying covariate) </h4>Unknown status is -1<br/>\n",fileresphtmfr, fileresphtmfr); |
| freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+3+AGEMARGE); | y= vector(iagemin-AGEMARGE,iagemax+4+AGEMARGE); |
| x= vector(iagemin-AGEMARGE,iagemax+4+AGEMARGE); | |
| freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+4+AGEMARGE); | |
| j1=0; | j1=0; |
| /* j=ncoveff; /\* Only fixed dummy covariates *\/ */ | /* j=ncoveff; /\* Only fixed dummy covariates *\/ */ |
| j=cptcoveff; /* Only dummy covariates of the model */ | j=cptcoveff; /* Only dummy covariates of the model */ |
| if (cptcovn<1) {j=1;ncodemax[1]=1;} | if (cptcovn<1) {j=1;ncodemax[1]=1;} |
| first=1; | |
| /* Detects if a combination j1 is empty: for a multinomial variable like 3 education levels: | /* Detects if a combination j1 is empty: for a multinomial variable like 3 education levels: |
| reference=low_education V1=0,V2=0 | reference=low_education V1=0,V2=0 |
| med_educ V1=1 V2=0, | med_educ V1=1 V2=0, |
| high_educ V1=0 V2=1 | high_educ V1=0 V2=1 |
| Then V1=1 and V2=1 is a noisy combination that we want to exclude for the list 2**cptcoveff | Then V1=1 and V2=1 is a noisy combination that we want to exclude for the list 2**cptcoveff |
| */ | */ |
| dateintsum=0; | |
| k2cpt=0; | |
| for (j1 = 1; j1 <= (int) pow(2,j); j1++){ /* Loop on covariates combination in order of model, excluding quantitatives V4=0, V3=0 for example, fixed or varying covariates */ | if(cptcoveff == 0 ) |
| posproptt=0.; | nl=1; /* Constant and age model only */ |
| /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]); | else |
| scanf("%d", i);*/ | nl=2; |
| for (i=-5; i<=nlstate+ndeath; i++) | |
| for (jk=-5; jk<=nlstate+ndeath; jk++) | /* if a constant only model, one pass to compute frequency tables and to write it on ficresp */ |
| for(m=iagemin; m <= iagemax+3; m++) | /* Loop on nj=1 or 2 if dummy covariates j!=0 |
| freq[i][jk][m]=0; | * Loop on j1(1 to 2**cptcoveff) covariate combination |
| * freq[s1][s2][iage] =0. | |
| for (i=1; i<=nlstate; i++) { | * Loop on iind |
| for(m=iagemin; m <= iagemax+3; m++) | * ++freq[s1][s2][iage] weighted |
| prop[i][m]=0; | * end iind |
| posprop[i]=0; | * if covariate and j!0 |
| pospropt[i]=0; | * headers Variable on one line |
| } | * endif cov j!=0 |
| /* for (z1=1; z1<= nqfveff; z1++) { */ | * header of frequency table by age |
| /* meanq[z1]+=0.; */ | * Loop on age |
| /* for(m=1;m<=lastpass;m++){ */ | * pp[s1]+=freq[s1][s2][iage] weighted |
| /* meanqt[m][z1]=0.; */ | * pos+=freq[s1][s2][iage] weighted |
| /* } */ | * Loop on s1 initial state |
| /* } */ | * fprintf(ficresp |
| * end s1 | |
| dateintsum=0; | * end age |
| k2cpt=0; | * if j!=0 computes starting values |
| /* For that combination of covariate j1, we count and print the frequencies in one pass */ | * end compute starting values |
| for (iind=1; iind<=imx; iind++) { /* For each individual iind */ | * end j1 |
| bool=1; | * end nl |
| if(anyvaryingduminmodel==0){ /* If All fixed covariates */ | */ |
| if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ | for (nj = 1; nj <= nl; nj++){ /* nj= 1 constant model, nl number of loops. */ |
| /* for (z1=1; z1<= nqfveff; z1++) { */ | if(nj==1) |
| /* meanq[z1]+=coqvar[Tvar[z1]][iind]; /\* Computes mean of quantitative with selected filter *\/ */ | j=0; /* First pass for the constant */ |
| /* } */ | else{ |
| for (z1=1; z1<=cptcoveff; z1++) { | j=cptcoveff; /* Other passes for the covariate values */ |
| /* if(Tvaraff[z1] ==-20){ */ | } |
| /* /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */ | first=1; |
| /* }else if(Tvaraff[z1] ==-10){ */ | for (j1 = 1; j1 <= (int) pow(2,j); j1++){ /* Loop on all covariates combination of the model, excluding quantitatives, V4=0, V3=0 for example, fixed or varying covariates */ |
| /* /\* sumnew+=coqvar[z1][iind]; *\/ */ | posproptt=0.; |
| /* }else */ | /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]); |
| if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){ | scanf("%d", i);*/ |
| /* Tests if this individual iind responded to j1 (V4=1 V3=0) */ | for (i=-5; i<=nlstate+ndeath; i++) |
| bool=0; | for (s2=-5; s2<=nlstate+ndeath; s2++) |
| /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n", | for(m=iagemin; m <= iagemax+3; m++) |
| bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1), | freq[i][s2][m]=0; |
| j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/ | |
| /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/ | for (i=1; i<=nlstate; i++) { |
| } /* Onlyf fixed */ | for(m=iagemin; m <= iagemax+3; m++) |
| } /* end z1 */ | prop[i][m]=0; |
| } /* cptcovn > 0 */ | posprop[i]=0; |
| } /* end any */ | pospropt[i]=0; |
| if (bool==1){ /* We selected an individual iind satisfying combination j1 or all fixed */ | } |
| /* for(m=firstpass; m<=lastpass; m++){ */ | /* for (z1=1; z1<= nqfveff; z1++) { */ |
| for(mi=1; mi<wav[iind];mi++){ /* For that wave */ | /* meanq[z1]+=0.; */ |
| m=mw[mi][iind]; | /* for(m=1;m<=lastpass;m++){ */ |
| if(anyvaryingduminmodel==1){ /* Some are varying covariates */ | /* meanqt[m][z1]=0.; */ |
| for (z1=1; z1<=cptcoveff; z1++) { | /* } */ |
| if( Fixed[Tmodelind[z1]]==1){ | /* } */ |
| iv= Tvar[Tmodelind[z1]]-ncovcol-nqv; | |
| if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) /* iv=1 to ntv, right modality */ | /* dateintsum=0; */ |
| bool=0; | /* k2cpt=0; */ |
| }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */ | |
| if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) { | /* For that combination of covariates j1 (V4=1 V3=0 for example), we count and print the frequencies in one pass */ |
| bool=0; | for (iind=1; iind<=imx; iind++) { /* For each individual iind */ |
| bool=1; | |
| if(j !=0){ | |
| if(anyvaryingduminmodel==0){ /* If All fixed covariates */ | |
| if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ | |
| /* for (z1=1; z1<= nqfveff; z1++) { */ | |
| /* meanq[z1]+=coqvar[Tvar[z1]][iind]; /\* Computes mean of quantitative with selected filter *\/ */ | |
| /* } */ | |
| 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 */ | |
| if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,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 */ | |
| /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n", | |
| bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1), | |
| j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/ | |
| /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/ | |
| } /* Onlyf fixed */ | |
| } /* end z1 */ | |
| } /* cptcovn > 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 */ | |
| /* for(m=firstpass; m<=lastpass; m++){ */ | |
| for(mi=1; mi<wav[iind];mi++){ /* For that wave */ | |
| m=mw[mi][iind]; | |
| if(j!=0){ | |
| if(anyvaryingduminmodel==1){ /* Some are varying covariates */ | |
| for (z1=1; z1<=cptcoveff; z1++) { | |
| if( Fixed[Tmodelind[z1]]==1){ | |
| iv= Tvar[Tmodelind[z1]]-ncovcol-nqv; | |
| if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,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. */ | |
| bool=0; /* not selected */ | |
| }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */ | |
| if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) { | |
| bool=0; | |
| } | |
| } | |
| } | } |
| }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop */ | |
| } /* end j==0 */ | |
| /* bool =0 we keep that guy which corresponds to the combination of dummy values */ | |
| if(bool==1){ | |
| /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind] | |
| and mw[mi+1][iind]. dh depends on stepm. */ | |
| agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/ | |
| ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */ | |
| if(m >=firstpass && m <=lastpass){ | |
| k2=anint[m][iind]+(mint[m][iind]/12.); | |
| /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/ | |
| if(agev[m][iind]==0) agev[m][iind]=iagemax+1; /* All ages equal to 0 are in iagemax+1 */ | |
| if(agev[m][iind]==1) agev[m][iind]=iagemax+2; /* All ages equal to 1 are in iagemax+2 */ | |
| if (s[m][iind]>0 && s[m][iind]<=nlstate) /* If status at wave m is known and a live state */ | |
| prop[s[m][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */ | |
| if (m<lastpass) { | |
| /* if(s[m][iind]==4 && s[m+1][iind]==4) */ | |
| /* printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */ | |
| if(s[m][iind]==-1) | |
| printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.)); | |
| freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */ | |
| /* if((int)agev[m][iind] == 55) */ | |
| /* printf("j=%d, j1=%d Age %d, iind=%d, num=%09ld m=%d\n",j,j1,(int)agev[m][iind],iind, num[iind],m); */ | |
| /* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */ | |
| freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */ | |
| } | |
| } /* end if between passes */ | |
| if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99) && (j==0)) { | |
| dateintsum=dateintsum+k2; /* on all covariates ?*/ | |
| k2cpt++; | |
| /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */ | |
| } | } |
| }else{ | |
| bool=1; | |
| }/* end bool 2 */ | |
| } /* end m */ | |
| } /* end bool */ | |
| } /* end iind = 1 to imx */ | |
| /* prop[s][age] is feeded for any initial and valid live state as well as | |
| freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */ | |
| /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ | |
| if(cptcoveff==0 && nj==1) /* no covariate and first pass */ | |
| pstamp(ficresp); | |
| if (cptcoveff>0 && j!=0){ | |
| pstamp(ficresp); | |
| printf( "\n#********** Variable "); | |
| fprintf(ficresp, "\n#********** Variable "); | |
| fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); | |
| fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); | |
| fprintf(ficlog, "\n#********** Variable "); | |
| for (z1=1; z1<=cptcoveff; z1++){ | |
| if(!FixedV[Tvaraff[z1]]){ | |
| printf( "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| fprintf(ficresp, "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| fprintf(ficresphtm, "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| fprintf(ficresphtmfr, "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| fprintf(ficlog, "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| }else{ | |
| printf( "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| fprintf(ficresp, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| fprintf(ficresphtm, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| fprintf(ficresphtmfr, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| fprintf(ficlog, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| } | |
| } | |
| printf( "**********\n#"); | |
| fprintf(ficresp, "**********\n#"); | |
| fprintf(ficresphtm, "**********</h3>\n"); | |
| fprintf(ficresphtmfr, "**********</h3>\n"); | |
| fprintf(ficlog, "**********\n"); | |
| } | |
| fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">"); | |
| if((cptcoveff==0 && nj==1)|| nj==2 ) /* no covariate and first pass */ | |
| fprintf(ficresp, " Age"); | |
| if(nj==2) for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresp, " V%d=%d",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| for(i=1; i<=nlstate;i++) { | |
| if((cptcoveff==0 && nj==1)|| nj==2 ) fprintf(ficresp," Prev(%d) N(%d) N ",i,i); | |
| fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i); | |
| } | |
| if((cptcoveff==0 && nj==1)|| nj==2 ) fprintf(ficresp, "\n"); | |
| fprintf(ficresphtm, "\n"); | |
| /* Header of frequency table by age */ | |
| fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">"); | |
| fprintf(ficresphtmfr,"<th>Age</th> "); | |
| for(s2=-1; s2 <=nlstate+ndeath; s2++){ | |
| for(m=-1; m <=nlstate+ndeath; m++){ | |
| if(s2!=0 && m!=0) | |
| fprintf(ficresphtmfr,"<th>%d%d</th> ",s2,m); | |
| } | |
| } | |
| fprintf(ficresphtmfr, "\n"); | |
| /* For each age */ | |
| for(iage=iagemin; iage <= iagemax+3; iage++){ | |
| fprintf(ficresphtm,"<tr>"); | |
| if(iage==iagemax+1){ | |
| fprintf(ficlog,"1"); | |
| fprintf(ficresphtmfr,"<tr><th>0</th> "); | |
| }else if(iage==iagemax+2){ | |
| fprintf(ficlog,"0"); | |
| fprintf(ficresphtmfr,"<tr><th>Unknown</th> "); | |
| }else if(iage==iagemax+3){ | |
| fprintf(ficlog,"Total"); | |
| fprintf(ficresphtmfr,"<tr><th>Total</th> "); | |
| }else{ | |
| if(first==1){ | |
| first=0; | |
| printf("See log file for details...\n"); | |
| } | |
| fprintf(ficresphtmfr,"<tr><th>%d</th> ",iage); | |
| fprintf(ficlog,"Age %d", iage); | |
| } | |
| for(s1=1; s1 <=nlstate ; s1++){ | |
| for(m=-1, pp[s1]=0; m <=nlstate+ndeath ; m++) | |
| pp[s1] += freq[s1][m][iage]; | |
| } | |
| for(s1=1; s1 <=nlstate ; s1++){ | |
| for(m=-1, pos=0; m <=0 ; m++) | |
| pos += freq[s1][m][iage]; | |
| if(pp[s1]>=1.e-10){ | |
| if(first==1){ | |
| printf(" %d.=%.0f loss[%d]=%.1f%%",s1,pp[s1],s1,100*pos/pp[s1]); | |
| } | |
| fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",s1,pp[s1],s1,100*pos/pp[s1]); | |
| }else{ | |
| if(first==1) | |
| printf(" %d.=%.0f loss[%d]=NaNQ%%",s1,pp[s1],s1); | |
| fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",s1,pp[s1],s1); | |
| } | |
| } | |
| for(s1=1; s1 <=nlstate ; s1++){ | |
| /* posprop[s1]=0; */ | |
| for(m=0, pp[s1]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */ | |
| pp[s1] += freq[s1][m][iage]; | |
| } /* pp[s1] is the total number of transitions starting from state s1 and any ending status until this age */ | |
| for(s1=1,pos=0, pospropta=0.; s1 <=nlstate ; s1++){ | |
| pos += pp[s1]; /* pos is the total number of transitions until this age */ | |
| posprop[s1] += prop[s1][iage]; /* prop is the number of transitions from a live state | |
| from s1 at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */ | |
| pospropta += prop[s1][iage]; /* prop is the number of transitions from a live state | |
| from s1 at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */ | |
| } | |
| /* Writing ficresp */ | |
| 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<=cptcoveff; z1++) fprintf(ficresp, " %d %d",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| } | |
| } | |
| for(s1=1; s1 <=nlstate ; s1++){ | |
| if(pos>=1.e-5){ | |
| if(first==1) | |
| printf(" %d.=%.0f prev[%d]=%.1f%%",s1,pp[s1],s1,100*pp[s1]/pos); | |
| fprintf(ficlog," %d.=%.0f prev[%d]=%.1f%%",s1,pp[s1],s1,100*pp[s1]/pos); | |
| }else{ | |
| if(first==1) | |
| printf(" %d.=%.0f prev[%d]=NaNQ%%",s1,pp[s1],s1); | |
| fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",s1,pp[s1],s1); | |
| } | |
| if( iage <= iagemax){ | |
| if(pos>=1.e-5){ | |
| 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); | |
| } | |
| fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",iage,prop[s1][iage]/pospropta, prop[s1][iage],pospropta); | |
| /*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((cptcoveff==0 && nj==1)|| nj==2 ) fprintf(ficresp," NaNq %.0f %.0f",prop[s1][iage],pospropta); | |
| fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",iage, prop[s1][iage],pospropta); | |
| } | } |
| }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop */ | } |
| /* bool =0 we keep that guy which corresponds to the combination of dummy values */ | pospropt[s1] +=posprop[s1]; |
| if(bool==1){ | } /* end loop s1 */ |
| /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind] | /* pospropt=0.; */ |
| and mw[mi+1][iind]. dh depends on stepm. */ | for(s1=-1; s1 <=nlstate+ndeath; s1++){ |
| agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/ | for(m=-1; m <=nlstate+ndeath; m++){ |
| ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */ | if(freq[s1][m][iage] !=0 ) { /* minimizing output */ |
| if(m >=firstpass && m <=lastpass){ | if(first==1){ |
| k2=anint[m][iind]+(mint[m][iind]/12.); | printf(" %d%d=%.0f",s1,m,freq[s1][m][iage]); |
| /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/ | |
| if(agev[m][iind]==0) agev[m][iind]=iagemax+1; /* All ages equal to 0 are in iagemax+1 */ | |
| if(agev[m][iind]==1) agev[m][iind]=iagemax+2; /* All ages equal to 1 are in iagemax+2 */ | |
| if (s[m][iind]>0 && s[m][iind]<=nlstate) /* If status at wave m is known and a live state */ | |
| prop[s[m][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */ | |
| if (m<lastpass) { | |
| /* if(s[m][iind]==4 && s[m+1][iind]==4) */ | |
| /* printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */ | |
| if(s[m][iind]==-1) | |
| printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.)); | |
| freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */ | |
| /* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */ | |
| freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */ | |
| } | } |
| } /* end if between passes */ | /* printf(" %d%d=%.0f",s1,m,freq[s1][m][iage]); */ |
| if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) { | fprintf(ficlog," %d%d=%.0f",s1,m,freq[s1][m][iage]); |
| dateintsum=dateintsum+k2; | |
| k2cpt++; | |
| /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */ | |
| } | } |
| } /* end bool 2 */ | if(s1!=0 && m!=0) |
| } /* end m */ | fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[s1][m][iage]); |
| } /* end bool */ | } |
| } /* end iind = 1 to imx */ | } /* end loop s1 */ |
| /* prop[s][age] is feeded for any initial and valid live state as well as | posproptt=0.; |
| freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */ | for(s1=1; s1 <=nlstate; s1++){ |
| posproptt += pospropt[s1]; | |
| } | |
| /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ | fprintf(ficresphtmfr,"</tr>\n "); |
| pstamp(ficresp); | fprintf(ficresphtm,"</tr>\n"); |
| /* if (ncoveff>0) { */ | if((cptcoveff==0 && nj==1)|| nj==2 ) { |
| if (cptcoveff>0) { | if(iage <= iagemax) |
| fprintf(ficresp, "\n#********** Variable "); | fprintf(ficresp,"\n"); |
| fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); | } |
| fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); | if(first==1) |
| for (z1=1; z1<=cptcoveff; z1++){ | printf("Others in log...\n"); |
| fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | fprintf(ficlog,"\n"); |
| fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | } /* end loop age iage */ |
| fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| } | fprintf(ficresphtm,"<tr><th>Tot</th>"); |
| fprintf(ficresp, "**********\n#"); | for(s1=1; s1 <=nlstate ; s1++){ |
| fprintf(ficresphtm, "**********</h3>\n"); | if(posproptt < 1.e-5){ |
| fprintf(ficresphtmfr, "**********</h3>\n"); | fprintf(ficresphtm,"<td>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[s1],posproptt); |
| fprintf(ficlog, "\n#********** Variable "); | }else{ |
| for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | fprintf(ficresphtm,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[s1]/posproptt,pospropt[s1],posproptt); |
| fprintf(ficlog, "**********\n"); | } |
| } | |
| fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">"); | |
| for(i=1; i<=nlstate;i++) { | |
| fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i); | |
| fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i); | |
| } | |
| fprintf(ficresp, "\n"); | |
| fprintf(ficresphtm, "\n"); | |
| /* Header of frequency table by age */ | |
| fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">"); | |
| fprintf(ficresphtmfr,"<th>Age</th> "); | |
| for(jk=-1; jk <=nlstate+ndeath; jk++){ | |
| for(m=-1; m <=nlstate+ndeath; m++){ | |
| if(jk!=0 && m!=0) | |
| fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m); | |
| } | |
| } | |
| fprintf(ficresphtmfr, "\n"); | |
| /* For each age */ | |
| for(iage=iagemin; iage <= iagemax+3; iage++){ | |
| fprintf(ficresphtm,"<tr>"); | |
| if(iage==iagemax+1){ | |
| fprintf(ficlog,"1"); | |
| fprintf(ficresphtmfr,"<tr><th>0</th> "); | |
| }else if(iage==iagemax+2){ | |
| fprintf(ficlog,"0"); | |
| fprintf(ficresphtmfr,"<tr><th>Unknown</th> "); | |
| }else if(iage==iagemax+3){ | |
| fprintf(ficlog,"Total"); | |
| fprintf(ficresphtmfr,"<tr><th>Total</th> "); | |
| }else{ | |
| if(first==1){ | |
| first=0; | |
| printf("See log file for details...\n"); | |
| } | |
| fprintf(ficresphtmfr,"<tr><th>%d</th> ",iage); | |
| fprintf(ficlog,"Age %d", iage); | |
| } | |
| for(jk=1; jk <=nlstate ; jk++){ | |
| for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++) | |
| pp[jk] += freq[jk][m][iage]; | |
| } | |
| for(jk=1; jk <=nlstate ; jk++){ | |
| for(m=-1, pos=0; m <=0 ; m++) | |
| pos += freq[jk][m][iage]; | |
| if(pp[jk]>=1.e-10){ | |
| if(first==1){ | |
| printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]); | |
| } | |
| fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]); | |
| }else{ | |
| if(first==1) | |
| printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk); | |
| fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk); | |
| } | |
| } | |
| for(jk=1; jk <=nlstate ; jk++){ | |
| /* posprop[jk]=0; */ | |
| for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */ | |
| pp[jk] += freq[jk][m][iage]; | |
| } /* pp[jk] is the total number of transitions starting from state jk and any ending status until this age */ | |
| for(jk=1,pos=0, pospropta=0.; jk <=nlstate ; jk++){ | |
| pos += pp[jk]; /* pos is the total number of transitions until this age */ | |
| posprop[jk] += prop[jk][iage]; /* prop is the number of transitions from a live state | |
| from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */ | |
| pospropta += prop[jk][iage]; /* prop is the number of transitions from a live state | |
| from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */ | |
| } | |
| for(jk=1; jk <=nlstate ; jk++){ | |
| if(pos>=1.e-5){ | |
| if(first==1) | |
| printf(" %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos); | |
| fprintf(ficlog," %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos); | |
| }else{ | |
| if(first==1) | |
| printf(" %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk); | |
| fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk); | |
| } | |
| if( iage <= iagemax){ | |
| if(pos>=1.e-5){ | |
| fprintf(ficresp," %d %.5f %.0f %.0f",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta); | |
| fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta); | |
| /*probs[iage][jk][j1]= pp[jk]/pos;*/ | |
| /*printf("\niage=%d jk=%d j1=%d %.5f %.0f %.0f %f",iage,jk,j1,pp[jk]/pos, pp[jk],pos,probs[iage][jk][j1]);*/ | |
| } | |
| else{ | |
| fprintf(ficresp," %d NaNq %.0f %.0f",iage,prop[jk][iage],pospropta); | |
| fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",iage, prop[jk][iage],pospropta); | |
| } | |
| } | |
| pospropt[jk] +=posprop[jk]; | |
| } /* end loop jk */ | |
| /* pospropt=0.; */ | |
| for(jk=-1; jk <=nlstate+ndeath; jk++){ | |
| for(m=-1; m <=nlstate+ndeath; m++){ | |
| if(freq[jk][m][iage] !=0 ) { /* minimizing output */ | |
| if(first==1){ | |
| printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]); | |
| } | |
| fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]); | |
| } | |
| if(jk!=0 && m!=0) | |
| fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][iage]); | |
| } | |
| } /* end loop jk */ | |
| posproptt=0.; | |
| for(jk=1; jk <=nlstate; jk++){ | |
| posproptt += pospropt[jk]; | |
| } | |
| fprintf(ficresphtmfr,"</tr>\n "); | |
| if(iage <= iagemax){ | |
| fprintf(ficresp,"\n"); | |
| fprintf(ficresphtm,"</tr>\n"); | |
| } | } |
| if(first==1) | fprintf(ficresphtm,"</tr>\n"); |
| printf("Others in log...\n"); | fprintf(ficresphtm,"</table>\n"); |
| fprintf(ficlog,"\n"); | fprintf(ficresphtmfr,"</table>\n"); |
| } /* end loop age iage */ | |
| fprintf(ficresphtm,"<tr><th>Tot</th>"); | |
| for(jk=1; jk <=nlstate ; jk++){ | |
| if(posproptt < 1.e-5){ | if(posproptt < 1.e-5){ |
| fprintf(ficresphtm,"<td>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[jk],posproptt); | fprintf(ficresphtm,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1); |
| fprintf(ficresphtmfr,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1); | |
| fprintf(ficlog,"# This combination (%d) is not valid and no result will be produced\n",j1); | |
| printf("# This combination (%d) is not valid and no result will be produced\n",j1); | |
| invalidvarcomb[j1]=1; | |
| }else{ | }else{ |
| fprintf(ficresphtm,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt); | fprintf(ficresphtm,"\n <p> This combination (%d) is valid and result will be produced.</p>",j1); |
| invalidvarcomb[j1]=0; | |
| } | } |
| } | fprintf(ficresphtmfr,"</table>\n"); |
| fprintf(ficresphtm,"</tr>\n"); | fprintf(ficlog,"\n"); |
| fprintf(ficresphtm,"</table>\n"); | if(j!=0){ |
| fprintf(ficresphtmfr,"</table>\n"); | printf("#Freqsummary: Starting values for combination j1=%d:\n", j1); |
| if(posproptt < 1.e-5){ | for(i=1,s1=1; i <=nlstate; i++){ |
| fprintf(ficresphtm,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1); | for(k=1; k <=(nlstate+ndeath); k++){ |
| fprintf(ficresphtmfr,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1); | if (k != i) { |
| fprintf(ficres,"\n This combination (%d) is not valid and no result will be produced\n\n",j1); | for(jj=1; jj <=ncovmodel; jj++){ /* For counting s1 */ |
| invalidvarcomb[j1]=1; | if(jj==1){ /* Constant case (in fact cste + age) */ |
| }else{ | if(j1==1){ /* All dummy covariates to zero */ |
| fprintf(ficresphtm,"\n <p> This combination (%d) is valid and result will be produced.</p>",j1); | freq[i][k][iagemax+4]=freq[i][k][iagemax+3]; /* Stores case 0 0 0 */ |
| invalidvarcomb[j1]=0; | freq[i][i][iagemax+4]=freq[i][i][iagemax+3]; /* Stores case 0 0 0 */ |
| } | printf("%d%d ",i,k); |
| fprintf(ficresphtmfr,"</table>\n"); | fprintf(ficlog,"%d%d ",i,k); |
| } /* end selected combination of covariate j1 */ | printf("%12.7f ln(%.0f/%.0f)= %f, OR=%f sd=%f \n",p[s1],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]),freq[i][k][iagemax+3]/freq[i][i][iagemax+3], sqrt(1/freq[i][k][iagemax+3]+1/freq[i][i][iagemax+3])); |
| dateintmean=dateintsum/k2cpt; | fprintf(ficlog,"%12.7f ln(%.0f/%.0f)= %12.7f \n",p[s1],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3])); |
| pstart[s1]= log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]); | |
| fclose(ficresp); | } |
| fclose(ficresphtm); | }else if((j1==1) && (jj==2 || nagesqr==1)){ /* age or age*age parameter without covariate V4*age (to be done later) */ |
| fclose(ficresphtmfr); | for(iage=iagemin; iage <= iagemax+3; iage++){ |
| free_vector(meanq,1,nqfveff); | x[iage]= (double)iage; |
| free_matrix(meanqt,1,lastpass,1,nqtveff); | y[iage]= log(freq[i][k][iage]/freq[i][i][iage]); |
| free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE); | /* printf("i=%d, k=%d, s1=%d, j1=%d, jj=%d, y[%d]=%f\n",i,k,s1,j1,jj, iage, y[iage]); */ |
| free_vector(pospropt,1,nlstate); | } |
| free_vector(posprop,1,nlstate); | linreg(iagemin,iagemax,&no,x,y,&a,&b,&r, &sa, &sb ); /* y= a+b*x with standard errors */ |
| free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE); | pstart[s1]=b; |
| free_vector(pp,1,nlstate); | pstart[s1-1]=a; |
| /* End of freqsummary */ | }else if( j1!=1 && (j1==2 || (log(j1-1.)/log(2.)-(int)(log(j1-1.)/log(2.))) <0.010) && ( TvarsDind[(int)(log(j1-1.)/log(2.))+1]+2+nagesqr == jj) && Dummy[jj-2-nagesqr]==0){ /* We want only if the position, jj, in model corresponds to unique covariate equal to 1 in j1 combination */ |
| } | printf("j1=%d, jj=%d, (int)(log(j1-1.)/log(2.))+1=%d, TvarsDind[(int)(log(j1-1.)/log(2.))+1]=%d\n",j1, jj,(int)(log(j1-1.)/log(2.))+1,TvarsDind[(int)(log(j1-1.)/log(2.))+1]); |
| printf("j1=%d, jj=%d, (log(j1-1.)/log(2.))+1=%f, TvarsDind[(int)(log(j1-1.)/log(2.))+1]=%d\n",j1, jj,(log(j1-1.)/log(2.))+1,TvarsDind[(int)(log(j1-1.)/log(2.))+1]); | |
| /************ Prevalence ********************/ | pstart[s1]= log((freq[i][k][iagemax+3]/freq[i][i][iagemax+3])/(freq[i][k][iagemax+4]/freq[i][i][iagemax+4])); |
| void prevalence(double ***probs, double agemin, double agemax, int **s, double **agev, int nlstate, int imx, int *Tvar, int **nbcode, int *ncodemax,double **mint,double **anint, double dateprev1,double dateprev2, int firstpass, int lastpass) | printf("%d%d ",i,k); |
| { | fprintf(ficlog,"%d%d ",i,k); |
| /* Compute observed prevalence between dateprev1 and dateprev2 by counting the number of people | printf("s1=%d,i=%d,k=%d,p[%d]=%12.7f ln((%.0f/%.0f)/(%.0f/%.0f))= %f, OR=%f sd=%f \n",s1,i,k,s1,p[s1],freq[i][k][iagemax+3],freq[i][i][iagemax+3],freq[i][k][iagemax+4],freq[i][i][iagemax+4], log((freq[i][k][iagemax+3]/freq[i][i][iagemax+3])/(freq[i][k][iagemax+4]/freq[i][i][iagemax+4])),(freq[i][k][iagemax+3]/freq[i][i][iagemax+3])/(freq[i][k][iagemax+4]/freq[i][i][iagemax+4]), sqrt(1/freq[i][k][iagemax+3]+1/freq[i][i][iagemax+3]+1/freq[i][k][iagemax+4]+1/freq[i][i][iagemax+4])); |
| in each health status at the date of interview (if between dateprev1 and dateprev2). | }else{ /* Other cases, like quantitative fixed or varying covariates */ |
| We still use firstpass and lastpass as another selection. | ; |
| */ | } |
| /* printf("%12.7f )", param[i][jj][k]); */ | |
| int i, m, jk, j1, bool, z1,j, iv; | /* fprintf(ficlog,"%12.7f )", param[i][jj][k]); */ |
| s1++; | |
| } /* end jj */ | |
| } /* end k!= i */ | |
| } /* end k */ | |
| } /* end i, s1 */ | |
| } /* end j !=0 */ | |
| } /* end selected combination of covariate j1 */ | |
| if(j==0){ /* We can estimate starting values from the occurences in each case */ | |
| printf("#Freqsummary: Starting values for the constants:\n"); | |
| fprintf(ficlog,"\n"); | |
| for(i=1,s1=1; i <=nlstate; i++){ | |
| for(k=1; k <=(nlstate+ndeath); k++){ | |
| if (k != i) { | |
| printf("%d%d ",i,k); | |
| fprintf(ficlog,"%d%d ",i,k); | |
| for(jj=1; jj <=ncovmodel; jj++){ | |
| pstart[s1]=p[s1]; /* Setting pstart to p values by default */ | |
| if(jj==1){ /* Age has to be done */ | |
| pstart[s1]= log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]); | |
| printf("%12.7f ln(%.0f/%.0f)= %12.7f ",p[s1],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3])); | |
| fprintf(ficlog,"%12.7f ln(%.0f/%.0f)= %12.7f ",p[s1],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3])); | |
| } | |
| /* printf("%12.7f )", param[i][jj][k]); */ | |
| /* fprintf(ficlog,"%12.7f )", param[i][jj][k]); */ | |
| s1++; | |
| } | |
| printf("\n"); | |
| fprintf(ficlog,"\n"); | |
| } | |
| } | |
| } | |
| printf("#Freqsummary\n"); | |
| fprintf(ficlog,"\n"); | |
| for(s1=-1; s1 <=nlstate+ndeath; s1++){ | |
| for(s2=-1; s2 <=nlstate+ndeath; s2++){ | |
| /* param[i]|j][k]= freq[s1][s2][iagemax+3] */ | |
| printf(" %d%d=%.0f",s1,s2,freq[s1][s2][iagemax+3]); | |
| fprintf(ficlog," %d%d=%.0f",s1,s2,freq[s1][s2][iagemax+3]); | |
| /* if(freq[s1][s2][iage] !=0 ) { /\* minimizing output *\/ */ | |
| /* printf(" %d%d=%.0f",s1,s2,freq[s1][s2][iagemax+3]); */ | |
| /* fprintf(ficlog," %d%d=%.0f",s1,s2,freq[s1][s2][iagemax+3]); */ | |
| /* } */ | |
| } | |
| } /* end loop s1 */ | |
| printf("\n"); | |
| fprintf(ficlog,"\n"); | |
| } /* end j=0 */ | |
| } /* end j */ | |
| if(mle == -2){ /* We want to use these values as starting values */ | |
| for(i=1, jk=1; i <=nlstate; i++){ | |
| for(j=1; j <=nlstate+ndeath; j++){ | |
| if(j!=i){ | |
| /*ca[0]= k+'a'-1;ca[1]='\0';*/ | |
| printf("%1d%1d",i,j); | |
| fprintf(ficparo,"%1d%1d",i,j); | |
| for(k=1; k<=ncovmodel;k++){ | |
| /* printf(" %lf",param[i][j][k]); */ | |
| /* fprintf(ficparo," %lf",param[i][j][k]); */ | |
| p[jk]=pstart[jk]; | |
| printf(" %f ",pstart[jk]); | |
| fprintf(ficparo," %f ",pstart[jk]); | |
| jk++; | |
| } | |
| printf("\n"); | |
| fprintf(ficparo,"\n"); | |
| } | |
| } | |
| } | |
| } /* end mle=-2 */ | |
| dateintmean=dateintsum/k2cpt; | |
| fclose(ficresp); | |
| fclose(ficresphtm); | |
| fclose(ficresphtmfr); | |
| free_vector(meanq,1,nqfveff); | |
| free_matrix(meanqt,1,lastpass,1,nqtveff); | |
| free_vector(x, iagemin-AGEMARGE, iagemax+4+AGEMARGE); | |
| free_vector(y, iagemin-AGEMARGE, iagemax+4+AGEMARGE); | |
| free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+4+AGEMARGE); | |
| free_vector(pospropt,1,nlstate); | |
| free_vector(posprop,1,nlstate); | |
| free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+4+AGEMARGE); | |
| free_vector(pp,1,nlstate); | |
| /* End of freqsummary */ | |
| } | |
| /************ Prevalence ********************/ | |
| void prevalence(double ***probs, double agemin, double agemax, int **s, double **agev, int nlstate, int imx, int *Tvar, int **nbcode, int *ncodemax,double **mint,double **anint, double dateprev1,double dateprev2, int firstpass, int lastpass) | |
| { | |
| /* Compute observed prevalence between dateprev1 and dateprev2 by counting the number of people | |
| in each health status at the date of interview (if between dateprev1 and dateprev2). | |
| We still use firstpass and lastpass as another selection. | |
| */ | |
| int i, m, jk, j1, bool, z1,j, iv; | |
| int mi; /* Effective wave */ | int mi; /* Effective wave */ |
| int iage; | int iage; |
| double agebegin, ageend; | double agebegin, ageend; |
| Line 4392 void prevalence(double ***probs, double | Line 4920 void prevalence(double ***probs, double |
| iagemin= (int) agemin; | iagemin= (int) agemin; |
| iagemax= (int) agemax; | iagemax= (int) agemax; |
| /*pp=vector(1,nlstate);*/ | /*pp=vector(1,nlstate);*/ |
| prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE); | prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+4+AGEMARGE); |
| /* freq=ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,iagemin,iagemax+3);*/ | /* freq=ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,iagemin,iagemax+3);*/ |
| j1=0; | j1=0; |
| Line 4402 void prevalence(double ***probs, double | Line 4930 void prevalence(double ***probs, double |
| first=1; | first=1; |
| 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 covariate */ |
| for (i=1; i<=nlstate; i++) | for (i=1; i<=nlstate; i++) |
| for(iage=iagemin-AGEMARGE; iage <= iagemax+3+AGEMARGE; iage++) | for(iage=iagemin-AGEMARGE; iage <= iagemax+4+AGEMARGE; iage++) |
| prop[i][iage]=0.0; | prop[i][iage]=0.0; |
| printf("Prevalence combination of varying and fixed dummies %d\n",j1); | printf("Prevalence combination of varying and fixed dummies %d\n",j1); |
| /* fprintf(ficlog," V%d=%d ",Tvaraff[j1],nbcode[Tvaraff[j1]][codtabm(k,j1)]); */ | /* fprintf(ficlog," V%d=%d ",Tvaraff[j1],nbcode[Tvaraff[j1]][codtabm(k,j1)]); */ |
| Line 4433 void prevalence(double ***probs, double | Line 4961 void prevalence(double ***probs, double |
| if ((y2>=dateprev1) && (y2<=dateprev2)) { /* Here is the main selection (fractional years) */ | if ((y2>=dateprev1) && (y2<=dateprev2)) { /* Here is the main selection (fractional years) */ |
| if(agev[m][i]==0) agev[m][i]=iagemax+1; | if(agev[m][i]==0) agev[m][i]=iagemax+1; |
| if(agev[m][i]==1) agev[m][i]=iagemax+2; | if(agev[m][i]==1) agev[m][i]=iagemax+2; |
| if((int)agev[m][i] <iagemin-AGEMARGE || (int)agev[m][i] >iagemax+3+AGEMARGE){ | if((int)agev[m][i] <iagemin-AGEMARGE || (int)agev[m][i] >iagemax+4+AGEMARGE){ |
| printf("Error on individual # %d agev[m][i]=%f <%d-%d or > %d+3+%d m=%d; either change agemin or agemax or fix data\n",i, agev[m][i],iagemin,AGEMARGE, iagemax,AGEMARGE,m); | printf("Error on individual # %d agev[m][i]=%f <%d-%d or > %d+3+%d m=%d; either change agemin or agemax or fix data\n",i, agev[m][i],iagemin,AGEMARGE, iagemax,AGEMARGE,m); |
| exit(1); | exit(1); |
| } | } |
| Line 4459 void prevalence(double ***probs, double | Line 4987 void prevalence(double ***probs, double |
| } else{ | } else{ |
| if(first==1){ | if(first==1){ |
| first=0; | first=0; |
| printf("Warning Observed prevalence probs[%d][%d][%d]=%lf because of lack of cases\nSee others in log file...\n",jk,i,j1,probs[i][jk][j1]); | printf("Warning Observed prevalence doesn't sum to 1 for state %d: probs[%d][%d][%d]=%lf because of lack of cases\nSee others in log file...\n",jk,i,jk, j1,probs[i][jk][j1]); |
| fprintf(ficlog,"Warning Observed prevalence doesn't sum to 1 for state %d: probs[%d][%d][%d]=%lf because of lack of cases\nSee others in log file...\n",jk,i,jk, j1,probs[i][jk][j1]); | |
| }else{ | |
| fprintf(ficlog,"Warning Observed prevalence doesn't sum to 1 for state %d: probs[%d][%d][%d]=%lf because of lack of cases\nSee others in log file...\n",jk,i,jk, j1,probs[i][jk][j1]); | |
| } | } |
| } | } |
| } | } |
| Line 4470 void prevalence(double ***probs, double | Line 5001 void prevalence(double ***probs, double |
| /* free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath, iagemin, iagemax+3);*/ | /* free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath, iagemin, iagemax+3);*/ |
| /*free_vector(pp,1,nlstate);*/ | /*free_vector(pp,1,nlstate);*/ |
| free_matrix(prop,1,nlstate, iagemin-AGEMARGE,iagemax+3+AGEMARGE); | free_matrix(prop,1,nlstate, iagemin-AGEMARGE,iagemax+4+AGEMARGE); |
| } /* End of prevalence */ | } /* End of prevalence */ |
| /************* Waves Concatenation ***************/ | /************* Waves Concatenation ***************/ |
| Line 4519 void concatwav(int wav[], int **dh, int | Line 5050 void concatwav(int wav[], int **dh, int |
| #else | #else |
| if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ | if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ |
| if(firsthree == 0){ | if(firsthree == 0){ |
| printf("Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as pi. .\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); | printf("Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p%d%d .\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); |
| firsthree=1; | firsthree=1; |
| } | } |
| fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as pi. .\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); | fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p%d%d .\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); |
| mw[++mi][i]=m; | mw[++mi][i]=m; |
| mli=m; | mli=m; |
| } | } |
| Line 4549 void concatwav(int wav[], int **dh, int | Line 5080 void concatwav(int wav[], int **dh, int |
| /* if(mi==0) never been interviewed correctly before death */ | /* if(mi==0) never been interviewed correctly before death */ |
| /* Only death is a correct wave */ | /* Only death is a correct wave */ |
| mw[mi][i]=m; | mw[mi][i]=m; |
| } | } /* else not in a death state */ |
| #ifndef DISPATCHINGKNOWNDEATHAFTERLASTWAVE | #ifndef DISPATCHINGKNOWNDEATHAFTERLASTWAVE |
| else if ((int) andc[i] != 9999) { /* Status is negative. A death occured after lastpass, we can't take it into account because of potential bias */ | else if ((int) andc[i] != 9999) { /* Date of death is known */ |
| /* m++; */ | |
| /* mi++; */ | |
| /* s[m][i]=nlstate+1; /\* We are setting the status to the last of non live state *\/ */ | |
| /* mw[mi][i]=m; */ | |
| if ((int)anint[m][i]!= 9999) { /* date of last interview is known */ | if ((int)anint[m][i]!= 9999) { /* date of last interview is known */ |
| if((andc[i]+moisdc[i]/12.) <=(anint[m][i]+mint[m][i]/12.)){ /* death occured before last wave and status should have been death instead of -1 */ | if((andc[i]+moisdc[i]/12.) <=(anint[m][i]+mint[m][i]/12.)){ /* death occured before last wave and status should have been death instead of -1 */ |
| nbwarn++; | nbwarn++; |
| Line 4568 void concatwav(int wav[], int **dh, int | Line 5095 void concatwav(int wav[], int **dh, int |
| }else{ /* Death occured afer last wave potential bias */ | }else{ /* Death occured afer last wave potential bias */ |
| nberr++; | nberr++; |
| if(firstwo==0){ | if(firstwo==0){ |
| printf("Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | printf("Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood. Please add a new fictive wave at the date of last vital status scan, with a dead status or alive but unknown state status (-1). See documentation\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); |
| firstwo=1; | firstwo=1; |
| } | } |
| fprintf(ficlog,"Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | fprintf(ficlog,"Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood. Please add a new fictive wave at the date of last vital status scan, with a dead status or alive but unknown state status (-1). See documentation\n\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); |
| } | } |
| }else{ /* end date of interview is known */ | }else{ /* if date of interview is unknown */ |
| /* death is known but not confirmed by death status at any wave */ | /* death is known but not confirmed by death status at any wave */ |
| if(firstfour==0){ | if(firstfour==0){ |
| printf("Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | printf("Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); |
| Line 4604 void concatwav(int wav[], int **dh, int | Line 5131 void concatwav(int wav[], int **dh, int |
| if (stepm <=0) | if (stepm <=0) |
| dh[mi][i]=1; | dh[mi][i]=1; |
| else{ | else{ |
| if (s[mw[mi+1][i]][i] > nlstate) { /* A death */ | if (s[mw[mi+1][i]][i] > nlstate) { /* A death, but what if date is unknown? */ |
| if (agedc[i] < 2*AGESUP) { | if (agedc[i] < 2*AGESUP) { |
| j= rint(agedc[i]*12-agev[mw[mi][i]][i]*12); | j= rint(agedc[i]*12-agev[mw[mi][i]][i]*12); |
| if(j==0) j=1; /* Survives at least one month after exam */ | if(j==0) j=1; /* Survives at least one month after exam */ |
| Line 4691 void concatwav(int wav[], int **dh, int | Line 5218 void concatwav(int wav[], int **dh, int |
| /*********** Tricode ****************************/ | /*********** Tricode ****************************/ |
| void tricode(int *cptcov, int *Tvar, int **nbcode, int imx, int *Ndum) | void tricode(int *cptcov, int *Tvar, int **nbcode, int imx, int *Ndum) |
| { | { |
| /**< Uses cptcovn+2*cptcovprod as the number of covariates */ | /**< Uses cptcovn+2*cptcovprod as the number of covariates */ |
| /* Tvar[i]=atoi(stre); find 'n' in Vn and stores in Tvar. If model=V2+V1 Tvar[1]=2 and Tvar[2]=1 | /* Tvar[i]=atoi(stre); find 'n' in Vn and stores in Tvar. If model=V2+V1 Tvar[1]=2 and Tvar[2]=1 |
| * Boring subroutine which should only output nbcode[Tvar[j]][k] | * Boring subroutine which should only output nbcode[Tvar[j]][k] |
| * Tvar[5] in V2+V1+V3*age+V2*V4 is 4 (V4) even it is a time varying or quantitative variable | * Tvar[5] in V2+V1+V3*age+V2*V4 is 4 (V4) even it is a time varying or quantitative variable |
| * nbcode[Tvar[5]][1]= nbcode[4][1]=0, nbcode[4][2]=1 (usually); | * nbcode[Tvar[5]][1]= nbcode[4][1]=0, nbcode[4][2]=1 (usually); |
| */ | */ |
| int ij=1, k=0, j=0, i=0, maxncov=NCOVMAX; | int ij=1, k=0, j=0, i=0, maxncov=NCOVMAX; |
| int modmaxcovj=0; /* Modality max of covariates j */ | int modmaxcovj=0; /* Modality max of covariates j */ |
| int cptcode=0; /* Modality max of covariates j */ | int cptcode=0; /* Modality max of covariates j */ |
| int modmincovj=0; /* Modality min of covariates j */ | int modmincovj=0; /* Modality min of covariates j */ |
| /* cptcoveff=0; */ | /* cptcoveff=0; */ |
| /* *cptcov=0; */ | /* *cptcov=0; */ |
| for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ | for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ |
| /* Loop on covariates without age and products and no quantitative variable */ | /* Loop on covariates without age and products and no quantitative variable */ |
| /* for (j=1; j<=(cptcovs); j++) { /\* From model V1 + V2*age+ V3 + V3*V4 keeps V1 + V3 = 2 only *\/ */ | /* for (j=1; j<=(cptcovs); j++) { /\* From model V1 + V2*age+ V3 + V3*V4 keeps V1 + V3 = 2 only *\/ */ |
| 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++) { /* From model V1 + V2*age + V3 + V3*V4 keeps V1 + V3 = 2 only */ |
| for (j=-1; (j < maxncov); j++) Ndum[j]=0; | for (j=-1; (j < maxncov); j++) Ndum[j]=0; |
| if(Dummy[k]==0 && Typevar[k] !=1){ /* Dummy covariate and not age product */ | if(Dummy[k]==0 && Typevar[k] !=1){ /* Dummy covariate and not age product */ |
| switch(Fixed[k]) { | switch(Fixed[k]) { |
| case 0: /* Testing on fixed dummy covariate, simple or product of fixed */ | case 0: /* Testing on fixed dummy covariate, simple or product of fixed */ |
| 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*/ | for (i=1; i<=imx; i++) { /* Loop on individuals: reads the data file to get the maximum value of the modality of this covariate Vj*/ |
| ij=(int)(covar[Tvar[k]][i]); | ij=(int)(covar[Tvar[k]][i]); |
| /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i | /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i |
| * If product of Vn*Vm, still boolean *: | * If product of Vn*Vm, still boolean *: |
| * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables | * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables |
| * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0 */ | * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0 */ |
| /* Finds for covariate j, n=Tvar[j] of Vn . ij is the | /* Finds for covariate j, n=Tvar[j] of Vn . ij is the |
| modality of the nth covariate of individual i. */ | modality of the nth covariate of individual i. */ |
| if (ij > modmaxcovj) | if (ij > modmaxcovj) |
| modmaxcovj=ij; | modmaxcovj=ij; |
| else if (ij < modmincovj) | else if (ij < modmincovj) |
| modmincovj=ij; | modmincovj=ij; |
| if ((ij < -1) && (ij > NCOVMAX)){ | if ((ij < -1) && (ij > NCOVMAX)){ |
| printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); | printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); |
| exit(1); | exit(1); |
| }else | }else |
| Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ | Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ |
| /* If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */ | /* If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */ |
| /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ | /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ |
| /* getting the maximum value of the modality of the covariate | /* getting the maximum value of the modality of the covariate |
| (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and | (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and |
| female ies 1, then modmaxcovj=1. | female ies 1, then modmaxcovj=1. |
| */ | */ |
| } /* end for loop on individuals i */ | } /* end for loop on individuals i */ |
| printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj); | printf(" Minimal and maximal values of %d th (fixed) covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj); |
| fprintf(ficlog," Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj); | fprintf(ficlog," Minimal and maximal values of %d th (fixed) covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj); |
| cptcode=modmaxcovj; | cptcode=modmaxcovj; |
| /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ | /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ |
| /*for (i=0; i<=cptcode; i++) {*/ | /*for (i=0; i<=cptcode; i++) {*/ |
| for (j=modmincovj; j<=modmaxcovj; j++) { /* j=-1 ? 0 and 1*//* For each value j of the modality of model-cov k */ | for (j=modmincovj; j<=modmaxcovj; j++) { /* j=-1 ? 0 and 1*//* For each value j of the modality of model-cov k */ |
| printf("Frequencies of covariates %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]); | printf("Frequencies of (fixed) covariate %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]); |
| fprintf(ficlog, "Frequencies of covariates %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]); | fprintf(ficlog, "Frequencies of (fixed) covariate %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]); |
| if( Ndum[j] != 0 ){ /* Counts if nobody answered modality j ie empty modality, we skip it and reorder */ | if( Ndum[j] != 0 ){ /* Counts if nobody answered modality j ie empty modality, we skip it and reorder */ |
| if( j != -1){ | if( j != -1){ |
| ncodemax[k]++; /* ncodemax[k]= Number of modalities of the k th | ncodemax[k]++; /* ncodemax[k]= Number of modalities of the k th |
| covariate for which somebody answered excluding | covariate for which somebody answered excluding |
| undefined. Usually 2: 0 and 1. */ | undefined. Usually 2: 0 and 1. */ |
| } | } |
| ncodemaxwundef[k]++; /* ncodemax[j]= Number of modalities of the k th | ncodemaxwundef[k]++; /* ncodemax[j]= Number of modalities of the k th |
| covariate for which somebody answered including | covariate for which somebody answered including |
| undefined. Usually 3: -1, 0 and 1. */ | undefined. Usually 3: -1, 0 and 1. */ |
| } /* In fact ncodemax[k]=2 (dichotom. variables only) but it could be more for | } /* In fact ncodemax[k]=2 (dichotom. variables only) but it could be more for |
| * historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ | * historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ |
| } /* Ndum[-1] number of undefined modalities */ | } /* Ndum[-1] number of undefined modalities */ |
| /* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */ | /* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */ |
| /* For covariate j, modalities could be 1, 2, 3, 4, 5, 6, 7. */ | /* For covariate j, modalities could be 1, 2, 3, 4, 5, 6, 7. */ |
| /* If Ndum[1]=0, Ndum[2]=0, Ndum[3]= 635, Ndum[4]=0, Ndum[5]=0, Ndum[6]=27, Ndum[7]=125; */ | /* If Ndum[1]=0, Ndum[2]=0, Ndum[3]= 635, Ndum[4]=0, Ndum[5]=0, Ndum[6]=27, Ndum[7]=125; */ |
| /* modmincovj=3; modmaxcovj = 7; */ | /* modmincovj=3; modmaxcovj = 7; */ |
| /* There are only 3 modalities non empty 3, 6, 7 (or 2 if 27 is too few) : ncodemax[j]=3; */ | /* There are only 3 modalities non empty 3, 6, 7 (or 2 if 27 is too few) : ncodemax[j]=3; */ |
| /* which will be coded 0, 1, 2 which in binary on 2=3-1 digits are 0=00 1=01, 2=10; */ | /* which will be coded 0, 1, 2 which in binary on 2=3-1 digits are 0=00 1=01, 2=10; */ |
| /* defining two dummy variables: variables V1_1 and V1_2.*/ | /* defining two dummy variables: variables V1_1 and V1_2.*/ |
| /* nbcode[Tvar[j]][ij]=k; */ | /* nbcode[Tvar[j]][ij]=k; */ |
| /* nbcode[Tvar[j]][1]=0; */ | /* nbcode[Tvar[j]][1]=0; */ |
| /* nbcode[Tvar[j]][2]=1; */ | /* nbcode[Tvar[j]][2]=1; */ |
| /* nbcode[Tvar[j]][3]=2; */ | /* nbcode[Tvar[j]][3]=2; */ |
| /* To be continued (not working yet). */ | /* To be continued (not working yet). */ |
| ij=0; /* ij is similar to i but can jump over null modalities */ | ij=0; /* ij is similar to i but can jump over null modalities */ |
| for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/ | for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/ |
| if (Ndum[i] == 0) { /* If nobody responded to this modality k */ | if (Ndum[i] == 0) { /* If nobody responded to this modality k */ |
| break; | break; |
| } | } |
| ij++; | ij++; |
| nbcode[Tvar[k]][ij]=i; /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality. nbcode[1][1]=0 nbcode[1][2]=1*/ | nbcode[Tvar[k]][ij]=i; /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality. nbcode[1][1]=0 nbcode[1][2]=1*/ |
| cptcode = ij; /* New max modality for covar j */ | cptcode = ij; /* New max modality for covar j */ |
| } /* end of loop on modality i=-1 to 1 or more */ | } /* end of loop on modality i=-1 to 1 or more */ |
| break; | break; |
| case 1: /* Testing on varying covariate, could be simple and | case 1: /* Testing on varying covariate, could be simple and |
| * should look at waves or product of fixed * | * should look at waves or product of fixed * |
| * varying. No time to test -1, assuming 0 and 1 only */ | * varying. No time to test -1, assuming 0 and 1 only */ |
| ij=0; | ij=0; |
| for(i=0; i<=1;i++){ | for(i=0; i<=1;i++){ |
| nbcode[Tvar[k]][++ij]=i; | nbcode[Tvar[k]][++ij]=i; |
| } | } |
| break; | break; |
| default: | default: |
| break; | break; |
| } /* end switch */ | } /* end switch */ |
| } /* end dummy test */ | } /* end dummy test */ |
| /* for (k=0; k<= cptcode; k++) { /\* k=-1 ? k=0 to 1 *\//\* Could be 1 to 4 *\//\* cptcode=modmaxcovj *\/ */ | /* for (k=0; k<= cptcode; k++) { /\* k=-1 ? k=0 to 1 *\//\* Could be 1 to 4 *\//\* cptcode=modmaxcovj *\/ */ |
| /* /\*recode from 0 *\/ */ | /* /\*recode from 0 *\/ */ |
| /* k is a modality. If we have model=V1+V1*sex */ | /* k is a modality. If we have model=V1+V1*sex */ |
| /* then: nbcode[1][1]=0 ; nbcode[1][2]=1; nbcode[2][1]=0 ; nbcode[2][2]=1; */ | /* then: nbcode[1][1]=0 ; nbcode[1][2]=1; nbcode[2][1]=0 ; nbcode[2][2]=1; */ |
| /* But if some modality were not used, it is recoded from 0 to a newer modmaxcovj=cptcode *\/ */ | /* But if some modality were not used, it is recoded from 0 to a newer modmaxcovj=cptcode *\/ */ |
| /* } */ | /* } */ |
| /* /\* cptcode = ij; *\/ /\* New max modality for covar j *\/ */ | /* /\* cptcode = ij; *\/ /\* New max modality for covar j *\/ */ |
| /* if (ij > ncodemax[j]) { */ | /* if (ij > ncodemax[j]) { */ |
| /* printf( " Error ij=%d > ncodemax[%d]=%d\n", ij, j, ncodemax[j]); */ | /* printf( " Error ij=%d > ncodemax[%d]=%d\n", ij, j, ncodemax[j]); */ |
| /* fprintf(ficlog, " Error ij=%d > ncodemax[%d]=%d\n", ij, j, ncodemax[j]); */ | /* fprintf(ficlog, " Error ij=%d > ncodemax[%d]=%d\n", ij, j, ncodemax[j]); */ |
| /* break; */ | /* break; */ |
| /* } */ | /* } */ |
| /* } /\* end of loop on modality k *\/ */ | /* } /\* end of loop on modality k *\/ */ |
| } /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ | } /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ |
| for (k=-1; k< maxncov; k++) Ndum[k]=0; | for (k=-1; k< maxncov; k++) Ndum[k]=0; |
| /* Look at fixed dummy (single or product) covariates to check empty modalities */ | /* Look at fixed dummy (single or product) covariates to check empty modalities */ |
| for (i=1; i<=ncovmodel-2-nagesqr; i++) { /* -2, cste and age and eventually age*age */ | for (i=1; i<=ncovmodel-2-nagesqr; i++) { /* -2, cste and age and eventually age*age */ |
| /* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/ | /* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/ |
| ij=Tvar[i]; /* Tvar 5,4,3,6,5,7,1,4 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V4*age */ | ij=Tvar[i]; /* Tvar 5,4,3,6,5,7,1,4 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V4*age */ |
| Ndum[ij]++; /* Count the # of 1, 2 etc: {1,1,1,2,2,1,1} because V1 once, V2 once, two V4 and V5 in above */ | Ndum[ij]++; /* Count the # of 1, 2 etc: {1,1,1,2,2,1,1} because V1 once, V2 once, two V4 and V5 in above */ |
| /* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, {2, 1, 1, 1, 2, 1, 1, 0, 0} */ | /* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, {2, 1, 1, 1, 2, 1, 1, 0, 0} */ |
| } /* V4+V3+V5, Ndum[1]@5={0, 0, 1, 1, 1} */ | } /* V4+V3+V5, Ndum[1]@5={0, 0, 1, 1, 1} */ |
| ij=0; | 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 (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++) { /* 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]);*/ | /*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/ |
| /* if((Ndum[i]!=0) && (i<=ncovcol)){ /\* Tvar[i] <= ncovmodel ? *\/ */ | /* 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 and non empty in the model */ |
| /* If product not in single variable we don't print results */ | /* If product not in single variable we don't print results */ |
| /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ | /*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, */ |
| 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*/ | 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, ?, ?,} */ | 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 */ | 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 */ |
| if(Fixed[k]!=0) | if(Fixed[k]!=0) |
| anyvaryingduminmodel=1; | anyvaryingduminmodel=1; |
| /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv)){ */ | /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv)){ */ |
| /* Tvaraff[++ij]=-10; /\* Dont'n know how to treat quantitative variables yet *\/ */ | /* Tvaraff[++ij]=-10; /\* Dont'n know how to treat quantitative variables yet *\/ */ |
| /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv)){ */ | /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv)){ */ |
| /* Tvaraff[++ij]=i; /\*For printing (unclear) *\/ */ | /* Tvaraff[++ij]=i; /\*For printing (unclear) *\/ */ |
| /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv+nqtv)){ */ | /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv+nqtv)){ */ |
| /* Tvaraff[++ij]=-20; /\* Dont'n know how to treat quantitative variables yet *\/ */ | /* Tvaraff[++ij]=-20; /\* Dont'n know how to treat quantitative variables yet *\/ */ |
| } | } |
| } /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */ | } /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */ |
| /* ij--; */ | /* ij--; */ |
| /* cptcoveff=ij; /\*Number of total covariates*\/ */ | /* cptcoveff=ij; /\*Number of total covariates*\/ */ |
| *cptcov=ij; /*Number of total real effective covariates: effective | *cptcov=ij; /*Number of total real effective covariates: effective |
| * because they can be excluded from the model and real | * 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?*/ | * if in the model but excluded because missing values, but how to get k from ij?*/ |
| for(j=ij+1; j<= cptcovt; j++){ | for(j=ij+1; j<= cptcovt; j++){ |
| Tvaraff[j]=0; | Tvaraff[j]=0; |
| Tmodelind[j]=0; | Tmodelind[j]=0; |
| } | } |
| for(j=ntveff+1; j<= cptcovt; j++){ | for(j=ntveff+1; j<= cptcovt; j++){ |
| TmodelInvind[j]=0; | TmodelInvind[j]=0; |
| } | } |
| /* To be sorted */ | /* To be sorted */ |
| ; | ; |
| } | } |
| /*********** Health Expectancies ****************/ | /*********** Health Expectancies ****************/ |
| void evsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[] ) | void evsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[], int nres ) |
| { | { |
| /* Health expectancies, no variances */ | /* Health expectancies, no variances */ |
| Line 4872 void evsij(double ***eij, double x[], in | Line 5399 void evsij(double ***eij, double x[], in |
| double ***p3mat; | double ***p3mat; |
| double eip; | double eip; |
| pstamp(ficreseij); | /* pstamp(ficreseij); */ |
| fprintf(ficreseij,"# (a) Life expectancies by health status at initial age and (b) health expectancies by health status at initial age\n"); | fprintf(ficreseij,"# (a) Life expectancies by health status at initial age and (b) health expectancies by health status at initial age\n"); |
| fprintf(ficreseij,"# Age"); | fprintf(ficreseij,"# Age"); |
| for(i=1; i<=nlstate;i++){ | for(i=1; i<=nlstate;i++){ |
| Line 4935 void evsij(double ***eij, double x[], in | Line 5462 void evsij(double ***eij, double x[], in |
| /* Computed by stepm unit matrices, product of hstepma matrices, stored | /* Computed by stepm unit matrices, product of hstepma matrices, stored |
| in an array of nhstepma length: nhstepma=10, hstepm=4, stepm=6 months */ | in an array of nhstepma length: nhstepma=10, hstepm=4, stepm=6 months */ |
| hpxij(p3mat,nhstepma,age,hstepm,x,nlstate,stepm,oldm, savm, cij); | hpxij(p3mat,nhstepma,age,hstepm,x,nlstate,stepm,oldm, savm, cij, nres); |
| hf=hstepm*stepm/YEARM; /* Duration of hstepm expressed in year unit. */ | hf=hstepm*stepm/YEARM; /* Duration of hstepm expressed in year unit. */ |
| Line 4970 void evsij(double ***eij, double x[], in | Line 5497 void evsij(double ***eij, double x[], in |
| } | } |
| void cvevsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,double delti[],double **matcov,char strstart[] ) | void cvevsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,double delti[],double **matcov,char strstart[], int nres ) |
| { | { |
| /* Covariances of health expectancies eij and of total life expectancies according | /* Covariances of health expectancies eij and of total life expectancies according |
| Line 5083 void cvevsij(double ***eij, double x[], | Line 5610 void cvevsij(double ***eij, double x[], |
| xp[i] = x[i] + (i==theta ?delti[theta]:0); | xp[i] = x[i] + (i==theta ?delti[theta]:0); |
| xm[i] = x[i] - (i==theta ?delti[theta]:0); | xm[i] = x[i] - (i==theta ?delti[theta]:0); |
| } | } |
| hpxij(p3matp,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, cij); | hpxij(p3matp,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, cij, nres); |
| hpxij(p3matm,nhstepm,age,hstepm,xm,nlstate,stepm,oldm,savm, cij); | hpxij(p3matm,nhstepm,age,hstepm,xm,nlstate,stepm,oldm,savm, cij, nres); |
| for(j=1; j<= nlstate; j++){ | for(j=1; j<= nlstate; j++){ |
| for(i=1; i<=nlstate; i++){ | for(i=1; i<=nlstate; i++){ |
| Line 5125 void cvevsij(double ***eij, double x[], | Line 5652 void cvevsij(double ***eij, double x[], |
| } | } |
| /* Computing expectancies */ | /* Computing expectancies */ |
| hpxij(p3matm,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, cij); | hpxij(p3matm,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, cij,nres); |
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) |
| for(j=1; j<=nlstate;j++) | for(j=1; j<=nlstate;j++) |
| for (h=0, eij[i][j][(int)age]=0; h<=nhstepm-1; h++){ | for (h=0, eij[i][j][(int)age]=0; h<=nhstepm-1; h++){ |
| Line 5180 void cvevsij(double ***eij, double x[], | Line 5707 void cvevsij(double ***eij, double x[], |
| } | } |
| /************ Variance ******************/ | /************ Variance ******************/ |
| void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, int estepm, int cptcov, int cptcod, int popbased, int mobilav, char strstart[]) | void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, int estepm, int cptcov, int cptcod, int popbased, int mobilav, char strstart[], int nres) |
| { | { |
| /* Variance of health expectancies */ | /* Variance of health expectancies */ |
| /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double ** savm,double ftolpl);*/ | /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double ** savm,double ftolpl);*/ |
| Line 5237 void cvevsij(double ***eij, double x[], | Line 5764 void cvevsij(double ***eij, double x[], |
| fprintf(ficlog,"Computing total mortality p.j=w1*p1j+w2*p2j+..: result on file '%s' \n",fileresprobmorprev); | fprintf(ficlog,"Computing total mortality p.j=w1*p1j+w2*p2j+..: result on file '%s' \n",fileresprobmorprev); |
| pstamp(ficresprobmorprev); | 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,"# 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 */ | |
| fprintf(ficresprobmorprev," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| for(j=1;j<=cptcoveff;j++) | |
| fprintf(ficresprobmorprev,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(ij,j)]); | |
| fprintf(ficresprobmorprev,"\n"); | |
| fprintf(ficresprobmorprev,"# Age cov=%-d",ij); | fprintf(ficresprobmorprev,"# Age cov=%-d",ij); |
| for(j=nlstate+1; j<=(nlstate+ndeath);j++){ | for(j=nlstate+1; j<=(nlstate+ndeath);j++){ |
| fprintf(ficresprobmorprev," p.%-d SE",j); | fprintf(ficresprobmorprev," p.%-d SE",j); |
| Line 5306 void cvevsij(double ***eij, double x[], | Line 5841 void cvevsij(double ***eij, double x[], |
| xp[i] = x[i] + (i==theta ?delti[theta]:0); | xp[i] = x[i] + (i==theta ?delti[theta]:0); |
| } | } |
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij, nres); |
| if (popbased==1) { | if (popbased==1) { |
| if(mobilav ==0){ | if(mobilav ==0){ |
| Line 5318 void cvevsij(double ***eij, double x[], | Line 5853 void cvevsij(double ***eij, double x[], |
| } | } |
| } | } |
| hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij); /* Returns p3mat[i][j][h] for h=1 to nhstepm */ | hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij,nres); /* Returns p3mat[i][j][h] for h=1 to nhstepm */ |
| for(j=1; j<= nlstate; j++){ | for(j=1; j<= nlstate; j++){ |
| for(h=0; h<=nhstepm; h++){ | for(h=0; h<=nhstepm; h++){ |
| for(i=1, gp[h][j]=0.;i<=nlstate;i++) | for(i=1, gp[h][j]=0.;i<=nlstate;i++) |
| Line 5338 void cvevsij(double ***eij, double x[], | Line 5873 void cvevsij(double ***eij, double x[], |
| for(i=1; i<=npar; i++) /* Computes gradient x - delta */ | for(i=1; i<=npar; i++) /* Computes gradient x - delta */ |
| xp[i] = x[i] - (i==theta ?delti[theta]:0); | xp[i] = x[i] - (i==theta ?delti[theta]:0); |
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp, ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp, ij, nres); |
| if (popbased==1) { | if (popbased==1) { |
| if(mobilav ==0){ | if(mobilav ==0){ |
| Line 5350 void cvevsij(double ***eij, double x[], | Line 5885 void cvevsij(double ***eij, double x[], |
| } | } |
| } | } |
| hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij); | hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij,nres); |
| for(j=1; j<= nlstate; j++){ /* Sum of wi * eij = e.j */ | for(j=1; j<= nlstate; j++){ /* Sum of wi * eij = e.j */ |
| for(h=0; h<=nhstepm; h++){ | for(h=0; h<=nhstepm; h++){ |
| Line 5415 void cvevsij(double ***eij, double x[], | Line 5950 void cvevsij(double ***eij, double x[], |
| /* end ppptj */ | /* end ppptj */ |
| /* x centered again */ | /* x centered again */ |
| prevalim(prlim,nlstate,x,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,x,age,oldm,savm,ftolpl,ncvyearp,ij, nres); |
| if (popbased==1) { | if (popbased==1) { |
| if(mobilav ==0){ | if(mobilav ==0){ |
| Line 5431 void cvevsij(double ***eij, double x[], | Line 5966 void cvevsij(double ***eij, double x[], |
| computed over hstepm (estepm) matrices product = hstepm*stepm months) | computed over hstepm (estepm) matrices product = hstepm*stepm months) |
| as a weighted average of prlim. | as a weighted average of prlim. |
| */ | */ |
| hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm,savm, ij); | hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm,savm, ij, nres); |
| for(j=nlstate+1;j<=nlstate+ndeath;j++){ | for(j=nlstate+1;j<=nlstate+ndeath;j++){ |
| for(i=1,gmp[j]=0.;i<= nlstate; i++) | for(i=1,gmp[j]=0.;i<= nlstate; i++) |
| gmp[j] += prlim[i][i]*p3mat[i][j][1]; | gmp[j] += prlim[i][i]*p3mat[i][j][1]; |
| Line 5494 void cvevsij(double ***eij, double x[], | Line 6029 void cvevsij(double ***eij, double x[], |
| } /* end varevsij */ | } /* end varevsij */ |
| /************ Variance of prevlim ******************/ | /************ Variance of prevlim ******************/ |
| void varprevlim(char fileres[], double **varpl, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, char strstart[]) | void varprevlim(char fileres[], double **varpl, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, char strstart[], int nres) |
| { | { |
| /* Variance of prevalence limit for each state ij using current parameters x[] and estimates of neighbourhood give by delti*/ | /* Variance of prevalence limit for each state ij using current parameters x[] and estimates of neighbourhood give by delti*/ |
| /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double **savm,double ftolpl);*/ | /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double **savm,double ftolpl);*/ |
| Line 5510 void cvevsij(double ***eij, double x[], | Line 6045 void cvevsij(double ***eij, double x[], |
| pstamp(ficresvpl); | pstamp(ficresvpl); |
| fprintf(ficresvpl,"# Standard deviation of period (stable) prevalences \n"); | fprintf(ficresvpl,"# Standard deviation of period (stable) prevalences \n"); |
| fprintf(ficresvpl,"# Age"); | fprintf(ficresvpl,"# Age "); |
| if(nresult >=1) | |
| fprintf(ficresvpl," Result# "); | |
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) |
| fprintf(ficresvpl," %1d-%1d",i,i); | fprintf(ficresvpl," %1d-%1d",i,i); |
| fprintf(ficresvpl,"\n"); | fprintf(ficresvpl,"\n"); |
| Line 5537 void cvevsij(double ***eij, double x[], | Line 6074 void cvevsij(double ***eij, double x[], |
| xp[i] = x[i] + (i==theta ?delti[theta]:0); | xp[i] = x[i] + (i==theta ?delti[theta]:0); |
| } | } |
| if((int)age==79 ||(int)age== 80 ||(int)age== 81 ) | if((int)age==79 ||(int)age== 80 ||(int)age== 81 ) |
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres); |
| else | else |
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres); |
| for(i=1;i<=nlstate;i++){ | for(i=1;i<=nlstate;i++){ |
| gp[i] = prlim[i][i]; | gp[i] = prlim[i][i]; |
| mgp[theta][i] = prlim[i][i]; | mgp[theta][i] = prlim[i][i]; |
| Line 5547 void cvevsij(double ***eij, double x[], | Line 6084 void cvevsij(double ***eij, double x[], |
| for(i=1; i<=npar; i++) /* Computes gradient */ | for(i=1; i<=npar; i++) /* Computes gradient */ |
| xp[i] = x[i] - (i==theta ?delti[theta]:0); | xp[i] = x[i] - (i==theta ?delti[theta]:0); |
| if((int)age==79 ||(int)age== 80 ||(int)age== 81 ) | if((int)age==79 ||(int)age== 80 ||(int)age== 81 ) |
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres); |
| else | else |
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres); |
| for(i=1;i<=nlstate;i++){ | for(i=1;i<=nlstate;i++){ |
| gm[i] = prlim[i][i]; | gm[i] = prlim[i][i]; |
| mgm[theta][i] = prlim[i][i]; | mgm[theta][i] = prlim[i][i]; |
| Line 5596 void cvevsij(double ***eij, double x[], | Line 6133 void cvevsij(double ***eij, double x[], |
| varpl[i][(int)age] = doldm[i][i]; /* Covariances are useless */ | varpl[i][(int)age] = doldm[i][i]; /* Covariances are useless */ |
| fprintf(ficresvpl,"%.0f ",age ); | fprintf(ficresvpl,"%.0f ",age ); |
| if(nresult >=1) | |
| fprintf(ficresvpl,"%d ",nres ); | |
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) |
| fprintf(ficresvpl," %.5f (%.5f)",prlim[i][i],sqrt(varpl[i][(int)age])); | fprintf(ficresvpl," %.5f (%.5f)",prlim[i][i],sqrt(varpl[i][(int)age])); |
| fprintf(ficresvpl,"\n"); | fprintf(ficresvpl,"\n"); |
| Line 5689 void varprob(char optionfilefiname[], do | Line 6228 void varprob(char optionfilefiname[], do |
| fprintf(fichtm,"\n<li><h4> Computing and drawing one step probabilities with their confidence intervals</h4></li>\n"); | fprintf(fichtm,"\n<li><h4> Computing and drawing one step probabilities with their confidence intervals</h4></li>\n"); |
| fprintf(fichtm,"\n"); | fprintf(fichtm,"\n"); |
| fprintf(fichtm,"\n<li><h4> <a href=\"%s\">Matrix of variance-covariance of one-step probabilities (drawings)</a></h4> this page is important in order to visualize confidence intervals and especially correlation between disability and recovery, or more generally, way in and way back.</li>\n",optionfilehtmcov); | fprintf(fichtm,"\n<li><h4> <a href=\"%s\">Matrix of variance-covariance of one-step probabilities (drawings)</a></h4> this page is important in order to visualize confidence intervals and especially correlation between disability and recovery, or more generally, way in and way back. %s</li>\n",optionfilehtmcov,optionfilehtmcov); |
| fprintf(fichtmcov,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Matrix of variance-covariance of pairs of step probabilities</h4>\n",optionfilehtmcov, optionfilehtmcov); | fprintf(fichtmcov,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Matrix of variance-covariance of pairs of step probabilities</h4>\n",optionfilehtmcov, optionfilehtmcov); |
| fprintf(fichtmcov,"\nEllipsoids of confidence centered on point (p<inf>ij</inf>, p<inf>kl</inf>) are estimated \ | fprintf(fichtmcov,"\nEllipsoids of confidence centered on point (p<inf>ij</inf>, p<inf>kl</inf>) are estimated \ |
| and drawn. It helps understanding how is the covariance between two incidences.\ | and drawn. It helps understanding how is the covariance between two incidences.\ |
| Line 5906 To be simple, these graphs help to under | Line 6445 To be simple, these graphs help to under |
| fprintf(ficgp,"\nset parametric;unset label"); | fprintf(ficgp,"\nset parametric;unset label"); |
| fprintf(ficgp,"\nset log y;set log x; set xlabel \"p%1d%1d (year-1)\";set ylabel \"p%1d%1d (year-1)\"",k1,l1,k2,l2); | fprintf(ficgp,"\nset log y;set log x; set xlabel \"p%1d%1d (year-1)\";set ylabel \"p%1d%1d (year-1)\"",k1,l1,k2,l2); |
| fprintf(ficgp,"\nset ter svg size 640, 480"); | fprintf(ficgp,"\nset ter svg size 640, 480"); |
| fprintf(fichtmcov,"\n<br>Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year<sup>-1</sup>\ | fprintf(fichtmcov,"\n<p><br>Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year<sup>-1</sup>\ |
| :<a href=\"%s_%d%1d%1d-%1d%1d.svg\"> \ | :<a href=\"%s_%d%1d%1d-%1d%1d.svg\"> \ |
| %s_%d%1d%1d-%1d%1d.svg</A>, ",k1,l1,k2,l2,\ | %s_%d%1d%1d-%1d%1d.svg</A>, ",k1,l1,k2,l2,\ |
| subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2, \ | subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2, \ |
| Line 5917 To be simple, these graphs help to under | Line 6456 To be simple, these graphs help to under |
| fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2); | fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2); |
| fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2); | fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2); |
| fprintf(ficgp,"\nplot [-pi:pi] %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not", \ | fprintf(ficgp,"\nplot [-pi:pi] %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not", \ |
| mu1,std,v11,sqrt(lc1),v12,sqrt(lc2), \ | mu1,std,v11,sqrt(lc1),v12,sqrt(fabs(lc2)), \ |
| mu2,std,v21,sqrt(lc1),v22,sqrt(lc2)); | mu2,std,v21,sqrt(lc1),v22,sqrt(fabs(lc2))); /* For gnuplot only */ |
| }else{ | }else{ |
| first=0; | first=0; |
| fprintf(fichtmcov," %d (%.3f),",(int) age, c12); | fprintf(fichtmcov," %d (%.3f),",(int) age, c12); |
| fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2); | fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2); |
| fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2); | fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2); |
| fprintf(ficgp,"\nreplot %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not", \ | fprintf(ficgp,"\nreplot %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not", \ |
| mu1,std,v11,sqrt(lc1),v12,sqrt(lc2), \ | mu1,std,v11,sqrt(lc1),v12,sqrt(fabs(lc2)), \ |
| mu2,std,v21,sqrt(lc1),v22,sqrt(lc2)); | mu2,std,v21,sqrt(lc1),v22,sqrt(fabs(lc2))); |
| }/* if first */ | }/* if first */ |
| } /* age mod 5 */ | } /* age mod 5 */ |
| } /* end loop age */ | } /* end loop age */ |
| Line 5954 To be simple, these graphs help to under | Line 6493 To be simple, these graphs help to under |
| void printinghtml(char fileresu[], char title[], char datafile[], int firstpass, \ | void printinghtml(char fileresu[], char title[], char datafile[], int firstpass, \ |
| int lastpass, int stepm, int weightopt, char model[],\ | int lastpass, int stepm, int weightopt, char model[],\ |
| int imx,int jmin, int jmax, double jmeanint,char rfileres[],\ | int imx,int jmin, int jmax, double jmeanint,char rfileres[],\ |
| int popforecast, int prevfcast, int backcast, int estepm , \ | int popforecast, int mobilav, int prevfcast, int mobilavproj, int backcast, int estepm , \ |
| double jprev1, double mprev1,double anprev1, double dateprev1, \ | double jprev1, double mprev1,double anprev1, double dateprev1, \ |
| double jprev2, double mprev2,double anprev2, double dateprev2){ | double jprev2, double mprev2,double anprev2, double dateprev2){ |
| int jj1, k1, i1, cpt; | int jj1, k1, i1, cpt, k4, nres; |
| fprintf(fichtm,"<ul><li><a href='#firstorder'>Result files (first order: no variance)</a>\n \ | fprintf(fichtm,"<ul><li><a href='#firstorder'>Result files (first order: no variance)</a>\n \ |
| <li><a href='#secondorder'>Result files (second order (variance)</a>\n \ | <li><a href='#secondorder'>Result files (second order (variance)</a>\n \ |
| </ul>"); | </ul>"); |
| fprintf(fichtm,"<ul><li> model=1+age+%s\n \ | |
| </ul>", model); | |
| fprintf(fichtm,"<ul><li><h4><a name='firstorder'>Result files (first order: no variance)</a></h4>\n"); | fprintf(fichtm,"<ul><li><h4><a name='firstorder'>Result files (first order: no variance)</a></h4>\n"); |
| fprintf(fichtm,"<li>- Observed frequency between two states (during the period defined between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf): <a href=\"%s\">%s</a> (html file)<br/>\n", | fprintf(fichtm,"<li>- Observed frequency between two states (during the period defined between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf): <a href=\"%s\">%s</a> (html file)<br/>\n", |
| jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,subdirfext3(optionfilefiname,"PHTMFR_",".htm"),subdirfext3(optionfilefiname,"PHTMFR_",".htm")); | jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,subdirfext3(optionfilefiname,"PHTMFR_",".htm"),subdirfext3(optionfilefiname,"PHTMFR_",".htm")); |
| Line 5990 void printinghtml(char fileresu[], char | Line 6531 void printinghtml(char fileresu[], char |
| <a href=\"%s\">%s</a> <br>\n</li>", subdirf2(fileresu,"F_"),subdirf2(fileresu,"F_")); | <a href=\"%s\">%s</a> <br>\n</li>", subdirf2(fileresu,"F_"),subdirf2(fileresu,"F_")); |
| } | } |
| fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>"); | |
| m=pow(2,cptcoveff); | m=pow(2,cptcoveff); |
| if (cptcovn < 1) {m=1;ncodemax[1]=1;} | if (cptcovn < 1) {m=1;ncodemax[1]=1;} |
| fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>"); | |
| jj1=0; | jj1=0; |
| for(k1=1; k1<=m;k1++){ | |
| fprintf(fichtm," \n<ul>"); | |
| for(nres=1; nres <= nresult; nres++) /* For each resultline */ | |
| for(k1=1; k1<=m;k1++){ /* For each combination of covariate */ | |
| if(m != 1 && TKresult[nres]!= k1) | |
| continue; | |
| jj1++; | |
| if (cptcovn > 0) { | |
| fprintf(fichtm,"\n<li><a size=\"1\" color=\"#EC5E5E\" href=\"#rescov"); | |
| for (cpt=1; cpt<=cptcoveff;cpt++){ | |
| fprintf(fichtm,"_V%d=%d_",Tvresult[nres][cpt],(int)Tresult[nres][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,"\">"); | |
| /* if(nqfveff+nqtveff 0) */ /* Test to be done */ | |
| fprintf(fichtm,"************ Results for covariates"); | |
| for (cpt=1; cpt<=cptcoveff;cpt++){ | |
| fprintf(fichtm," V%d=%d ",Tvresult[nres][cpt],(int)Tresult[nres][cpt]); | |
| } | |
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| fprintf(fichtm," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| if(invalidvarcomb[k1]){ | |
| fprintf(fichtm," Warning Combination (%d) ignored because no cases ",k1); | |
| continue; | |
| } | |
| fprintf(fichtm,"</a></li>"); | |
| } /* cptcovn >0 */ | |
| } | |
| fprintf(fichtm," \n</ul>"); | |
| jj1=0; | |
| for(nres=1; nres <= nresult; nres++) /* For each resultline */ | |
| for(k1=1; k1<=m;k1++){ /* For each combination of covariate */ | |
| if(m != 1 && TKresult[nres]!= k1) | |
| continue; | |
| /* for(i1=1; i1<=ncodemax[k1];i1++){ */ | /* for(i1=1; i1<=ncodemax[k1];i1++){ */ |
| jj1++; | jj1++; |
| if (cptcovn > 0) { | if (cptcovn > 0) { |
| fprintf(fichtm,"\n<p><a name=\"rescov"); | |
| for (cpt=1; cpt<=cptcoveff;cpt++){ | |
| fprintf(fichtm,"_V%d=%d_",Tvresult[nres][cpt],(int)Tresult[nres][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,"\"</a>"); | |
| fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); | fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); |
| for (cpt=1; cpt<=cptcoveff;cpt++){ | for (cpt=1; cpt<=cptcoveff;cpt++){ |
| fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]); | fprintf(fichtm," V%d=%d ",Tvresult[nres][cpt],(int)Tresult[nres][cpt]); |
| printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout); | printf(" V%d=%d ",Tvresult[nres][cpt],Tresult[nres][cpt]);fflush(stdout); |
| /* fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]); */ | |
| /* printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout); */ | |
| } | } |
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| fprintf(fichtm," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);fflush(stdout); | |
| } | |
| /* if(nqfveff+nqtveff 0) */ /* Test to be done */ | /* if(nqfveff+nqtveff 0) */ /* Test to be done */ |
| fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); | fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); |
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ |
| Line 6015 void printinghtml(char fileresu[], char | Line 6612 void printinghtml(char fileresu[], char |
| } | } |
| } | } |
| /* aij, bij */ | /* aij, bij */ |
| fprintf(fichtm,"<br>- Logit model (yours is: 1+age+%s), for example: logit(pij)=log(pij/pii)= aij+ bij age + V1 age + etc. as a function of age: <a href=\"%s_%d-1.svg\">%s_%d-1.svg</a><br> \ | fprintf(fichtm,"<br>- Logit model (yours is: logit(pij)=log(pij/pii)= aij+ bij age+%s) as a function of age: <a href=\"%s_%d-1-%d.svg\">%s_%d-1-%d.svg</a><br> \ |
| <img src=\"%s_%d-1.svg\">",model,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1); | <img src=\"%s_%d-1-%d.svg\">",model,subdirf2(optionfilefiname,"PE_"),k1,nres,subdirf2(optionfilefiname,"PE_"),k1,nres,subdirf2(optionfilefiname,"PE_"),k1,nres); |
| /* Pij */ | /* Pij */ |
| fprintf(fichtm,"<br>\n- P<sub>ij</sub> or conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s_%d-2.svg\">%s_%d-2.svg</a><br> \ | fprintf(fichtm,"<br>\n- P<sub>ij</sub> or conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s_%d-2-%d.svg\">%s_%d-2-%d.svg</a><br> \ |
| <img src=\"%s_%d-2.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1); | <img src=\"%s_%d-2-%d.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),k1,nres,subdirf2(optionfilefiname,"PE_"),k1,nres,subdirf2(optionfilefiname,"PE_"),k1,nres); |
| /* Quasi-incidences */ | /* Quasi-incidences */ |
| fprintf(fichtm,"<br>\n- I<sub>ij</sub> or Conditional probabilities to be observed in state j being in state i %d (stepm) months\ | fprintf(fichtm,"<br>\n- I<sub>ij</sub> or Conditional probabilities to be observed in state j being in state i %d (stepm) months\ |
| before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too, \ | before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too, \ |
| incidence (rates) are the limit when h tends to zero of the ratio of the probability <sub>h</sub>P<sub>ij</sub> \ | incidence (rates) are the limit when h tends to zero of the ratio of the probability <sub>h</sub>P<sub>ij</sub> \ |
| divided by h: <sub>h</sub>P<sub>ij</sub>/h : <a href=\"%s_%d-3.svg\">%s_%d-3.svg</a><br> \ | divided by h: <sub>h</sub>P<sub>ij</sub>/h : <a href=\"%s_%d-3-%d.svg\">%s_%d-3-%d.svg</a><br> \ |
| <img src=\"%s_%d-3.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1); | <img src=\"%s_%d-3-%d.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),k1,nres,subdirf2(optionfilefiname,"PE_"),k1,nres,subdirf2(optionfilefiname,"PE_"),k1,nres); |
| /* Survival functions (period) in state j */ | /* Survival functions (period) in state j */ |
| for(cpt=1; cpt<=nlstate;cpt++){ | for(cpt=1; cpt<=nlstate;cpt++){ |
| fprintf(fichtm,"<br>\n- Survival functions in state %d. Or probability to survive in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \ | fprintf(fichtm,"<br>\n- Survival functions in state %d. Or probability to survive in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d-%d.svg\">%s_%d-%d-%d.svg</a><br> \ |
| <img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"LIJ_"),cpt,jj1,subdirf2(optionfilefiname,"LIJ_"),cpt,jj1,subdirf2(optionfilefiname,"LIJ_"),cpt,jj1); | <img src=\"%s_%d-%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"LIJ_"),cpt,k1,nres,subdirf2(optionfilefiname,"LIJ_"),cpt,k1,nres,subdirf2(optionfilefiname,"LIJ_"),cpt,k1,nres); |
| } | } |
| /* State specific survival functions (period) */ | /* State specific survival functions (period) */ |
| for(cpt=1; cpt<=nlstate;cpt++){ | for(cpt=1; cpt<=nlstate;cpt++){ |
| fprintf(fichtm,"<br>\n- Survival functions from state %d in each live state and total.\ | fprintf(fichtm,"<br>\n- Survival functions from state %d in each live state and total.\ |
| Or probability to survive in various states (1 to %d) being in state %d at different ages. \ | Or probability to survive in various states (1 to %d) being in state %d at different ages. \ |
| <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> <img src=\"%s_%d-%d.svg\">", cpt, nlstate, cpt, subdirf2(optionfilefiname,"LIJT_"),cpt,jj1,subdirf2(optionfilefiname,"LIJT_"),cpt,jj1,subdirf2(optionfilefiname,"LIJT_"),cpt,jj1); | <a href=\"%s_%d-%d-%d.svg\">%s_%d%d-%d.svg</a><br> <img src=\"%s_%d-%d-%d.svg\">", cpt, nlstate, cpt, subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres,subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres,subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres); |
| } | } |
| /* Period (stable) prevalence in each health state */ | /* Period (stable) prevalence in each health state */ |
| for(cpt=1; cpt<=nlstate;cpt++){ | for(cpt=1; cpt<=nlstate;cpt++){ |
| fprintf(fichtm,"<br>\n- Convergence to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a><br> \ | fprintf(fichtm,"<br>\n- Convergence to period (stable) prevalence in state %d. Or probability for a person being in state (1 to %d) at different ages, to be in state %d some years after. <a href=\"%s_%d-%d-%d.svg\">%s_%d-%d-%d.svg</a><br> \ |
| <img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"P_"),cpt,jj1,subdirf2(optionfilefiname,"P_"),cpt,jj1,subdirf2(optionfilefiname,"P_"),cpt,jj1); | <img src=\"%s_%d-%d-%d.svg\">", cpt, nlstate, cpt, subdirf2(optionfilefiname,"P_"),cpt,k1,nres,subdirf2(optionfilefiname,"P_"),cpt,k1,nres,subdirf2(optionfilefiname,"P_"),cpt,k1,nres); |
| } | } |
| if(backcast==1){ | if(backcast==1){ |
| /* Period (stable) back prevalence in each health state */ | /* Period (stable) back prevalence in each health state */ |
| for(cpt=1; cpt<=nlstate;cpt++){ | for(cpt=1; cpt<=nlstate;cpt++){ |
| fprintf(fichtm,"<br>\n- Convergence to period (stable) back prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a><br> \ | fprintf(fichtm,"<br>\n- Convergence to mixed (stable) back prevalence in state %d. Or probability for a person to be in state %d at a younger age, knowing that she/he was in state (1 to %d) at different older ages. <a href=\"%s_%d-%d-%d.svg\">%s_%d-%d-%d.svg</a><br> \ |
| <img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"PB_"),cpt,jj1,subdirf2(optionfilefiname,"PB_"),cpt,jj1,subdirf2(optionfilefiname,"PB_"),cpt,jj1); | <img src=\"%s_%d-%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"PB_"),cpt,k1,nres,subdirf2(optionfilefiname,"PB_"),cpt,k1,nres,subdirf2(optionfilefiname,"PB_"),cpt,k1,nres); |
| } | } |
| } | } |
| if(prevfcast==1){ | if(prevfcast==1){ |
| /* Projection of prevalence up to period (stable) prevalence in each health state */ | /* Projection of prevalence up to period (stable) prevalence in each health state */ |
| for(cpt=1; cpt<=nlstate;cpt++){ | for(cpt=1; cpt<=nlstate;cpt++){ |
| fprintf(fichtm,"<br>\n- Projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f) up to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \ | fprintf(fichtm,"<br>\n- Projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f and mobil_average=%d) up to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d-%d.svg\">%s_%d-%d-%d.svg</a><br> \ |
| <img src=\"%s_%d-%d.svg\">", dateprev1, dateprev2, cpt, cpt, nlstate, subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1); | <img src=\"%s_%d-%d-%d.svg\">", dateprev1, dateprev2, mobilavproj, cpt, cpt, nlstate, subdirf2(optionfilefiname,"PROJ_"),cpt,k1,nres,subdirf2(optionfilefiname,"PROJ_"),cpt,k1,nres,subdirf2(optionfilefiname,"PROJ_"),cpt,k1,nres); |
| } | } |
| } | } |
| for(cpt=1; cpt<=nlstate;cpt++) { | for(cpt=1; cpt<=nlstate;cpt++) { |
| fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) (or area under each survival functions): <a href=\"%s_%d%d.svg\">%s_%d%d.svg</a> <br> \ | fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) (or area under each survival functions): <a href=\"%s_%d-%d-%d.svg\">%s_%d-%d-%d.svg</a> <br> \ |
| <img src=\"%s_%d%d.svg\">",cpt,nlstate,subdirf2(optionfilefiname,"EXP_"),cpt,jj1,subdirf2(optionfilefiname,"EXP_"),cpt,jj1,subdirf2(optionfilefiname,"EXP_"),cpt,jj1); | <img src=\"%s_%d-%d-%d.svg\">",cpt,nlstate,subdirf2(optionfilefiname,"EXP_"),cpt,k1,nres,subdirf2(optionfilefiname,"EXP_"),cpt,k1,nres,subdirf2(optionfilefiname,"EXP_"),cpt,k1,nres); |
| } | } |
| /* } /\* end i1 *\/ */ | /* } /\* end i1 *\/ */ |
| }/* End k1 */ | }/* End k1 */ |
| Line 6117 See page 'Matrix of variance-covariance | Line 6714 See page 'Matrix of variance-covariance |
| if (cptcovn < 1) {m=1;ncodemax[1]=1;} | if (cptcovn < 1) {m=1;ncodemax[1]=1;} |
| jj1=0; | jj1=0; |
| for(nres=1; nres <= nresult; nres++){ /* For each resultline */ | |
| for(k1=1; k1<=m;k1++){ | for(k1=1; k1<=m;k1++){ |
| if(m != 1 && TKresult[nres]!= k1) | |
| continue; | |
| /* for(i1=1; i1<=ncodemax[k1];i1++){ */ | /* for(i1=1; i1<=ncodemax[k1];i1++){ */ |
| jj1++; | jj1++; |
| if (cptcovn > 0) { | if (cptcovn > 0) { |
| fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); | fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); |
| for (cpt=1; cpt<=cptcoveff;cpt++) /**< cptcoveff number of variables */ | for (cpt=1; cpt<=cptcoveff;cpt++) /**< cptcoveff number of variables */ |
| fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]); | fprintf(fichtm," V%d=%d ",Tvresult[nres][cpt],Tresult[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," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); | fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); |
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ |
| Line 6132 See page 'Matrix of variance-covariance | Line 6738 See page 'Matrix of variance-covariance |
| } | } |
| } | } |
| for(cpt=1; cpt<=nlstate;cpt++) { | for(cpt=1; cpt<=nlstate;cpt++) { |
| fprintf(fichtm,"\n<br>- Observed (cross-sectional) and period (incidence based) \ | fprintf(fichtm,"\n<br>- Observed (cross-sectional with mov_average=%d) and period (incidence based) \ |
| prevalence (with 95%% confidence interval) in state (%d): <a href=\"%s_%d-%d.svg\"> %s_%d-%d.svg</a>\n <br>\ | prevalence (with 95%% confidence interval) in state (%d): <a href=\"%s_%d-%d-%d.svg\"> %s_%d-%d-%d.svg</a>\n <br>\ |
| <img src=\"%s_%d-%d.svg\">",cpt,subdirf2(optionfilefiname,"V_"),cpt,jj1,subdirf2(optionfilefiname,"V_"),cpt,jj1,subdirf2(optionfilefiname,"V_"),cpt,jj1); | <img src=\"%s_%d-%d-%d.svg\">",mobilav,cpt,subdirf2(optionfilefiname,"V_"),cpt,k1,nres,subdirf2(optionfilefiname,"V_"),cpt,k1,nres,subdirf2(optionfilefiname,"V_"),cpt,k1,nres); |
| } | } |
| fprintf(fichtm,"\n<br>- Total life expectancy by age and \ | fprintf(fichtm,"\n<br>- Total life expectancy by age and \ |
| health expectancies in states (1) and (2). If popbased=1 the smooth (due to the model) \ | health expectancies in states (1) and (2). If popbased=1 the smooth (due to the model) \ |
| true period expectancies (those weighted with period prevalences are also\ | true period expectancies (those weighted with period prevalences are also\ |
| drawn in addition to the population based expectancies computed using\ | drawn in addition to the population based expectancies computed using\ |
| observed and cahotic prevalences: <a href=\"%s_%d.svg\">%s_%d.svg</a>\n<br>\ | observed and cahotic prevalences: <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a>\n<br>\ |
| <img src=\"%s_%d.svg\">",subdirf2(optionfilefiname,"E_"),jj1,subdirf2(optionfilefiname,"E_"),jj1,subdirf2(optionfilefiname,"E_"),jj1); | <img src=\"%s_%d-%d.svg\">",subdirf2(optionfilefiname,"E_"),k1,nres,subdirf2(optionfilefiname,"E_"),k1,nres,subdirf2(optionfilefiname,"E_"),k1,nres); |
| /* } /\* end i1 *\/ */ | /* } /\* end i1 *\/ */ |
| }/* End k1 */ | }/* End k1 */ |
| }/* End nres */ | |
| fprintf(fichtm,"</ul>"); | fprintf(fichtm,"</ul>"); |
| fflush(fichtm); | fflush(fichtm); |
| } | } |
| /******************* Gnuplot file **************/ | /******************* Gnuplot file **************/ |
| void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar, double agemaxpar, double fage , int prevfcast, int backcast, char pathc[], double p[]){ | void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar, double agemaxpar, double fage , int prevfcast, int backcast, char pathc[], double p[], int offyear){ |
| char dirfileres[132],optfileres[132]; | char dirfileres[132],optfileres[132]; |
| char gplotcondition[132]; | char gplotcondition[132], gplotlabel[132]; |
| int cpt=0,k1=0,i=0,k=0,j=0,jk=0,k2=0,k3=0,ij=0,l=0; | int cpt=0,k1=0,i=0,k=0,j=0,jk=0,k2=0,k3=0,k4=0,ij=0, ijp=0, l=0; |
| int lv=0, vlv=0, kl=0; | int lv=0, vlv=0, kl=0; |
| int ng=0; | int ng=0; |
| int vpopbased; | int vpopbased; |
| int ioffset; /* variable offset for columns */ | int ioffset; /* variable offset for columns */ |
| int nres=0; /* Index of resultline */ | |
| int istart=1; /* For starting graphs in projections */ | |
| /* if((ficgp=fopen(optionfilegnuplot,"a"))==NULL) { */ | /* if((ficgp=fopen(optionfilegnuplot,"a"))==NULL) { */ |
| /* printf("Problem with file %s",optionfilegnuplot); */ | /* printf("Problem with file %s",optionfilegnuplot); */ |
| Line 6201 void printinggnuplot(char fileresu[], ch | Line 6810 void printinggnuplot(char fileresu[], ch |
| strcpy(dirfileres,optionfilefiname); | strcpy(dirfileres,optionfilefiname); |
| strcpy(optfileres,"vpl"); | strcpy(optfileres,"vpl"); |
| /* 1eme*/ | /* 1eme*/ |
| for (cpt=1; cpt<= nlstate ; cpt ++) { /* For each live state */ | for (cpt=1; cpt<= nlstate ; cpt ++){ /* For each live state */ |
| for (k1=1; k1<= m && selected(k1) ; k1 ++) { /* For each valid combination of covariate */ | for (k1=1; k1<= m ; k1 ++){ /* For each valid combination of covariate */ |
| /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */ | for(nres=1; nres <= nresult; nres++){ /* For each resultline */ |
| fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files "); | /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */ |
| for (k=1; k<=cptcoveff; k++){ /* For each covariate k get corresponding value lv for combination k1 */ | if(m != 1 && TKresult[nres]!= k1) |
| lv= decodtabm(k1,k,cptcoveff); /* Should be the value of the covariate corresponding to k1 combination */ | continue; |
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | /* We are interested in selected combination by the resultline */ |
| /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | /* printf("\n# 1st: Period (stable) prevalence with CI: 'VPL_' files and live state =%d ", cpt); */ |
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files and live state =%d ", cpt); |
| vlv= nbcode[Tvaraff[k]][lv]; /* vlv is the value of the covariate lv, 0 or 1 */ | strcpy(gplotlabel,"("); |
| /* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv */ | for (k=1; k<=cptcoveff; k++){ /* For each covariate k get corresponding value lv for combination k1 */ |
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | lv= decodtabm(k1,k,cptcoveff); /* Should be the value of the covariate corresponding to k1 combination */ |
| } | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ |
| fprintf(ficgp,"\n#\n"); | /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ |
| if(invalidvarcomb[k1]){ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | vlv= nbcode[Tvaraff[k]][lv]; /* vlv is the value of the covariate lv, 0 or 1 */ |
| continue; | /* 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); | |
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"V_"),cpt,k1); | sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); |
| fprintf(ficgp,"\n#set out \"V_%s_%d-%d.svg\" \n",optionfilefiname,cpt,k1); | } |
| fprintf(ficgp,"set xlabel \"Age\" \n\ | for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ |
| set ylabel \"Probability\" \n \ | /* printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); */ |
| set ter svg size 640, 480\n \ | fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); |
| plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"%%lf",ageminpar,fage,subdirf2(fileresu,"VPL_"),k1-1,k1-1); | sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); |
| } | |
| for (i=1; i<= nlstate ; i ++) { | strcpy(gplotlabel+strlen(gplotlabel),")"); |
| if (i==cpt) fprintf(ficgp," %%lf (%%lf)"); | /* printf("\n#\n"); */ |
| else fprintf(ficgp," %%*lf (%%*lf)"); | fprintf(ficgp,"\n#\n"); |
| } | if(invalidvarcomb[k1]){ |
| fprintf(ficgp,"\" t\"Period (stable) prevalence\" w l lt 0,\"%s\" every :::%d::%d u 1:($2+1.96*$3) \"%%lf",subdirf2(fileresu,"VPL_"),k1-1,k1-1); | /*k1=k1-1;*/ /* To be checked */ |
| for (i=1; i<= nlstate ; i ++) { | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); |
| if (i==cpt) fprintf(ficgp," %%lf (%%lf)"); | continue; |
| else fprintf(ficgp," %%*lf (%%*lf)"); | } |
| } | |
| fprintf(ficgp,"\" t\"95%% CI\" w l lt 1,\"%s\" every :::%d::%d u 1:($2-1.96*$3) \"%%lf",subdirf2(fileresu,"VPL_"),k1-1,k1-1); | fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"V_"),cpt,k1,nres); |
| for (i=1; i<= nlstate ; i ++) { | fprintf(ficgp,"\n#set out \"V_%s_%d-%d-%d.svg\" \n",optionfilefiname,cpt,k1,nres); |
| if (i==cpt) fprintf(ficgp," %%lf (%%lf)"); | fprintf(ficgp,"set label \"Alive state %d %s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",cpt,gplotlabel); |
| else fprintf(ficgp," %%*lf (%%*lf)"); | 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); */ |
| fprintf(ficgp,"\" t\"\" w l lt 1,\"%s\" every :::%d::%d u 1:($%d) t\"Observed prevalence\" w l lt 2",subdirf2(fileresu,"P_"),k1-1,k1-1,2+4*(cpt-1)); | /* k1-1 error should be nres-1*/ |
| if(backcast==1){ /* We need to get the corresponding values of the covariates involved in this combination k1 */ | for (i=1; i<= nlstate ; i ++) { |
| /* fprintf(ficgp,",\"%s\" every :::%d::%d u 1:($%d) t\"Backward stable prevalence\" w l lt 3",subdirf2(fileresu,"PLB_"),k1-1,k1-1,1+cpt); */ | if (i==cpt) fprintf(ficgp," %%lf (%%lf)"); |
| fprintf(ficgp,",\"%s\" u 1:((",subdirf2(fileresu,"PLB_")); /* Age is in 1 */ | else fprintf(ficgp," %%*lf (%%*lf)"); |
| if(cptcoveff ==0){ | } |
| fprintf(ficgp,"$%d)) t 'Backward prevalence in state %d' with line ", 2+(cpt-1), cpt ); | fprintf(ficgp,"\" t\"Period (stable) prevalence\" w l lt 0,\"%s\" every :::%d::%d u 1:($2==%d ? $3+1.96*$4 : 1/0) \"%%lf %%lf",subdirf2(fileresu,"VPL_"),nres-1,nres-1,nres); |
| for (i=1; i<= nlstate ; i ++) { | |
| if (i==cpt) fprintf(ficgp," %%lf (%%lf)"); | |
| else fprintf(ficgp," %%*lf (%%*lf)"); | |
| } | |
| fprintf(ficgp,"\" t\"95%% CI\" w l lt 1,\"%s\" every :::%d::%d u 1:($2==%d ? $3-1.96*$4 : 1/0) \"%%lf %%lf",subdirf2(fileresu,"VPL_"),nres-1,nres-1,nres); | |
| for (i=1; i<= nlstate ; i ++) { | |
| if (i==cpt) fprintf(ficgp," %%lf (%%lf)"); | |
| else fprintf(ficgp," %%*lf (%%*lf)"); | |
| } | |
| /* fprintf(ficgp,"\" t\"\" w l lt 1,\"%s\" every :::%d::%d u 1:($%d) t\"Observed prevalence\" w l lt 2",subdirf2(fileresu,"P_"),k1-1,k1-1,2+4*(cpt-1)); */ | |
| fprintf(ficgp,"\" t\"\" w l lt 1,\"%s\" u 1:((",subdirf2(fileresu,"P_")); | |
| if(cptcoveff ==0){ | |
| fprintf(ficgp,"$%d)) t 'Observed prevalence in state %d' with line lt 3", 2+(cpt-1), cpt ); | |
| }else{ | }else{ |
| kl=0; | kl=0; |
| for (k=1; k<=cptcoveff; k++){ /* For each combination of covariate */ | for (k=1; k<=cptcoveff; k++){ /* For each combination of covariate */ |
| Line 6261 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 6884 plot [%.f:%.f] \"%s\" every :::%d::%d u |
| /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ | /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ |
| /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/ | /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/ |
| if(k==cptcoveff){ | if(k==cptcoveff){ |
| fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \ | fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Observed prevalence in state %d' w l lt 2",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \ |
| 4+(cpt-1), cpt ); /* 4 or 6 ?*/ | 2+cptcoveff*2+3*(cpt-1), cpt ); /* 4 or 6 ?*/ |
| }else{ | }else{ |
| fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv]); | fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv]); |
| kl++; | kl++; |
| } | } |
| } /* end covariate */ | } /* end covariate */ |
| } /* end if no covariate */ | } /* end if no covariate */ |
| } /* end if backcast */ | |
| fprintf(ficgp,"\nset out \n"); | if(backcast==1){ /* We need to get the corresponding values of the covariates involved in this combination k1 */ |
| /* fprintf(ficgp,",\"%s\" every :::%d::%d u 1:($%d) t\"Backward stable prevalence\" w l lt 3",subdirf2(fileresu,"PLB_"),k1-1,k1-1,1+cpt); */ | |
| fprintf(ficgp,",\"%s\" u 1:((",subdirf2(fileresu,"PLB_")); /* Age is in 1, nres in 2 to be fixed */ | |
| if(cptcoveff ==0){ | |
| fprintf(ficgp,"$%d)) t 'Backward prevalence in state %d' with line lt 3", 2+(cpt-1), cpt ); | |
| }else{ | |
| kl=0; | |
| for (k=1; k<=cptcoveff; k++){ /* For each combination of covariate */ | |
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */ | |
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | |
| /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | |
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | |
| vlv= nbcode[Tvaraff[k]][lv]; | |
| kl++; | |
| /* 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 *\/ */ | |
| /*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */ | |
| /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ | |
| /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/ | |
| if(k==cptcoveff){ | |
| fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' w l lt 3",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \ | |
| 2+cptcoveff*2+(cpt-1), cpt ); /* 4 or 6 ?*/ | |
| }else{ | |
| fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv]); | |
| kl++; | |
| } | |
| } /* end covariate */ | |
| } /* end if no covariate */ | |
| } /* end if backcast */ | |
| fprintf(ficgp,"\nset out ;unset label;\n"); | |
| } /* nres */ | |
| } /* k1 */ | } /* k1 */ |
| } /* cpt */ | } /* cpt */ |
| /*2 eme*/ | |
| for (k1=1; k1<= m ; k1 ++) { | |
| fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files "); | |
| for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | |
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | |
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | |
| /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | |
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | |
| vlv= nbcode[Tvaraff[k]][lv]; | |
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | |
| } | |
| fprintf(ficgp,"\n#\n"); | |
| if(invalidvarcomb[k1]){ | |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | |
| continue; | |
| } | |
| fprintf(ficgp,"\nset out \"%s_%d.svg\" \n",subdirf2(optionfilefiname,"E_"),k1); | |
| for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/ | |
| if(vpopbased==0) | |
| fprintf(ficgp,"set ylabel \"Years\" \nset ter svg size 640, 480\nplot [%.f:%.f] ",ageminpar,fage); | |
| else | |
| fprintf(ficgp,"\nreplot "); | |
| for (i=1; i<= nlstate+1 ; i ++) { | |
| k=2*i; | |
| fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ?$4 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),k1-1,k1-1, vpopbased); | |
| for (j=1; j<= nlstate+1 ; j ++) { | |
| if (j==i) fprintf(ficgp," %%lf (%%lf)"); | |
| else fprintf(ficgp," %%*lf (%%*lf)"); | |
| } | |
| if (i== 1) fprintf(ficgp,"\" t\"TLE\" w l lt %d, \\\n",i); | |
| else fprintf(ficgp,"\" t\"LE in state (%d)\" w l lt %d, \\\n",i-1,i+1); | |
| fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ? $4-$5*2 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),k1-1,k1-1,vpopbased); | |
| for (j=1; j<= nlstate+1 ; j ++) { | |
| if (j==i) fprintf(ficgp," %%lf (%%lf)"); | |
| else fprintf(ficgp," %%*lf (%%*lf)"); | |
| } | |
| fprintf(ficgp,"\" t\"\" w l lt 0,"); | |
| fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ? $4+$5*2 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),k1-1,k1-1,vpopbased); | |
| for (j=1; j<= nlstate+1 ; j ++) { | |
| if (j==i) fprintf(ficgp," %%lf (%%lf)"); | |
| else fprintf(ficgp," %%*lf (%%*lf)"); | |
| } | |
| if (i== (nlstate+1)) fprintf(ficgp,"\" t\"\" w l lt 0"); | |
| else fprintf(ficgp,"\" t\"\" w l lt 0,\\\n"); | |
| } /* state */ | |
| } /* vpopbased */ | |
| fprintf(ficgp,"\nset out;set out \"%s_%d.svg\"; replot; set out; \n",subdirf2(optionfilefiname,"E_"),k1); /* Buggy gnuplot */ | |
| } /* k1 */ | |
| /*3eme*/ | |
| for (k1=1; k1<= m ; k1 ++) { | |
| for (cpt=1; cpt<= nlstate ; cpt ++) { | |
| fprintf(ficgp,"\n# 3d: Life expectancy with EXP_ files: cov=%d state=%d",k1, cpt); | /*2 eme*/ |
| for (k1=1; k1<= m ; k1 ++){ | |
| for(nres=1; nres <= nresult; nres++){ /* For each resultline */ | |
| 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 */ | 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= 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,1,4) = 1 because h=1 k= (1) 1 1 1 */ |
| Line 6337 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 6941 plot [%.f:%.f] \"%s\" every :::%d::%d u |
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ |
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; |
| fprintf(ficgp," 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(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"); | fprintf(ficgp,"\n#\n"); |
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); |
| continue; | continue; |
| } | } |
| /* k=2+nlstate*(2*cpt-2); */ | fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"E_"),k1,nres); |
| k=2+(nlstate+1)*(cpt-1); | for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/ |
| fprintf(ficgp,"\nset out \"%s_%d%d.svg\" \n",subdirf2(optionfilefiname,"EXP_"),cpt,k1); | fprintf(ficgp,"\nset label \"popbased %d %s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",vpopbased,gplotlabel); |
| fprintf(ficgp,"set ter svg size 640, 480\n\ | if(vpopbased==0){ |
| plot [%.f:%.f] \"%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",ageminpar,fage,subdirf2(fileresu,"E_"),k1-1,k1-1,k,cpt); | fprintf(ficgp,"set ylabel \"Years\" \nset ter svg size 640, 480\nplot [%.f:%.f] ",ageminpar,fage); |
| /*fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d-2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1); | }else |
| for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) "); | fprintf(ficgp,"\nreplot "); |
| fprintf(ficgp,"\" t \"e%d1\" w l",cpt); | for (i=1; i<= nlstate+1 ; i ++) { |
| fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d+2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1); | k=2*i; |
| for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) "); | fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ?$4 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),nres-1,nres-1, vpopbased); |
| fprintf(ficgp,"\" t \"e%d1\" w l",cpt); | for (j=1; j<= nlstate+1 ; j ++) { |
| if (j==i) fprintf(ficgp," %%lf (%%lf)"); | |
| else fprintf(ficgp," %%*lf (%%*lf)"); | |
| } | |
| if (i== 1) fprintf(ficgp,"\" t\"TLE\" w l lt %d, \\\n",i); | |
| else fprintf(ficgp,"\" t\"LE in state (%d)\" w l lt %d, \\\n",i-1,i+1); | |
| fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ? $4-$5*2 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),nres-1,nres-1,vpopbased); | |
| for (j=1; j<= nlstate+1 ; j ++) { | |
| if (j==i) fprintf(ficgp," %%lf (%%lf)"); | |
| else fprintf(ficgp," %%*lf (%%*lf)"); | |
| } | |
| fprintf(ficgp,"\" t\"\" w l lt 0,"); | |
| fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ? $4+$5*2 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),nres-1,nres-1,vpopbased); | |
| for (j=1; j<= nlstate+1 ; j ++) { | |
| if (j==i) fprintf(ficgp," %%lf (%%lf)"); | |
| else fprintf(ficgp," %%*lf (%%*lf)"); | |
| } | |
| if (i== (nlstate+1)) fprintf(ficgp,"\" t\"\" w l lt 0"); | |
| else fprintf(ficgp,"\" t\"\" w l lt 0,\\\n"); | |
| } /* state */ | |
| } /* 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*/ | |
| /*3eme*/ | |
| for (k1=1; k1<= m ; k1 ++){ | |
| for(nres=1; nres <= nresult; nres++){ /* For each resultline */ | |
| if(m != 1 && TKresult[nres]!= k1) | |
| continue; | |
| for (cpt=1; cpt<= nlstate ; cpt ++) { | |
| 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 */ | |
| /* 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]; | |
| 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][k4]); | |
| sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| strcpy(gplotlabel+strlen(gplotlabel),")"); | |
| fprintf(ficgp,"\n#\n"); | |
| if(invalidvarcomb[k1]){ | |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | |
| continue; | |
| } | |
| /* k=2+nlstate*(2*cpt-2); */ | |
| k=2+(nlstate+1)*(cpt-1); | |
| fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"EXP_"),cpt,k1,nres); | |
| fprintf(ficgp,"set label \"%s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",gplotlabel); | |
| fprintf(ficgp,"set ter svg size 640, 480\n\ | |
| plot [%.f:%.f] \"%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",ageminpar,fage,subdirf2(fileresu,"E_"),nres-1,nres-1,k,cpt); | |
| /*fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d-2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1); | |
| for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) "); | |
| fprintf(ficgp,"\" t \"e%d1\" w l",cpt); | |
| fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d+2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1); | |
| for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) "); | |
| fprintf(ficgp,"\" t \"e%d1\" w l",cpt); | |
| */ | */ |
| for (i=1; i< nlstate ; i ++) { | for (i=1; i< nlstate ; i ++) { |
| fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d%d\" w l",subdirf2(fileresu,"E_"),k1-1,k1-1,k+i,cpt,i+1); | fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d%d\" w l",subdirf2(fileresu,"E_"),nres-1,nres-1,k+i,cpt,i+1); |
| /* fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d%d\" w l",subdirf2(fileres,"e"),k1-1,k1-1,k+2*i,cpt,i+1);*/ | /* fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d%d\" w l",subdirf2(fileres,"e"),k1-1,k1-1,k+2*i,cpt,i+1);*/ |
| } | } |
| fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d.\" w l",subdirf2(fileresu,"E_"),k1-1,k1-1,k+nlstate,cpt); | fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d.\" w l",subdirf2(fileresu,"E_"),nres-1,nres-1,k+nlstate,cpt); |
| } | } |
| } | fprintf(ficgp,"\nunset label;\n"); |
| } /* end nres */ | |
| } /* end kl 3eme */ | |
| /* 4eme */ | /* 4eme */ |
| /* Survival functions (period) from state i in state j by initial state i */ | /* Survival functions (period) from state i in state j by initial state i */ |
| for (k1=1; k1<= m ; k1 ++) { /* For each multivariate if any */ | for (k1=1; k1<=m; k1++){ /* For each covariate and each value */ |
| for(nres=1; nres <= nresult; nres++){ /* For each resultline */ | |
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | if(m != 1 && TKresult[nres]!= k1) |
| 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= 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]; | |
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | |
| } | |
| fprintf(ficgp,"\n#\n"); | |
| if(invalidvarcomb[k1]){ | |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | |
| continue; | continue; |
| } | for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state cpt*/ |
| strcpy(gplotlabel,"("); | |
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJ_"),cpt,k1); | fprintf(ficgp,"\n#\n#\n# Survival functions in state j : 'LIJ_' files, cov=%d state=%d",k1, cpt); |
| fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\ | for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ |
| set ter svg size 640, 480\n \ | lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ |
| unset log y\n \ | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ |
| plot [%.f:%.f] ", ageminpar, agemaxpar); | /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ |
| k=3; | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ |
| for (i=1; i<= nlstate ; i ++){ | vlv= nbcode[Tvaraff[k]][lv]; |
| if(i==1){ | fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); |
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); | sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv); |
| }else{ | |
| fprintf(ficgp,", '' "); | |
| } | } |
| l=(nlstate+ndeath)*(i-1)+1; | for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ |
| fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); | fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); |
| for (j=2; j<= nlstate+ndeath ; j ++) | sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); |
| fprintf(ficgp,"+$%d",k+l+j-1); | } |
| fprintf(ficgp,")) t \"l(%d,%d)\" w l",i,cpt); | strcpy(gplotlabel+strlen(gplotlabel),")"); |
| } /* nlstate */ | fprintf(ficgp,"\n#\n"); |
| fprintf(ficgp,"\nset out\n"); | if(invalidvarcomb[k1]){ |
| } /* end cpt state*/ | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); |
| } /* end covariate */ | continue; |
| } | |
| fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJ_"),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 xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\ | |
| set ter svg size 640, 480\nunset log y\nplot [%.f:%.f] ", ageminpar, agemaxpar); | |
| k=3; | |
| for (i=1; i<= nlstate ; i ++){ | |
| if(i==1){ | |
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); | |
| }else{ | |
| fprintf(ficgp,", '' "); | |
| } | |
| l=(nlstate+ndeath)*(i-1)+1; | |
| fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); | |
| for (j=2; j<= nlstate+ndeath ; j ++) | |
| fprintf(ficgp,"+$%d",k+l+j-1); | |
| fprintf(ficgp,")) t \"l(%d,%d)\" w l",i,cpt); | |
| } /* nlstate */ | |
| fprintf(ficgp,"\nset out; unset label;\n"); | |
| } /* end cpt state*/ | |
| } /* end nres */ | |
| } /* end covariate k1 */ | |
| /* 5eme */ | /* 5eme */ |
| /* Survival functions (period) from state i in state j by final state j */ | /* Survival functions (period) from state i in state j by final state j */ |
| for (k1=1; k1<= m ; k1 ++) { /* For each covariate if any */ | for (k1=1; k1<= m ; k1++){ /* For each covariate combination if any */ |
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each inital state */ | for(nres=1; nres <= nresult; nres++){ /* For each resultline */ |
| if(m != 1 && TKresult[nres]!= k1) | |
| 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= 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]; | |
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | |
| } | |
| fprintf(ficgp,"\n#\n"); | |
| if(invalidvarcomb[k1]){ | |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | |
| continue; | 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= 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]; | |
| 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][k4]); | |
| sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| strcpy(gplotlabel+strlen(gplotlabel),")"); | |
| fprintf(ficgp,"\n#\n"); | |
| if(invalidvarcomb[k1]){ | |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | |
| continue; | |
| } | |
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJT_"),cpt,k1); | fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres); |
| fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\ | fprintf(ficgp,"set label \"Alive state %d %s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",cpt,gplotlabel); |
| set ter svg size 640, 480\n \ | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\ |
| unset log y\n \ | set ter svg size 640, 480\nunset log y\nplot [%.f:%.f] ", ageminpar, agemaxpar); |
| plot [%.f:%.f] ", ageminpar, agemaxpar); | k=3; |
| k=3; | for (j=1; j<= nlstate ; j ++){ /* Lived in state j */ |
| for (j=1; j<= nlstate ; j ++){ /* Lived in state j */ | if(j==1) |
| if(j==1) | fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); |
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); | else |
| else | fprintf(ficgp,", '' "); |
| fprintf(ficgp,", '' "); | l=(nlstate+ndeath)*(cpt-1) +j; |
| l=(nlstate+ndeath)*(cpt-1) +j; | fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l); |
| fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l); | /* for (i=2; i<= nlstate+ndeath ; i ++) */ |
| /* for (i=2; i<= nlstate+ndeath ; i ++) */ | /* fprintf(ficgp,"+$%d",k+l+i-1); */ |
| /* fprintf(ficgp,"+$%d",k+l+i-1); */ | fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j); |
| fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j); | } /* nlstate */ |
| } /* nlstate */ | fprintf(ficgp,", '' "); |
| fprintf(ficgp,", '' "); | fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):(",k1); |
| fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):(",k1); | for (j=1; j<= nlstate ; j ++){ /* Lived in state j */ |
| for (j=1; j<= nlstate ; j ++){ /* Lived in state j */ | l=(nlstate+ndeath)*(cpt-1) +j; |
| l=(nlstate+ndeath)*(cpt-1) +j; | if(j < nlstate) |
| if(j < nlstate) | fprintf(ficgp,"$%d +",k+l); |
| fprintf(ficgp,"$%d +",k+l); | else |
| else | fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt); |
| fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt); | } |
| } | fprintf(ficgp,"\nset out; unset label;\n"); |
| fprintf(ficgp,"\nset out\n"); | } /* end cpt state*/ |
| } /* end cpt state*/ | } /* end covariate */ |
| } /* end covariate */ | } /* end nres */ |
| /* 6eme */ | /* 6eme */ |
| /* CV preval stable (period) for each covariate */ | /* CV preval stable (period) for each covariate */ |
| for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */ | for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */ |
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | for(nres=1; nres <= nresult; nres++){ /* For each resultline */ |
| 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 (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt); | fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt); |
| for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | 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= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ |
| Line 6471 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7172 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ |
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; |
| fprintf(ficgp," 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 */ | |
| 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"); | fprintf(ficgp,"\n#\n"); |
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); |
| continue; | continue; |
| } | } |
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"P_"),cpt,k1); | fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"P_"),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 xlabel \"Age\" \nset ylabel \"Probability\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ |
| set ter svg size 640, 480\n \ | set ter svg size 640, 480\nunset log y\nplot [%.f:%.f] ", ageminpar, agemaxpar); |
| unset log y\n \ | |
| plot [%.f:%.f] ", ageminpar, agemaxpar); | |
| k=3; /* Offset */ | k=3; /* Offset */ |
| for (i=1; i<= nlstate ; i ++){ | for (i=1; i<= nlstate ; i ++){ /* State of origin */ |
| if(i==1) | if(i==1) |
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); | fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); |
| else | else |
| fprintf(ficgp,", '' "); | fprintf(ficgp,", '' "); |
| l=(nlstate+ndeath)*(i-1)+1; | l=(nlstate+ndeath)*(i-1)+1; /* 1, 1+ nlstate+ndeath, 1+2*(nlstate+ndeath) */ |
| fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); | fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); |
| for (j=2; j<= nlstate ; j ++) | for (j=2; j<= nlstate ; j ++) |
| fprintf(ficgp,"+$%d",k+l+j-1); | fprintf(ficgp,"+$%d",k+l+j-1); |
| fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt); | fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt); |
| } /* nlstate */ | } /* nlstate */ |
| fprintf(ficgp,"\nset out\n"); | fprintf(ficgp,"\nset out; unset label;\n"); |
| } /* end cpt state*/ | } /* end cpt state*/ |
| } /* end covariate */ | } /* end covariate */ |
| Line 6503 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7209 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| /* 7eme */ | /* 7eme */ |
| if(backcast == 1){ | if(backcast == 1){ |
| /* CV back preval stable (period) for each covariate */ | /* CV back preval stable (period) for each covariate */ |
| for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */ | for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */ |
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | for(nres=1; nres <= nresult; nres++){ /* For each resultline */ |
| fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt); | if(m != 1 && TKresult[nres]!= k1) |
| continue; | |
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life ending state */ | |
| strcpy(gplotlabel,"("); | |
| fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pijb' files, covariatecombination#=%d state=%d",k1, cpt); | |
| for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | 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= 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,1,4) = 1 because h=1 k= (1) 1 1 1 */ |
| Line 6513 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7223 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ |
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; |
| fprintf(ficgp," 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 */ | |
| 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"); | fprintf(ficgp,"\n#\n"); |
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); |
| continue; | continue; |
| } | } |
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1); | fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1,nres); |
| fprintf(ficgp,"set label \"Ending alive state %d %s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",cpt,gplotlabel); | |
| fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ |
| set ter svg size 640, 480\n \ | set ter svg size 640, 480\nunset log y\nplot [%.f:%.f] ", ageminpar, agemaxpar); |
| unset log y\n \ | |
| plot [%.f:%.f] ", ageminpar, agemaxpar); | |
| k=3; /* Offset */ | k=3; /* Offset */ |
| for (i=1; i<= nlstate ; i ++){ | for (i=1; i<= nlstate ; i ++){ /* State of origin */ |
| if(i==1) | if(i==1) |
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJB_")); | fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJB_")); |
| else | else |
| fprintf(ficgp,", '' "); | fprintf(ficgp,", '' "); |
| /* l=(nlstate+ndeath)*(i-1)+1; */ | /* l=(nlstate+ndeath)*(i-1)+1; */ |
| l=(nlstate+ndeath)*(cpt-1)+1; | l=(nlstate+ndeath)*(cpt-1)+1; /* fixed for i; cpt=1 1, cpt=2 1+ nlstate+ndeath, 1+2*(nlstate+ndeath) */ |
| /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); /\* a vérifier *\/ */ | /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); /\* a vérifier *\/ */ |
| /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l+(cpt-1)+i-1); /\* a vérifier *\/ */ | /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l+(cpt-1)+i-1); /\* a vérifier *\/ */ |
| fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d",k1,k+l+(cpt-1)+i-1); /* a vérifier */ | fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d",k1,k+l+i-1); /* To be verified */ |
| /* for (j=2; j<= nlstate ; j ++) */ | /* for (j=2; j<= nlstate ; j ++) */ |
| /* fprintf(ficgp,"+$%d",k+l+j-1); */ | /* fprintf(ficgp,"+$%d",k+l+j-1); */ |
| /* /\* fprintf(ficgp,"+$%d",k+l+j-1); *\/ */ | /* /\* fprintf(ficgp,"+$%d",k+l+j-1); *\/ */ |
| fprintf(ficgp,") t \"bprev(%d,%d)\" w l",i,cpt); | fprintf(ficgp,") t \"bprev(%d,%d)\" w l",i,cpt); |
| } /* nlstate */ | } /* nlstate */ |
| fprintf(ficgp,"\nset out\n"); | fprintf(ficgp,"\nset out; unset label;\n"); |
| } /* end cpt state*/ | } /* end cpt state*/ |
| } /* end covariate */ | } /* end covariate */ |
| } /* End if backcast */ | } /* End if backcast */ |
| Line 6550 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7265 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| if(prevfcast==1){ | if(prevfcast==1){ |
| /* Projection from cross-sectional to stable (period) for each covariate */ | /* Projection from cross-sectional to stable (period) for each covariate */ |
| for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */ | 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; | |
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ |
| strcpy(gplotlabel,"("); | |
| fprintf(ficgp,"\n#\n#\n#Projection of prevalence to stable (period): 'PROJ_' files, covariatecombination#=%d state=%d",k1, cpt); | fprintf(ficgp,"\n#\n#\n#Projection of prevalence to stable (period): 'PROJ_' files, covariatecombination#=%d state=%d",k1, cpt); |
| for (k=1; k<=cptcoveff; k++){ /* For each correspondig covariate value */ | 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= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */ |
| Line 6560 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7279 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ |
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; |
| fprintf(ficgp," 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 */ | |
| 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"); | fprintf(ficgp,"\n#\n"); |
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ |
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); |
| Line 6568 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7293 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| } | } |
| fprintf(ficgp,"# hpijx=probability over h years, hp.jx is weighted by observed prev\n "); | fprintf(ficgp,"# hpijx=probability over h years, hp.jx is weighted by observed prev\n "); |
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PROJ_"),cpt,k1); | fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"PROJ_"),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 xlabel \"Age\" \nset ylabel \"Prevalence\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Prevalence\" \n\ |
| set ter svg size 640, 480\n \ | set ter svg size 640, 480\nunset log y\nplot [%.f:%.f] ", ageminpar, agemaxpar); |
| unset log y\n \ | |
| plot [%.f:%.f] ", ageminpar, agemaxpar); | /* for (i=1; i<= nlstate+1 ; i ++){ /\* nlstate +1 p11 p21 p.1 *\/ */ |
| for (i=1; i<= nlstate+1 ; i ++){ /* nlstate +1 p11 p21 p.1 */ | istart=nlstate+1; /* Could be one if by state, but nlstate+1 is w.i projection only */ |
| /*istart=1;*/ /* Could be one if by state, but nlstate+1 is w.i projection only */ | |
| for (i=istart; i<= nlstate+1 ; i ++){ /* nlstate +1 p11 p21 p.1 */ | |
| /*# V1 = 1 V2 = 0 yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ | /*# V1 = 1 V2 = 0 yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ |
| /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ | /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ |
| /*# yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ | /*# yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ |
| /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ | /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ |
| if(i==1){ | if(i==istart){ |
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"F_")); | fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"F_")); |
| }else{ | }else{ |
| fprintf(ficgp,",\\\n '' "); | fprintf(ficgp,",\\\n '' "); |
| Line 6590 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7318 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| /*# V1 = 1 yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/ | /*# V1 = 1 yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/ |
| /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */ | /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */ |
| fprintf(ficgp," u %d:(", ioffset); | fprintf(ficgp," u %d:(", ioffset); |
| if(i==nlstate+1) | if(i==nlstate+1){ |
| fprintf(ficgp," $%d/(1.-$%d)) t 'pw.%d' with line ", \ | fprintf(ficgp," $%d/(1.-$%d)):5 t 'pw.%d' with line lc variable ", \ |
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); | ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); |
| else | fprintf(ficgp,",\\\n '' "); |
| fprintf(ficgp," u %d:(",ioffset); | |
| fprintf(ficgp," (($5-$6) == %d ) ? $%d/(1.-$%d) : 1/0):5 with labels center not ", \ | |
| offyear, \ | |
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); | |
| }else | |
| fprintf(ficgp," $%d/(1.-$%d)) t 'p%d%d' with line ", \ | fprintf(ficgp," $%d/(1.-$%d)) t 'p%d%d' with line ", \ |
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,i,cpt ); | ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,i,cpt ); |
| }else{ /* more than 2 covariates */ | }else{ /* more than 2 covariates */ |
| Line 6625 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7358 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ | /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ |
| /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/ | /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/ |
| if(i==nlstate+1){ | if(i==nlstate+1){ |
| fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p.%d' with line ", gplotcondition, \ | fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0):5 t 'p.%d' with line lc variable", gplotcondition, \ |
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); | |
| fprintf(ficgp,",\\\n '' "); | |
| fprintf(ficgp," u %d:(",ioffset); | |
| fprintf(ficgp,"%s && (($5-$6) == %d ) ? $%d/(1.-$%d) : 1/0):5 with labels center not ", gplotcondition, \ | |
| offyear, \ | |
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); | ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); |
| /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0) && (($5-$6) == 1947) ? $10/(1.-$22) : 1/0):5 with labels center boxed not*/ | |
| }else{ | }else{ |
| fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ", gplotcondition, \ | fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ", gplotcondition, \ |
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt ); | ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt ); |
| } | } |
| } /* end if covariate */ | } /* end if covariate */ |
| } /* nlstate */ | } /* nlstate */ |
| fprintf(ficgp,"\nset out\n"); | fprintf(ficgp,"\nset out; unset label;\n"); |
| } /* end cpt state*/ | } /* end cpt state*/ |
| } /* end covariate */ | } /* end covariate */ |
| } /* End if prevfcast */ | } /* End if prevfcast */ |
| /* proba elementaires */ | /* 9eme writing MLE parameters */ |
| fprintf(ficgp,"\n##############\n#MLE estimated parameters\n#############\n"); | fprintf(ficgp,"\n##############\n#9eme MLE estimated parameters\n#############\n"); |
| for(i=1,jk=1; i <=nlstate; i++){ | for(i=1,jk=1; i <=nlstate; i++){ |
| fprintf(ficgp,"# initial state %d\n",i); | fprintf(ficgp,"# initial state %d\n",i); |
| for(k=1; k <=(nlstate+ndeath); k++){ | for(k=1; k <=(nlstate+ndeath); k++){ |
| Line 6657 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7396 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| fprintf(ficgp,"##############\n#\n"); | fprintf(ficgp,"##############\n#\n"); |
| /*goto avoid;*/ | /*goto avoid;*/ |
| fprintf(ficgp,"\n##############\n#Graphics of probabilities or incidences\n#############\n"); | /* 10eme Graphics of probabilities or incidences using written MLE parameters */ |
| fprintf(ficgp,"\n##############\n#10eme Graphics of probabilities or incidences\n#############\n"); | |
| fprintf(ficgp,"# logi(p12/p11)=a12+b12*age+c12age*age+d12*V1+e12*V1*age\n"); | fprintf(ficgp,"# logi(p12/p11)=a12+b12*age+c12age*age+d12*V1+e12*V1*age\n"); |
| fprintf(ficgp,"# logi(p12/p11)=p1 +p2*age +p3*age*age+ p4*V1+ p5*V1*age\n"); | fprintf(ficgp,"# logi(p12/p11)=p1 +p2*age +p3*age*age+ p4*V1+ p5*V1*age\n"); |
| fprintf(ficgp,"# logi(p13/p11)=a13+b13*age+c13age*age+d13*V1+e13*V1*age\n"); | fprintf(ficgp,"# logi(p13/p11)=a13+b13*age+c13age*age+d13*V1+e13*V1*age\n"); |
| Line 6672 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7412 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| fprintf(ficgp,"# +exp(a14+b14*age+c14age*age+d14*V1+e14*V1*age)+...)\n"); | fprintf(ficgp,"# +exp(a14+b14*age+c14age*age+d14*V1+e14*V1*age)+...)\n"); |
| fprintf(ficgp,"#\n"); | fprintf(ficgp,"#\n"); |
| for(ng=1; ng<=3;ng++){ /* Number of graphics: first is logit, 2nd is probabilities, third is incidences per year*/ | for(ng=1; ng<=3;ng++){ /* Number of graphics: first is logit, 2nd is probabilities, third is incidences per year*/ |
| fprintf(ficgp,"# ng=%d\n",ng); | fprintf(ficgp,"#Number of graphics: first is logit, 2nd is probabilities, third is incidences per year\n"); |
| fprintf(ficgp,"# jk=1 to 2^%d=%d\n",cptcoveff,m); | fprintf(ficgp,"#model=%s \n",model); |
| for(jk=1; jk <=m; jk++) { | fprintf(ficgp,"# Type of graphic ng=%d\n",ng); |
| fprintf(ficgp,"# jk=%d\n",jk); | fprintf(ficgp,"# k1=1 to 2^%d=%d\n",cptcoveff,m);/* to be checked */ |
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" ",subdirf2(optionfilefiname,"PE_"),jk,ng); | 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); | |
| 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 */ | |
| /* 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]; | |
| 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][k4]); | |
| sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[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); | |
| fprintf(ficgp,"\nset label \"%s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",gplotlabel); | |
| fprintf(ficgp,"\nset ter svg size 640, 480 "); | fprintf(ficgp,"\nset ter svg size 640, 480 "); |
| if (ng==1){ | if (ng==1){ |
| fprintf(ficgp,"\nset ylabel \"Value of the logit of the model\"\n"); /* exp(a12+b12*x) could be nice */ | fprintf(ficgp,"\nset ylabel \"Value of the logit of the model\"\n"); /* exp(a12+b12*x) could be nice */ |
| Line 6716 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7479 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| break; | break; |
| } | } |
| ij=1;/* To be checked else nbcode[0][0] wrong */ | ij=1;/* To be checked else nbcode[0][0] wrong */ |
| for(j=3; j <=ncovmodel-nagesqr; j++) { | ijp=1; /* product no age */ |
| /* for(j=3; j <=ncovmodel-nagesqr; j++) { */ | |
| for(j=1; j <=cptcovt; j++) { /* For each covariate of the simplified model */ | |
| /* printf("Tage[%d]=%d, j=%d\n", ij, Tage[ij], j); */ | /* printf("Tage[%d]=%d, j=%d\n", ij, Tage[ij], j); */ |
| if(ij <=cptcovage) { /* Bug valgrind */ | if(j==Tage[ij]) { /* Product by age */ |
| if((j-2)==Tage[ij]) { /* Bug valgrind */ | if(ij <=cptcovage) { /* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, 2 V5 and V1 */ |
| fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); | if(DummyV[j]==0){ |
| /* fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,Tvar[j-2])]); */ | fprintf(ficgp,"+p%d*%d*x",i+j+2+nagesqr-1,Tinvresult[nres][Tvar[j]]);; |
| }else{ /* quantitative */ | |
| fprintf(ficgp,"+p%d*%f*x",i+j+2+nagesqr-1,Tqinvresult[nres][Tvar[j]]); /* Tqinvresult in decoderesult */ | |
| /* fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(k1,Tvar[j-2])]); */ | |
| } | |
| ij++; | ij++; |
| } | } |
| } | }else if(j==Tprod[ijp]) { /* */ |
| else | /* printf("Tprod[%d]=%d, j=%d\n", ij, Tprod[ijp], j); */ |
| fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); /* Valgrind bug nbcode */ | if(ijp <=cptcovprod) { /* Product */ |
| } | if(DummyV[Tvard[ijp][1]]==0){/* Vn is dummy */ |
| if(DummyV[Tvard[ijp][2]]==0){/* Vn and Vm are dummy */ | |
| /* fprintf(ficgp,"+p%d*%d*%d",i+j+2+nagesqr-1,nbcode[Tvard[ijp][1]][codtabm(k1,j)],nbcode[Tvard[ijp][2]][codtabm(k1,j)]); */ | |
| fprintf(ficgp,"+p%d*%d*%d",i+j+2+nagesqr-1,Tinvresult[nres][Tvard[ijp][1]],Tinvresult[nres][Tvard[ijp][2]]); | |
| }else{ /* Vn is dummy and Vm is quanti */ | |
| /* fprintf(ficgp,"+p%d*%d*%f",i+j+2+nagesqr-1,nbcode[Tvard[ijp][1]][codtabm(k1,j)],Tqinvresult[nres][Tvard[ijp][2]]); */ | |
| fprintf(ficgp,"+p%d*%d*%f",i+j+2+nagesqr-1,Tinvresult[nres][Tvard[ijp][1]],Tqinvresult[nres][Tvard[ijp][2]]); | |
| } | |
| }else{ /* Vn*Vm Vn is quanti */ | |
| if(DummyV[Tvard[ijp][2]]==0){ | |
| fprintf(ficgp,"+p%d*%d*%f",i+j+2+nagesqr-1,Tinvresult[nres][Tvard[ijp][2]],Tqinvresult[nres][Tvard[ijp][1]]); | |
| }else{ /* Both quanti */ | |
| fprintf(ficgp,"+p%d*%f*%f",i+j+2+nagesqr-1,Tqinvresult[nres][Tvard[ijp][1]],Tqinvresult[nres][Tvard[ijp][2]]); | |
| } | |
| } | |
| ijp++; | |
| } | |
| } else{ /* simple covariate */ | |
| /* fprintf(ficgp,"+p%d*%d",i+j+2+nagesqr-1,nbcode[Tvar[j]][codtabm(k1,j)]); /\* Valgrind bug nbcode *\/ */ | |
| if(Dummy[j]==0){ | |
| fprintf(ficgp,"+p%d*%d",i+j+2+nagesqr-1,Tinvresult[nres][Tvar[j]]); /* */ | |
| }else{ /* quantitative */ | |
| fprintf(ficgp,"+p%d*%f",i+j+2+nagesqr-1,Tqinvresult[nres][Tvar[j]]); /* */ | |
| /* fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(k1,Tvar[j-2])]); */ | |
| } | |
| } /* end simple */ | |
| } /* end j */ | |
| }else{ | }else{ |
| i=i-ncovmodel; | i=i-ncovmodel; |
| if(ng !=1 ) /* For logit formula of log p11 is more difficult to get */ | if(ng !=1 ) /* For logit formula of log p11 is more difficult to get */ |
| Line 6737 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7532 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| if(ng != 1){ | if(ng != 1){ |
| fprintf(ficgp,")/(1"); | fprintf(ficgp,")/(1"); |
| for(k1=1; k1 <=nlstate; k1++){ | for(cpt=1; cpt <=nlstate; cpt++){ |
| if(nagesqr==0) | if(nagesqr==0) |
| fprintf(ficgp,"+exp(p%d+p%d*x",k3+(k1-1)*ncovmodel,k3+(k1-1)*ncovmodel+1); | fprintf(ficgp,"+exp(p%d+p%d*x",k3+(cpt-1)*ncovmodel,k3+(cpt-1)*ncovmodel+1); |
| else /* nagesqr =1 */ | else /* nagesqr =1 */ |
| fprintf(ficgp,"+exp(p%d+p%d*x+p%d*x*x",k3+(k1-1)*ncovmodel,k3+(k1-1)*ncovmodel+1,k3+(k1-1)*ncovmodel+1+nagesqr); | fprintf(ficgp,"+exp(p%d+p%d*x+p%d*x*x",k3+(cpt-1)*ncovmodel,k3+(cpt-1)*ncovmodel+1,k3+(cpt-1)*ncovmodel+1+nagesqr); |
| ij=1; | ij=1; |
| for(j=3; j <=ncovmodel-nagesqr; j++){ | for(j=3; j <=ncovmodel-nagesqr; j++){ |
| if(ij <=cptcovage) { /* Bug valgrind */ | if((j-2)==Tage[ij]) { /* Bug valgrind */ |
| if((j-2)==Tage[ij]) { /* Bug valgrind */ | if(ij <=cptcovage) { /* Bug valgrind */ |
| fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); | fprintf(ficgp,"+p%d*%d*x",k3+(cpt-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(k1,j-2)]); |
| /* fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,Tvar[j-2])]); */ | /* fprintf(ficgp,"+p%d*%d*x",k3+(cpt-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(k1,Tvar[j-2])]); */ |
| ij++; | ij++; |
| } | } |
| } | } |
| else | else |
| fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);/* Valgrind bug nbcode */ | fprintf(ficgp,"+p%d*%d",k3+(cpt-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(k1,j-2)]);/* Valgrind bug nbcode */ |
| } | } |
| fprintf(ficgp,")"); | fprintf(ficgp,")"); |
| } | } |
| Line 6773 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7568 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| i=i+ncovmodel; | i=i+ncovmodel; |
| } /* end k */ | } /* end k */ |
| } /* end k2 */ | } /* end k2 */ |
| fprintf(ficgp,"\n set out\n"); | fprintf(ficgp,"\n set out; unset label;\n"); |
| } /* end jk */ | } /* end k1 */ |
| } /* end ng */ | } /* end ng */ |
| /* avoid: */ | /* avoid: */ |
| fflush(ficgp); | fflush(ficgp); |
| Line 6790 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7585 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| int mobilavrange, mob; | int mobilavrange, mob; |
| int iage=0; | int iage=0; |
| double sum=0.; | double sum=0., sumr=0.; |
| double age; | double age; |
| double *sumnewp, *sumnewm; | double *sumnewp, *sumnewm, *sumnewmr; |
| double *agemingood, *agemaxgood; /* Currently identical for all covariates */ | double *agemingood, *agemaxgood; |
| double *agemingoodr, *agemaxgoodr; | |
| /* modcovmax=2*cptcoveff;/\* Max number of modalities. We suppose */ | /* modcovmax=2*cptcoveff;/\* Max number of modalities. We suppose */ |
| Line 6801 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7597 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| sumnewp = vector(1,ncovcombmax); | sumnewp = vector(1,ncovcombmax); |
| sumnewm = vector(1,ncovcombmax); | sumnewm = vector(1,ncovcombmax); |
| sumnewmr = vector(1,ncovcombmax); | |
| agemingood = vector(1,ncovcombmax); | agemingood = vector(1,ncovcombmax); |
| agemingoodr = vector(1,ncovcombmax); | |
| agemaxgood = vector(1,ncovcombmax); | agemaxgood = vector(1,ncovcombmax); |
| agemaxgoodr = vector(1,ncovcombmax); | |
| for (cptcod=1;cptcod<=ncovcombmax;cptcod++){ | for (cptcod=1;cptcod<=ncovcombmax;cptcod++){ |
| sumnewm[cptcod]=0.; | sumnewm[cptcod]=0.; sumnewmr[cptcod]=0.; |
| sumnewp[cptcod]=0.; | sumnewp[cptcod]=0.; |
| agemingood[cptcod]=0; | agemingood[cptcod]=0, agemingoodr[cptcod]=0; |
| agemaxgood[cptcod]=0; | agemaxgood[cptcod]=0, agemaxgoodr[cptcod]=0; |
| } | } |
| if (cptcovn<1) ncovcombmax=1; /* At least 1 pass */ | if (cptcovn<1) ncovcombmax=1; /* At least 1 pass */ |
| if(mobilav==1||mobilav ==3 ||mobilav==5 ||mobilav== 7){ | if(mobilav==-1 || mobilav==1||mobilav ==3 ||mobilav==5 ||mobilav== 7){ |
| if(mobilav==1) mobilavrange=5; /* default */ | if(mobilav==1 || mobilav==-1) mobilavrange=5; /* default */ |
| else mobilavrange=mobilav; | else mobilavrange=mobilav; |
| for (age=bage; age<=fage; age++) | for (age=bage; age<=fage; age++) |
| for (i=1; i<=nlstate;i++) | for (i=1; i<=nlstate;i++) |
| Line 6825 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7624 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| */ | */ |
| for (mob=3;mob <=mobilavrange;mob=mob+2){ | for (mob=3;mob <=mobilavrange;mob=mob+2){ |
| for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){ | for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){ |
| for (i=1; i<=nlstate;i++){ | for (cptcod=1;cptcod<=ncovcombmax;cptcod++){ |
| for (cptcod=1;cptcod<=ncovcombmax;cptcod++){ | sumnewm[cptcod]=0.; |
| for (i=1; i<=nlstate;i++){ | |
| mobaverage[(int)age][i][cptcod] =probs[(int)age][i][cptcod]; | mobaverage[(int)age][i][cptcod] =probs[(int)age][i][cptcod]; |
| for (cpt=1;cpt<=(mob-1)/2;cpt++){ | for (cpt=1;cpt<=(mob-1)/2;cpt++){ |
| mobaverage[(int)age][i][cptcod] +=probs[(int)age-cpt][i][cptcod]; | mobaverage[(int)age][i][cptcod] +=probs[(int)age-cpt][i][cptcod]; |
| mobaverage[(int)age][i][cptcod] +=probs[(int)age+cpt][i][cptcod]; | mobaverage[(int)age][i][cptcod] +=probs[(int)age+cpt][i][cptcod]; |
| } | } |
| mobaverage[(int)age][i][cptcod]=mobaverage[(int)age][i][cptcod]/mob; | mobaverage[(int)age][i][cptcod]=mobaverage[(int)age][i][cptcod]/mob; |
| } | sumnewm[cptcod]+=mobaverage[(int)age][i][cptcod]; |
| } | } /* end i */ |
| if(sumnewm[cptcod] >1.e-3) mobaverage[(int)age][i][cptcod]=mobaverage[(int)age][i][cptcod]/sumnewm[cptcod]; /* Rescaling to sum one */ | |
| } /* end cptcod */ | |
| }/* end age */ | }/* end age */ |
| }/* end mob */ | }/* end mob */ |
| }else | }else{ |
| printf("Error internal in movingaverage, mobilav=%d.\n",mobilav); | |
| return -1; | return -1; |
| for (cptcod=1;cptcod<=ncovcombmax;cptcod++){ | } |
| for (cptcod=1;cptcod<=ncovcombmax;cptcod++){ /* for each combination */ | |
| /* for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){ */ | /* for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){ */ |
| if(invalidvarcomb[cptcod]){ | if(invalidvarcomb[cptcod]){ |
| printf("\nCombination (%d) ignored because no cases \n",cptcod); | printf("\nCombination (%d) ignored because no cases \n",cptcod); |
| continue; | continue; |
| } | } |
| agemingood[cptcod]=fage-(mob-1)/2; | for (age=fage-(mob-1)/2; age>=bage+(mob-1)/2; age--){ /*looking for the youngest and oldest good age */ |
| for (age=fage-(mob-1)/2; age>=bage; age--){/* From oldest to youngest, finding the youngest wrong */ | |
| sumnewm[cptcod]=0.; | sumnewm[cptcod]=0.; |
| sumnewmr[cptcod]=0.; | |
| for (i=1; i<=nlstate;i++){ | for (i=1; i<=nlstate;i++){ |
| sumnewm[cptcod]+=mobaverage[(int)age][i][cptcod]; | sumnewm[cptcod]+=mobaverage[(int)age][i][cptcod]; |
| sumnewmr[cptcod]+=probs[(int)age][i][cptcod]; | |
| } | |
| if(fabs(sumnewmr[cptcod] - 1.) <= 1.e-3) { /* good without smoothing */ | |
| agemingoodr[cptcod]=age; | |
| } | } |
| if(fabs(sumnewm[cptcod] - 1.) <= 1.e-3) { /* good */ | if(fabs(sumnewm[cptcod] - 1.) <= 1.e-3) { /* good */ |
| agemingood[cptcod]=age; | agemingood[cptcod]=age; |
| }else{ /* bad */ | } |
| for (i=1; i<=nlstate;i++){ | } /* age */ |
| mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemingood[cptcod]][i][cptcod]; | for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){ /*looking for the youngest and oldest good age */ |
| } /* i */ | |
| } /* end bad */ | |
| }/* age */ | |
| sum=0.; | |
| for (i=1; i<=nlstate;i++){ | |
| sum+=mobaverage[(int)agemingood[cptcod]][i][cptcod]; | |
| } | |
| if(fabs(sum - 1.) > 1.e-3) { /* bad */ | |
| printf("For this combination of covariate cptcod=%d, we can't get a smoothed prevalence which sums to one at any descending age!\n",cptcod); | |
| /* for (i=1; i<=nlstate;i++){ */ | |
| /* mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemingood[cptcod]][i][cptcod]; */ | |
| /* } /\* i *\/ */ | |
| } /* end bad */ | |
| /* else{ /\* We found some ages summing to one, we will smooth the oldest *\/ */ | |
| /* From youngest, finding the oldest wrong */ | |
| agemaxgood[cptcod]=bage+(mob-1)/2; | |
| for (age=bage+(mob-1)/2; age<=fage; age++){ | |
| sumnewm[cptcod]=0.; | sumnewm[cptcod]=0.; |
| sumnewmr[cptcod]=0.; | |
| for (i=1; i<=nlstate;i++){ | for (i=1; i<=nlstate;i++){ |
| sumnewm[cptcod]+=mobaverage[(int)age][i][cptcod]; | sumnewm[cptcod]+=mobaverage[(int)age][i][cptcod]; |
| sumnewmr[cptcod]+=probs[(int)age][i][cptcod]; | |
| } | |
| if(fabs(sumnewmr[cptcod] - 1.) <= 1.e-3) { /* good without smoothing */ | |
| agemaxgoodr[cptcod]=age; | |
| } | } |
| if(fabs(sumnewm[cptcod] - 1.) <= 1.e-3) { /* good */ | if(fabs(sumnewm[cptcod] - 1.) <= 1.e-3) { /* good */ |
| agemaxgood[cptcod]=age; | agemaxgood[cptcod]=age; |
| }else{ /* bad */ | } |
| for (i=1; i<=nlstate;i++){ | } /* age */ |
| mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemaxgood[cptcod]][i][cptcod]; | /* Thus we have agemingood and agemaxgood as well as goodr for raw (preobs) */ |
| } /* i */ | /* but they will change */ |
| for (age=fage-(mob-1)/2; age>=bage; age--){/* From oldest to youngest, filling up to the youngest */ | |
| sumnewm[cptcod]=0.; | |
| sumnewmr[cptcod]=0.; | |
| for (i=1; i<=nlstate;i++){ | |
| sumnewm[cptcod]+=mobaverage[(int)age][i][cptcod]; | |
| sumnewmr[cptcod]+=probs[(int)age][i][cptcod]; | |
| } | |
| if(mobilav==-1){ /* Forcing raw ages if good else agemingood */ | |
| if(fabs(sumnewmr[cptcod] - 1.) <= 1.e-3) { /* good without smoothing */ | |
| agemaxgoodr[cptcod]=age; /* age min */ | |
| for (i=1; i<=nlstate;i++) | |
| mobaverage[(int)age][i][cptcod]=probs[(int)age][i][cptcod]; | |
| }else{ /* bad we change the value with the values of good ages */ | |
| for (i=1; i<=nlstate;i++){ | |
| mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemaxgoodr[cptcod]][i][cptcod]; | |
| } /* i */ | |
| } /* end bad */ | |
| }else{ | |
| if(fabs(sumnewm[cptcod] - 1.) <= 1.e-3) { /* good */ | |
| agemaxgood[cptcod]=age; | |
| }else{ /* bad we change the value with the values of good ages */ | |
| for (i=1; i<=nlstate;i++){ | |
| mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemaxgood[cptcod]][i][cptcod]; | |
| } /* i */ | |
| } /* end bad */ | |
| }/* end else */ | |
| sum=0.;sumr=0.; | |
| for (i=1; i<=nlstate;i++){ | |
| sum+=mobaverage[(int)age][i][cptcod]; | |
| sumr+=probs[(int)age][i][cptcod]; | |
| } | |
| if(fabs(sum - 1.) > 1.e-3) { /* bad */ | |
| printf("Moving average A1: For this combination of covariate cptcod=%d, we can't get a smoothed prevalence which sums to one (%f) at any descending age! age=%d, could you increase bage=%d\n",cptcod,sumr, (int)age, bage); | |
| } /* end bad */ | |
| /* else{ /\* We found some ages summing to one, we will smooth the oldest *\/ */ | |
| if(fabs(sumr - 1.) > 1.e-3) { /* bad */ | |
| printf("Moving average A2: For this combination of covariate cptcod=%d, the raw prevalence doesn't sums to one (%f) even with smoothed values at young ages! age=%d, could you increase bage=%d\n",cptcod,sumr, (int)age, bage); | |
| } /* end bad */ | } /* end bad */ |
| }/* age */ | }/* age */ |
| sum=0.; | |
| for (i=1; i<=nlstate;i++){ | for (age=bage+(mob-1)/2; age<=fage; age++){/* From youngest, finding the oldest wrong */ |
| sum+=mobaverage[(int)agemaxgood[cptcod]][i][cptcod]; | sumnewm[cptcod]=0.; |
| } | sumnewmr[cptcod]=0.; |
| if(fabs(sum - 1.) > 1.e-3) { /* bad */ | for (i=1; i<=nlstate;i++){ |
| printf("For this combination of covariate cptcod=%d, we can't get a smoothed prevalence which sums to one at any ascending age!\n",cptcod); | sumnewm[cptcod]+=mobaverage[(int)age][i][cptcod]; |
| /* for (i=1; i<=nlstate;i++){ */ | sumnewmr[cptcod]+=probs[(int)age][i][cptcod]; |
| /* mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemingood[cptcod]][i][cptcod]; */ | } |
| /* } /\* i *\/ */ | if(mobilav==-1){ /* Forcing raw ages if good else agemingood */ |
| } /* end bad */ | if(fabs(sumnewmr[cptcod] - 1.) <= 1.e-3) { /* good */ |
| agemingoodr[cptcod]=age; | |
| for (i=1; i<=nlstate;i++) | |
| mobaverage[(int)age][i][cptcod]=probs[(int)age][i][cptcod]; | |
| }else{ /* bad we change the value with the values of good ages */ | |
| for (i=1; i<=nlstate;i++){ | |
| mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemingoodr[cptcod]][i][cptcod]; | |
| } /* i */ | |
| } /* end bad */ | |
| }else{ | |
| if(fabs(sumnewm[cptcod] - 1.) <= 1.e-3) { /* good */ | |
| agemingood[cptcod]=age; | |
| }else{ /* bad */ | |
| for (i=1; i<=nlstate;i++){ | |
| mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemingood[cptcod]][i][cptcod]; | |
| } /* i */ | |
| } /* end bad */ | |
| }/* end else */ | |
| sum=0.;sumr=0.; | |
| for (i=1; i<=nlstate;i++){ | |
| sum+=mobaverage[(int)age][i][cptcod]; | |
| sumr+=mobaverage[(int)age][i][cptcod]; | |
| } | |
| if(fabs(sum - 1.) > 1.e-3) { /* bad */ | |
| printf("Moving average B1: For this combination of covariate cptcod=%d, we can't get a smoothed prevalence which sums to one (%f) at any descending age! age=%d, could you decrease fage=%d?\n",cptcod, sum, (int) age, fage); | |
| } /* end bad */ | |
| /* else{ /\* We found some ages summing to one, we will smooth the oldest *\/ */ | |
| if(fabs(sumr - 1.) > 1.e-3) { /* bad */ | |
| printf("Moving average B2: For this combination of covariate cptcod=%d, the raw prevalence doesn't sums to one (%f) even with smoothed values at young ages! age=%d, could you increase fage=%d\n",cptcod,sumr, (int)age, fage); | |
| } /* end bad */ | |
| }/* age */ | |
| for (age=bage; age<=fage; age++){ | for (age=bage; age<=fage; age++){ |
| printf("%d %d ", cptcod, (int)age); | /* printf("%d %d ", cptcod, (int)age); */ |
| sumnewp[cptcod]=0.; | sumnewp[cptcod]=0.; |
| sumnewm[cptcod]=0.; | sumnewm[cptcod]=0.; |
| for (i=1; i<=nlstate;i++){ | for (i=1; i<=nlstate;i++){ |
| Line 6910 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7775 plot [%.f:%.f] ", ageminpar, agemaxpar) |
| } | } |
| /* printf("\n"); */ | /* printf("\n"); */ |
| /* } */ | /* } */ |
| /* brutal averaging */ | /* brutal averaging */ |
| for (i=1; i<=nlstate;i++){ | /* for (i=1; i<=nlstate;i++){ */ |
| for (age=1; age<=bage; age++){ | /* for (age=1; age<=bage; age++){ */ |
| mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemingood[cptcod]][i][cptcod]; | /* mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemingood[cptcod]][i][cptcod]; */ |
| /* printf("age=%d i=%d cptcod=%d mobaverage=%.4f \n",(int)age,i, cptcod, mobaverage[(int)age][i][cptcod]); */ | /* /\* printf("age=%d i=%d cptcod=%d mobaverage=%.4f \n",(int)age,i, cptcod, mobaverage[(int)age][i][cptcod]); *\/ */ |
| } | /* } */ |
| for (age=fage; age<=AGESUP; age++){ | /* for (age=fage; age<=AGESUP; age++){ */ |
| mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemaxgood[cptcod]][i][cptcod]; | /* mobaverage[(int)age][i][cptcod]=mobaverage[(int)agemaxgood[cptcod]][i][cptcod]; */ |
| /* printf("age=%d i=%d cptcod=%d mobaverage=%.4f \n",(int)age,i, cptcod, mobaverage[(int)age][i][cptcod]); */ | /* /\* printf("age=%d i=%d cptcod=%d mobaverage=%.4f \n",(int)age,i, cptcod, mobaverage[(int)age][i][cptcod]); *\/ */ |
| } | /* } */ |
| } /* end i status */ | /* } /\* end i status *\/ */ |
| for (i=nlstate+1; i<=nlstate+ndeath;i++){ | /* for (i=nlstate+1; i<=nlstate+ndeath;i++){ */ |
| for (age=1; age<=AGESUP; age++){ | /* for (age=1; age<=AGESUP; age++){ */ |
| /*printf("i=%d, age=%d, cptcod=%d\n",i, (int)age, cptcod);*/ | /* /\*printf("i=%d, age=%d, cptcod=%d\n",i, (int)age, cptcod);*\/ */ |
| mobaverage[(int)age][i][cptcod]=0.; | /* mobaverage[(int)age][i][cptcod]=0.; */ |
| } | /* } */ |
| } | /* } */ |
| }/* end cptcod */ | }/* end cptcod */ |
| free_vector(sumnewm,1, ncovcombmax); | free_vector(agemaxgoodr,1, ncovcombmax); |
| free_vector(sumnewp,1, ncovcombmax); | |
| free_vector(agemaxgood,1, ncovcombmax); | free_vector(agemaxgood,1, ncovcombmax); |
| free_vector(agemingood,1, ncovcombmax); | free_vector(agemingood,1, ncovcombmax); |
| free_vector(agemingoodr,1, ncovcombmax); | |
| free_vector(sumnewmr,1, ncovcombmax); | |
| free_vector(sumnewm,1, ncovcombmax); | |
| free_vector(sumnewp,1, ncovcombmax); | |
| return 0; | return 0; |
| }/* End movingaverage */ | }/* End movingaverage */ |
| /************** Forecasting ******************/ | /************** Forecasting ******************/ |
| void prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int cptcoveff){ | void prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int cptcoveff){ |
| /* proj1, year, month, day of starting projection | /* proj1, year, month, day of starting projection |
| agemin, agemax range of age | agemin, agemax range of age |
| dateprev1 dateprev2 range of dates during which prevalence is computed | dateprev1 dateprev2 range of dates during which prevalence is computed |
| anproj2 year of en of projection (same day and month as proj1). | anproj2 year of en of projection (same day and month as proj1). |
| */ | */ |
| int yearp, stepsize, hstepm, nhstepm, j, k, cptcod, i, h, i1; | int yearp, stepsize, hstepm, nhstepm, j, k, cptcod, i, h, i1, k4, nres=0; |
| double agec; /* generic age */ | double agec; /* generic age */ |
| double agelim, ppij, yp,yp1,yp2,jprojmean,mprojmean,anprojmean; | double agelim, ppij, yp,yp1,yp2,jprojmean,mprojmean,anprojmean; |
| double *popeffectif,*popcount; | double *popeffectif,*popcount; |
| Line 6965 void prevforecast(char fileres[], double | Line 7834 void prevforecast(char fileres[], double |
| printf("Problem with forecast resultfile: %s\n", fileresf); | printf("Problem with forecast resultfile: %s\n", fileresf); |
| fprintf(ficlog,"Problem with forecast resultfile: %s\n", fileresf); | fprintf(ficlog,"Problem with forecast resultfile: %s\n", fileresf); |
| } | } |
| printf("Computing forecasting: result on file '%s', please wait... \n", fileresf); | printf("\nComputing forecasting: result on file '%s', please wait... \n", fileresf); |
| fprintf(ficlog,"Computing forecasting: result on file '%s', please wait... \n", fileresf); | fprintf(ficlog,"\nComputing forecasting: result on file '%s', please wait... \n", fileresf); |
| if (cptcoveff==0) ncodemax[cptcoveff]=1; | if (cptcoveff==0) ncodemax[cptcoveff]=1; |
| Line 6997 void prevforecast(char fileres[], double | Line 7866 void prevforecast(char fileres[], double |
| fprintf(ficresf,"#****** Routine prevforecast **\n"); | fprintf(ficresf,"#****** Routine prevforecast **\n"); |
| /* if (h==(int)(YEARM*yearp)){ */ | /* if (h==(int)(YEARM*yearp)){ */ |
| for(k=1;k<=i1;k++){ | for(nres=1; nres <= nresult; nres++) /* For each resultline */ |
| for(k=1; k<=i1;k++){ | |
| if(i1 != 1 && TKresult[nres]!= k) | |
| continue; | |
| if(invalidvarcomb[k]){ | if(invalidvarcomb[k]){ |
| printf("\nCombination (%d) projection ignored because no cases \n",k); | printf("\nCombination (%d) projection ignored because no cases \n",k); |
| continue; | continue; |
| Line 7006 void prevforecast(char fileres[], double | Line 7878 void prevforecast(char fileres[], double |
| for(j=1;j<=cptcoveff;j++) { | for(j=1;j<=cptcoveff;j++) { |
| fprintf(ficresf," V%d (=) %d",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresf," V%d (=) %d",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| } | } |
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| fprintf(ficresf," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| fprintf(ficresf," yearproj age"); | fprintf(ficresf," yearproj age"); |
| for(j=1; j<=nlstate+ndeath;j++){ | for(j=1; j<=nlstate+ndeath;j++){ |
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) |
| Line 7020 void prevforecast(char fileres[], double | Line 7895 void prevforecast(char fileres[], double |
| nhstepm = nhstepm/hstepm; | nhstepm = nhstepm/hstepm; |
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); |
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; |
| hpxij(p3mat,nhstepm,agec,hstepm,p,nlstate,stepm,oldm,savm, k); | hpxij(p3mat,nhstepm,agec,hstepm,p,nlstate,stepm,oldm,savm, k,nres); |
| for (h=0; h<=nhstepm; h++){ | for (h=0; h<=nhstepm; h++){ |
| if (h*hstepm/YEARM*stepm ==yearp) { | if (h*hstepm/YEARM*stepm ==yearp) { |
| Line 7032 void prevforecast(char fileres[], double | Line 7907 void prevforecast(char fileres[], double |
| for(j=1; j<=nlstate+ndeath;j++) { | for(j=1; j<=nlstate+ndeath;j++) { |
| ppij=0.; | ppij=0.; |
| for(i=1; i<=nlstate;i++) { | for(i=1; i<=nlstate;i++) { |
| if (mobilav==1) | /* if (mobilav>=1) */ |
| ppij=ppij+p3mat[i][j][h]*mobaverage[(int)agec][i][k]; | ppij=ppij+p3mat[i][j][h]*mobaverage[(int)agec][i][k]; |
| else { | /* else { */ /* even if mobilav==-1 we use mobaverage */ |
| ppij=ppij+p3mat[i][j][h]*probs[(int)(agec)][i][k]; | /* ppij=ppij+p3mat[i][j][h]*probs[(int)(agec)][i][k]; */ |
| } | /* } */ |
| if (h*hstepm/YEARM*stepm== yearp) { | if (h*hstepm/YEARM*stepm== yearp) { |
| fprintf(ficresf," %.3f", p3mat[i][j][h]); | fprintf(ficresf," %.3f", p3mat[i][j][h]); |
| } | } |
| Line 7048 void prevforecast(char fileres[], double | Line 7923 void prevforecast(char fileres[], double |
| } /* end h */ | } /* end h */ |
| free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); |
| } /* end agec */ | } /* end agec */ |
| /* diffyear=(int) anproj1+yearp-ageminpar-1; */ | |
| /*printf("Prevforecast %d+%d-%d=diffyear=%d\n",(int) anproj1, (int)yearp,(int)ageminpar,(int) anproj1-(int)ageminpar);*/ | |
| } /* end yearp */ | } /* end yearp */ |
| } /* end k */ | } /* end k */ |
| Line 7613 int readdata(char datafile[], int firsto | Line 8490 int readdata(char datafile[], int firsto |
| /*-------- data file ----------*/ | /*-------- data file ----------*/ |
| FILE *fic; | FILE *fic; |
| char dummy[]=" "; | char dummy[]=" "; |
| int i=0, j=0, n=0, iv=0; | int i=0, j=0, n=0, iv=0, v; |
| int lstra; | int lstra; |
| int linei, month, year,iout; | int linei, month, year,iout; |
| char line[MAXLINE], linetmp[MAXLINE]; | char line[MAXLINE], linetmp[MAXLINE]; |
| char stra[MAXLINE], strb[MAXLINE]; | char stra[MAXLINE], strb[MAXLINE]; |
| char *stratrunc; | char *stratrunc; |
| DummyV=ivector(1,NCOVMAX); /* 1 to 3 */ | |
| FixedV=ivector(1,NCOVMAX); /* 1 to 3 */ | |
| for(v=1; v <=ncovcol;v++){ | |
| DummyV[v]=0; | |
| FixedV[v]=0; | |
| } | |
| for(v=ncovcol+1; v <=ncovcol+nqv;v++){ | |
| DummyV[v]=1; | |
| FixedV[v]=0; | |
| } | |
| for(v=ncovcol+nqv+1; v <=ncovcol+nqv+ntv;v++){ | |
| DummyV[v]=0; | |
| FixedV[v]=1; | |
| } | |
| for(v=ncovcol+nqv+ntv+1; v <=ncovcol+nqv+ntv+nqtv;v++){ | |
| DummyV[v]=1; | |
| FixedV[v]=1; | |
| } | |
| for(v=1; v <=ncovcol+nqv+ntv+nqtv;v++){ | |
| 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]); | |
| } | |
| if((fic=fopen(datafile,"r"))==NULL) { | if((fic=fopen(datafile,"r"))==NULL) { |
| printf("Problem while opening datafile: %s with errno='%s'\n", datafile,strerror(errno));fflush(stdout); | printf("Problem while opening datafile: %s with errno='%s'\n", datafile,strerror(errno));fflush(stdout); |
| Line 7650 int readdata(char datafile[], int firsto | Line 8549 int readdata(char datafile[], int firsto |
| /* Loops on waves */ | /* Loops on waves */ |
| for (j=maxwav;j>=1;j--){ | for (j=maxwav;j>=1;j--){ |
| for (iv=nqtv;iv>=1;iv--){ /* Loop on time varying quantitative variables */ | for (iv=nqtv;iv>=1;iv--){ /* Loop on time varying quantitative variables */ |
| cutv(stra, strb, line, ' '); | cutv(stra, strb, line, ' '); |
| if(strb[0]=='.') { /* Missing value */ | if(strb[0]=='.') { /* Missing value */ |
| lval=-1; | lval=-1; |
| cotqvar[j][iv][i]=-1; /* 0.0/0.0 */ | cotqvar[j][iv][i]=-1; /* 0.0/0.0 */ |
| cotvar[j][ntv+iv][i]=-1; /* For performance reasons */ | cotvar[j][ntv+iv][i]=-1; /* For performance reasons */ |
| if(isalpha(strb[1])) { /* .m or .d Really Missing value */ | if(isalpha(strb[1])) { /* .m or .d Really Missing value */ |
| printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j); | printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j); |
| fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j);fflush(ficlog); | fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j);fflush(ficlog); |
| return 1; | return 1; |
| } | } |
| }else{ | }else{ |
| errno=0; | errno=0; |
| /* what_kind_of_number(strb); */ | /* what_kind_of_number(strb); */ |
| dval=strtod(strb,&endptr); | dval=strtod(strb,&endptr); |
| /* if( strb[0]=='\0' || (*endptr != '\0')){ */ | /* if( strb[0]=='\0' || (*endptr != '\0')){ */ |
| /* if(strb != endptr && *endptr == '\0') */ | /* if(strb != endptr && *endptr == '\0') */ |
| /* dval=dlval; */ | /* dval=dlval; */ |
| /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */ | /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */ |
| if( strb[0]=='\0' || (*endptr != '\0')){ | if( strb[0]=='\0' || (*endptr != '\0')){ |
| printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, nqtv, j,maxwav); | printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, nqtv, j,maxwav); |
| fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqtv, j,maxwav);fflush(ficlog); | fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqtv, j,maxwav);fflush(ficlog); |
| return 1; | return 1; |
| } | } |
| cotqvar[j][iv][i]=dval; | cotqvar[j][iv][i]=dval; |
| cotvar[j][ntv+iv][i]=dval; | cotvar[j][ntv+iv][i]=dval; |
| } | } |
| strcpy(line,stra); | strcpy(line,stra); |
| }/* end loop ntqv */ | }/* end loop ntqv */ |
| for (iv=ntv;iv>=1;iv--){ /* Loop on time varying dummies */ | for (iv=ntv;iv>=1;iv--){ /* Loop on time varying dummies */ |
| cutv(stra, strb, line, ' '); | cutv(stra, strb, line, ' '); |
| if(strb[0]=='.') { /* Missing value */ | if(strb[0]=='.') { /* Missing value */ |
| lval=-1; | lval=-1; |
| }else{ | }else{ |
| errno=0; | errno=0; |
| lval=strtol(strb,&endptr,10); | lval=strtol(strb,&endptr,10); |
| /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ | /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ |
| if( strb[0]=='\0' || (*endptr != '\0')){ | if( strb[0]=='\0' || (*endptr != '\0')){ |
| printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th dummy covariate out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv, j,maxwav); | printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th dummy covariate out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv, j,maxwav); |
| fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d dummy covariate out of %d measured wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv,j,maxwav);fflush(ficlog); | fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d dummy covariate out of %d measured wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv,j,maxwav);fflush(ficlog); |
| return 1; | return 1; |
| } | } |
| } | } |
| if(lval <-1 || lval >1){ | if(lval <-1 || lval >1){ |
| printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ | printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
| Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ | Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
| for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ | for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
| For example, for multinomial values like 1, 2 and 3,\n \ | For example, for multinomial values like 1, 2 and 3,\n \ |
| build V1=0 V2=0 for the reference value (1),\n \ | build V1=0 V2=0 for the reference value (1),\n \ |
| V1=1 V2=0 for (2) \n \ | V1=1 V2=0 for (2) \n \ |
| and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ | and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
| output of IMaCh is often meaningless.\n \ | output of IMaCh is often meaningless.\n \ |
| Exiting.\n",lval,linei, i,line,j); | Exiting.\n",lval,linei, i,line,j); |
| fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ | fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
| Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ | Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
| for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ | for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
| For example, for multinomial values like 1, 2 and 3,\n \ | For example, for multinomial values like 1, 2 and 3,\n \ |
| build V1=0 V2=0 for the reference value (1),\n \ | build V1=0 V2=0 for the reference value (1),\n \ |
| V1=1 V2=0 for (2) \n \ | V1=1 V2=0 for (2) \n \ |
| and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ | and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
| output of IMaCh is often meaningless.\n \ | output of IMaCh is often meaningless.\n \ |
| Exiting.\n",lval,linei, i,line,j);fflush(ficlog); | Exiting.\n",lval,linei, i,line,j);fflush(ficlog); |
| return 1; | return 1; |
| } | } |
| cotvar[j][iv][i]=(double)(lval); | cotvar[j][iv][i]=(double)(lval); |
| strcpy(line,stra); | strcpy(line,stra); |
| }/* end loop ntv */ | }/* end loop ntv */ |
| /* Statuses at wave */ | /* Statuses at wave */ |
| cutv(stra, strb, line, ' '); | cutv(stra, strb, line, ' '); |
| if(strb[0]=='.') { /* Missing value */ | if(strb[0]=='.') { /* Missing value */ |
| lval=-1; | lval=-1; |
| }else{ | }else{ |
| errno=0; | errno=0; |
| lval=strtol(strb,&endptr,10); | lval=strtol(strb,&endptr,10); |
| /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ | /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ |
| if( strb[0]=='\0' || (*endptr != '\0')){ | if( strb[0]=='\0' || (*endptr != '\0')){ |
| printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav); | printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav); |
| fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog); | fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog); |
| return 1; | return 1; |
| } | } |
| } | } |
| s[j][i]=lval; | s[j][i]=lval; |
| Line 7890 int readdata(char datafile[], int firsto | Line 8789 int readdata(char datafile[], int firsto |
| void removefirstspace(char **stri){/*, char stro[]) {*/ | void removefirstspace(char **stri){/*, char stro[]) {*/ |
| char *p1 = *stri, *p2 = *stri; | char *p1 = *stri, *p2 = *stri; |
| if (*p2 == ' ') | while (*p2 == ' ') |
| p2++; | p2++; |
| /* while ((*p1++ = *p2++) !=0) */ | /* while ((*p1++ = *p2++) !=0) */ |
| /* ; */ | /* ; */ |
| Line 7901 void removefirstspace(char **stri){/*, c | Line 8800 void removefirstspace(char **stri){/*, c |
| *stri=p2; | *stri=p2; |
| } | } |
| int decoderesult ( char resultline[]) | int decoderesult ( char resultline[], int nres) |
| /**< This routine decode one result line and returns the combination # of dummy covariates only **/ | /**< This routine decode one result line and returns the combination # of dummy covariates only **/ |
| { | { |
| int j=0, k=0, k1=0, k2=0, match=0; | int j=0, k=0, k1=0, k2=0, k3=0, k4=0, match=0, k2q=0, k3q=0, k4q=0; |
| char resultsav[MAXLINE]; | char resultsav[MAXLINE]; |
| int resultmodel[MAXLINE]; | int resultmodel[MAXLINE]; |
| int modelresult[MAXLINE]; | int modelresult[MAXLINE]; |
| Line 7922 int decoderesult ( char resultline[]) | Line 8821 int decoderesult ( char resultline[]) |
| if (strlen(resultsav) >1){ | if (strlen(resultsav) >1){ |
| j=nbocc(resultsav,'='); /**< j=Number of covariate values'=' */ | j=nbocc(resultsav,'='); /**< j=Number of covariate values'=' */ |
| } | } |
| if(j == 0){ /* Resultline but no = */ | |
| TKresult[nres]=0; /* Combination for the nresult and the model */ | |
| return (0); | |
| } | |
| if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */ | if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */ |
| printf("ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | printf("ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); |
| fprintf(ficlog,"ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | fprintf(ficlog,"ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); |
| Line 7942 int decoderesult ( char resultline[]) | Line 8846 int decoderesult ( char resultline[]) |
| if (nbocc(stra,'=') >0) | if (nbocc(stra,'=') >0) |
| strcpy(resultsav,stra); /* and analyzes it */ | strcpy(resultsav,stra); /* and analyzes it */ |
| } | } |
| /* Checking if no missing or useless values in comparison of current model needs */ | /* Checking for missing or useless values in comparison of current model needs */ |
| for(k1=1; k1<= cptcovt ;k1++){ /* model line */ | for(k1=1; k1<= cptcovt ;k1++){ /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ |
| if(Typevar[k1]==0){ | if(Typevar[k1]==0){ /* Single covariate in model */ |
| match=0; | match=0; |
| for(k2=1; k2 <=j;k2++){ | for(k2=1; k2 <=j;k2++){/* result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */ |
| if(Tvar[k1]==Tvarsel[k2]) { | if(Tvar[k1]==Tvarsel[k2]) {/* Tvar[1]=5 == Tvarsel[2]=5 */ |
| modelresult[k2]=k1; | modelresult[k2]=k1;/* modelresult[2]=1 modelresult[1]=2 modelresult[3]=3 modelresult[6]=4 modelresult[9]=5 */ |
| match=1; | match=1; |
| break; | break; |
| } | } |
| Line 7958 int decoderesult ( char resultline[]) | Line 8862 int decoderesult ( char resultline[]) |
| } | } |
| } | } |
| } | } |
| /* Checking for missing or useless values in comparison of current model needs */ | |
| for(k2=1; k2 <=j;k2++){ /* result line */ | for(k2=1; k2 <=j;k2++){ /* result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */ |
| match=0; | match=0; |
| for(k1=1; k1<= cptcovt ;k1++){ /* model line */ | for(k1=1; k1<= cptcovt ;k1++){ /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ |
| if(Typevar[k1]==0){ | if(Typevar[k1]==0){ /* Single */ |
| if(Tvar[k1]==Tvarsel[k2]) { | if(Tvar[k1]==Tvarsel[k2]) { /* Tvar[2]=4 == Tvarsel[1]=4 */ |
| resultmodel[k1]=k2; | resultmodel[k1]=k2; /* resultmodel[2]=1 resultmodel[1]=2 resultmodel[3]=3 resultmodel[6]=4 resultmodel[9]=5 */ |
| ++match; | ++match; |
| } | } |
| } | } |
| Line 7975 int decoderesult ( char resultline[]) | Line 8879 int decoderesult ( char resultline[]) |
| printf("Error in result line: %d doubled; result: %s, model=%s\n",k2, resultline, model); | printf("Error in result line: %d doubled; result: %s, model=%s\n",k2, resultline, model); |
| } | } |
| } | } |
| /* We need to deduce which combination number is chosen and save quantitative values */ | /* We need to deduce which combination number is chosen and save quantitative values */ |
| /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| /* result line V4=1 V5=25.1 V3=0 V2=8 V1=1 */ | |
| /* should give a combination of dummy V4=1, V3=0, V1=1 => V4*2**(0) + V3*2**(1) + V1*2**(2) = 5 + (1offset) = 6*/ | |
| /* result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */ | |
| /* should give a combination of dummy V4=1, V3=1, V1=0 => V4*2**(0) + V3*2**(1) + V1*2**(2) = 3 + (1offset) = 4*/ | |
| /* 1 0 0 0 */ | |
| /* 2 1 0 0 */ | |
| /* 3 0 1 0 */ | |
| /* 4 1 1 0 */ /* V4=1, V3=1, V1=0 */ | |
| /* 5 0 0 1 */ | |
| /* 6 1 0 1 */ /* V4=1, V3=0, V1=1 */ | |
| /* 7 0 1 1 */ | |
| /* 8 1 1 1 */ | |
| /* V(Tvresult)=Tresult V4=1 V3=0 V1=1 Tresult[nres=1][2]=0 */ | |
| /* V(Tvqresult)=Tqresult V5=25.1 V2=8 Tqresult[nres=1][1]=25.1 */ | |
| /* V5*age V5 known which value for nres? */ | |
| /* Tqinvresult[2]=8 Tqinvresult[1]=25.1 */ | |
| for(k1=1, k=0, k4=0, k4q=0; k1 <=cptcovt;k1++){ /* model line */ | |
| if( Dummy[k1]==0 && Typevar[k1]==0 ){ /* Single dummy */ | |
| k3= resultmodel[k1]; /* resultmodel[2(V4)] = 1=k3 */ | |
| k2=(int)Tvarsel[k3]; /* Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 */ | |
| k+=Tvalsel[k3]*pow(2,k4); /* Tvalsel[1]=1 */ | |
| Tresult[nres][k4+1]=Tvalsel[k3];/* Tresult[nres][1]=1(V4=1) Tresult[nres][2]=0(V3=0) */ | |
| Tvresult[nres][k4+1]=(int)Tvarsel[k3];/* Tvresult[nres][1]=4 Tvresult[nres][3]=1 */ | |
| Tinvresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* Tinvresult[nres][4]=1 */ | |
| printf("Decoderesult Dummy k=%d, V(k2=V%d)= Tvalsel[%d]=%d, 2**(%d)\n",k, k2, k3, (int)Tvalsel[k3], k4); | |
| k4++;; | |
| } else if( Dummy[k1]==1 && Typevar[k1]==0 ){ /* Single quantitative */ | |
| k3q= resultmodel[k1]; /* resultmodel[2] = 1=k3 */ | |
| k2q=(int)Tvarsel[k3q]; /* Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 */ | |
| Tqresult[nres][k4q+1]=Tvalsel[k3q]; /* Tqresult[nres][1]=25.1 */ | |
| Tvqresult[nres][k4q+1]=(int)Tvarsel[k3q]; /* Tvqresult[nres][1]=5 */ | |
| Tqinvresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */ | |
| printf("Decoderesult Quantitative nres=%d, V(k2q=V%d)= Tvalsel[%d]=%d, Tvarsel[%d]=%f\n",nres, k2q, k3q, Tvarsel[k3q], k3q, Tvalsel[k3q]); | |
| k4q++;; | |
| } | |
| } | |
| TKresult[nres]=++k; /* Combination for the nresult and the model */ | |
| return (0); | return (0); |
| } | } |
| int selected( int kvar){ /* Selected combination of covariates */ | |
| if(Tvarsel[kvar]) | |
| return (0); | |
| else | |
| return(1); | |
| } | |
| int decodemodel( char model[], int lastobs) | int decodemodel( char model[], int lastobs) |
| /**< This routine decodes the model and returns: | /**< This routine decodes the model and returns: |
| * Model V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age+age*age | * Model V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age+age*age |
| Line 8002 int decodemodel( char model[], int lasto | Line 8939 int decodemodel( char model[], int lasto |
| * - Tvard[k] p Tvard[1][1]@4 {7, 8, 5, 6} for V7*V8 and V5*V6 . | * - Tvard[k] p Tvard[1][1]@4 {7, 8, 5, 6} for V7*V8 and V5*V6 . |
| */ | */ |
| { | { |
| int i, j, k, ks; | int i, j, k, ks, v; |
| int j1, k1, k2, k3, k4; | int j1, k1, k2, k3, k4; |
| char modelsav[80]; | char modelsav[80]; |
| char stra[80], strb[80], strc[80], strd[80],stre[80]; | char stra[80], strb[80], strc[80], strd[80],stre[80]; |
| Line 8208 Dummy[k] 0=dummy (0 1), 1 quantitative ( | Line 9145 Dummy[k] 0=dummy (0 1), 1 quantitative ( |
| Typevar: 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product \n\ | Typevar: 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product \n\ |
| Fixed[k] 0=fixed (product or simple), 1 varying, 2 fixed with age product, 3 varying with age product \n\ | 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); | 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;k<=cptcovt; k++){ /* or cptocvt */ |
| if (Tvar[k] <=ncovcol && Typevar[k]==0 ){ /* Simple fixed dummy (<=ncovcol) covariates */ | if (Tvar[k] <=ncovcol && Typevar[k]==0 ){ /* Simple fixed dummy (<=ncovcol) covariates */ |
| Fixed[k]= 0; | Fixed[k]= 0; |
| Line 8233 Dummy[k] 0=dummy (0 1), 1 quantitative ( | Line 9170 Dummy[k] 0=dummy (0 1), 1 quantitative ( |
| TvarFind[ncovf]=k; | TvarFind[ncovf]=k; |
| TvarFD[ncoveff]=Tvar[k]; /* TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | 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 */ | 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+nqv && Typevar[k]==0){ /* Remind that product Vn*Vm are added in k*/ /* Only simple fixed quantitative variable */ | }else if( Tvar[k] <=ncovcol+nqv && Typevar[k]==0){/* Remind that product Vn*Vm are added in k Only simple fixed quantitative variable */ |
| Fixed[k]= 0; | Fixed[k]= 0; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| nqfveff++; | nqfveff++; |
| Line 8247 Dummy[k] 0=dummy (0 1), 1 quantitative ( | Line 9184 Dummy[k] 0=dummy (0 1), 1 quantitative ( |
| TvarFind[ncovf]=k; | TvarFind[ncovf]=k; |
| 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 */ | 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 */ | 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 variables */ | }else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){/* Only simple time varying dummy variables */ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 0; | Dummy[k]= 0; |
| ntveff++; /* Only simple time varying dummy variable */ | ntveff++; /* Only simple time varying dummy variable */ |
| Line 8258 Dummy[k] 0=dummy (0 1), 1 quantitative ( | Line 9195 Dummy[k] 0=dummy (0 1), 1 quantitative ( |
| TvarsDind[nsd]=k; | TvarsDind[nsd]=k; |
| ncovv++; /* Only simple time varying variables */ | ncovv++; /* Only simple time varying variables */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; /* TvarVind[2]=2 TvarVind[3]=3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Any time varying singele */ |
| TvarVD[ntveff]=Tvar[k]; /* TvarVD[1]=V4 TvarVD[2]=V3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */ | TvarVD[ntveff]=Tvar[k]; /* TvarVD[1]=V4 TvarVD[2]=V3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */ |
| TvarVDind[ntveff]=k; /* TvarVDind[1]=2 TvarVDind[2]=3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */ | TvarVDind[ntveff]=k; /* TvarVDind[1]=2 TvarVDind[2]=3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */ |
| 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 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); |
| Line 8274 Dummy[k] 0=dummy (0 1), 1 quantitative ( | Line 9211 Dummy[k] 0=dummy (0 1), 1 quantitative ( |
| TvarsQ[nsq]=Tvar[k]; | TvarsQ[nsq]=Tvar[k]; |
| TvarsQind[nsq]=k; | TvarsQind[nsq]=k; |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; /* TvarVind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Any time varying singele */ |
| TvarVQ[nqtveff]=Tvar[k]; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ | TvarVQ[nqtveff]=Tvar[k]; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ |
| TvarVQind[nqtveff]=k; /* TvarVQind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ | TvarVQind[nqtveff]=k; /* TvarVQind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ |
| TmodelInvQind[nqtveff]=Tvar[k]- ncovcol-nqv-ntv;/* Only simple time varying quantitative variable */ | TmodelInvQind[nqtveff]=Tvar[k]- ncovcol-nqv-ntv;/* Only simple time varying quantitative variable */ |
| Line 8286 Dummy[k] 0=dummy (0 1), 1 quantitative ( | Line 9223 Dummy[k] 0=dummy (0 1), 1 quantitative ( |
| TvarA[ncova]=Tvar[k]; | TvarA[ncova]=Tvar[k]; |
| TvarAind[ncova]=k; | TvarAind[ncova]=k; |
| if (Tvar[k] <=ncovcol ){ /* Product age with fixed dummy covariatee */ | if (Tvar[k] <=ncovcol ){ /* Product age with fixed dummy covariatee */ |
| Fixed[k]= 2; | Fixed[k]= 2; |
| Dummy[k]= 2; | Dummy[k]= 2; |
| modell[k].maintype= ATYPE; | modell[k].maintype= ATYPE; |
| modell[k].subtype= APFD; | modell[k].subtype= APFD; |
| /* ncoveff++; */ | /* ncoveff++; */ |
| }else if( Tvar[k] <=ncovcol+nqv) { /* Remind that product Vn*Vm are added in k*/ | }else if( Tvar[k] <=ncovcol+nqv) { /* Remind that product Vn*Vm are added in k*/ |
| Fixed[k]= 2; | Fixed[k]= 2; |
| Dummy[k]= 3; | Dummy[k]= 3; |
| modell[k].maintype= ATYPE; | modell[k].maintype= ATYPE; |
| modell[k].subtype= APFQ; /* Product age * fixed quantitative */ | modell[k].subtype= APFQ; /* Product age * fixed quantitative */ |
| /* nqfveff++; /\* Only simple fixed quantitative variable *\/ */ | /* nqfveff++; /\* Only simple fixed quantitative variable *\/ */ |
| }else if( Tvar[k] <=ncovcol+nqv+ntv ){ | }else if( Tvar[k] <=ncovcol+nqv+ntv ){ |
| Fixed[k]= 3; | Fixed[k]= 3; |
| Dummy[k]= 2; | Dummy[k]= 2; |
| modell[k].maintype= ATYPE; | modell[k].maintype= ATYPE; |
| modell[k].subtype= APVD; /* Product age * varying dummy */ | modell[k].subtype= APVD; /* Product age * varying dummy */ |
| /* ntveff++; /\* Only simple time varying dummy variable *\/ */ | /* ntveff++; /\* Only simple time varying dummy variable *\/ */ |
| }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv){ | }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv){ |
| Fixed[k]= 3; | Fixed[k]= 3; |
| Dummy[k]= 3; | Dummy[k]= 3; |
| modell[k].maintype= ATYPE; | modell[k].maintype= ATYPE; |
| modell[k].subtype= APVQ; /* Product age * varying quantitative */ | modell[k].subtype= APVQ; /* Product age * varying quantitative */ |
| /* nqtveff++;/\* Only simple time varying quantitative variable *\/ */ | /* nqtveff++;/\* Only simple time varying quantitative variable *\/ */ |
| } | } |
| }else if (Typevar[k] == 2) { /* product without age */ | }else if (Typevar[k] == 2) { /* product without age */ |
| k1=Tposprod[k]; | k1=Tposprod[k]; |
| if(Tvard[k1][1] <=ncovcol){ | if(Tvard[k1][1] <=ncovcol){ |
| if(Tvard[k1][2] <=ncovcol){ | if(Tvard[k1][2] <=ncovcol){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 0; | Dummy[k]= 0; |
| modell[k].maintype= FTYPE; | modell[k].maintype= FTYPE; |
| modell[k].subtype= FPDD; /* Product fixed dummy * fixed dummy */ | modell[k].subtype= FPDD; /* Product fixed dummy * fixed dummy */ |
| ncovf++; /* Fixed variables without age */ | ncovf++; /* Fixed variables without age */ |
| TvarF[ncovf]=Tvar[k]; | TvarF[ncovf]=Tvar[k]; |
| TvarFind[ncovf]=k; | TvarFind[ncovf]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv){ | }else if(Tvard[k1][2] <=ncovcol+nqv){ |
| Fixed[k]= 0; /* or 2 ?*/ | Fixed[k]= 0; /* or 2 ?*/ |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= FTYPE; | modell[k].maintype= FTYPE; |
| modell[k].subtype= FPDQ; /* Product fixed dummy * fixed quantitative */ | modell[k].subtype= FPDQ; /* Product fixed dummy * fixed quantitative */ |
| ncovf++; /* Varying variables without age */ | ncovf++; /* Varying variables without age */ |
| TvarF[ncovf]=Tvar[k]; | TvarF[ncovf]=Tvar[k]; |
| TvarFind[ncovf]=k; | TvarFind[ncovf]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ | }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 0; | Dummy[k]= 0; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPDD; /* Product fixed dummy * varying dummy */ | modell[k].subtype= VPDD; /* Product fixed dummy * varying dummy */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ | }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPDQ; /* Product fixed dummy * varying quantitative */ | modell[k].subtype= VPDQ; /* Product fixed dummy * varying quantitative */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| } | } |
| }else if(Tvard[k1][1] <=ncovcol+nqv){ | }else if(Tvard[k1][1] <=ncovcol+nqv){ |
| if(Tvard[k1][2] <=ncovcol){ | if(Tvard[k1][2] <=ncovcol){ |
| Fixed[k]= 0; /* or 2 ?*/ | Fixed[k]= 0; /* or 2 ?*/ |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= FTYPE; | modell[k].maintype= FTYPE; |
| modell[k].subtype= FPDQ; /* Product fixed quantitative * fixed dummy */ | modell[k].subtype= FPDQ; /* Product fixed quantitative * fixed dummy */ |
| ncovf++; /* Fixed variables without age */ | ncovf++; /* Fixed variables without age */ |
| TvarF[ncovf]=Tvar[k]; | TvarF[ncovf]=Tvar[k]; |
| TvarFind[ncovf]=k; | TvarFind[ncovf]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ | }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPDQ; /* Product fixed quantitative * varying dummy */ | modell[k].subtype= VPDQ; /* Product fixed quantitative * varying dummy */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ | }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPQQ; /* Product fixed quantitative * varying quantitative */ | modell[k].subtype= VPQQ; /* Product fixed quantitative * varying quantitative */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| } | } |
| }else if(Tvard[k1][1] <=ncovcol+nqv+ntv){ | }else if(Tvard[k1][1] <=ncovcol+nqv+ntv){ |
| if(Tvard[k1][2] <=ncovcol){ | if(Tvard[k1][2] <=ncovcol){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPDD; /* Product time varying dummy * fixed dummy */ | modell[k].subtype= VPDD; /* Product time varying dummy * fixed dummy */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv){ | }else if(Tvard[k1][2] <=ncovcol+nqv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPDQ; /* Product time varying dummy * fixed quantitative */ | modell[k].subtype= VPDQ; /* Product time varying dummy * fixed quantitative */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ | }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 0; | Dummy[k]= 0; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPDD; /* Product time varying dummy * time varying dummy */ | modell[k].subtype= VPDD; /* Product time varying dummy * time varying dummy */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ | }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPDQ; /* Product time varying dummy * time varying quantitative */ | modell[k].subtype= VPDQ; /* Product time varying dummy * time varying quantitative */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| } | } |
| }else if(Tvard[k1][1] <=ncovcol+nqv+ntv+nqtv){ | }else if(Tvard[k1][1] <=ncovcol+nqv+ntv+nqtv){ |
| if(Tvard[k1][2] <=ncovcol){ | if(Tvard[k1][2] <=ncovcol){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPDQ; /* Product time varying quantitative * fixed dummy */ | modell[k].subtype= VPDQ; /* Product time varying quantitative * fixed dummy */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv){ | }else if(Tvard[k1][2] <=ncovcol+nqv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPQQ; /* Product time varying quantitative * fixed quantitative */ | modell[k].subtype= VPQQ; /* Product time varying quantitative * fixed quantitative */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ | }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPDQ; /* Product time varying quantitative * time varying dummy */ | modell[k].subtype= VPDQ; /* Product time varying quantitative * time varying dummy */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ | }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ |
| Fixed[k]= 1; | Fixed[k]= 1; |
| Dummy[k]= 1; | Dummy[k]= 1; |
| modell[k].maintype= VTYPE; | modell[k].maintype= VTYPE; |
| modell[k].subtype= VPQQ; /* Product time varying quantitative * time varying quantitative */ | modell[k].subtype= VPQQ; /* Product time varying quantitative * time varying quantitative */ |
| ncovv++; /* Varying variables without age */ | ncovv++; /* Varying variables without age */ |
| TvarV[ncovv]=Tvar[k]; | TvarV[ncovv]=Tvar[k]; |
| TvarVind[ncovv]=k; | TvarVind[ncovv]=k; |
| } | } |
| }else{ | }else{ |
| printf("Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]); | printf("Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]); |
| fprintf(ficlog,"Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]); | fprintf(ficlog,"Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]); |
| } /* end k1 */ | } /*end k1*/ |
| }else{ | }else{ |
| printf("Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]); | printf("Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]); |
| fprintf(ficlog,"Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]); | fprintf(ficlog,"Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]); |
| Line 8488 Dummy[k] 0=dummy (0 1), 1 quantitative ( | Line 9425 Dummy[k] 0=dummy (0 1), 1 quantitative ( |
| } | } |
| int calandcheckages(int imx, int maxwav, double *agemin, double *agemax, int *nberr, int *nbwarn ) | int calandcheckages(int imx, int maxwav, double *agemin, double *agemax, int *nberr, int *nbwarn ) |
| { | {/* Check ages at death */ |
| int i, m; | int i, m; |
| int firstone=0; | int firstone=0; |
| Line 8503 int calandcheckages(int imx, int maxwav, | Line 9440 int calandcheckages(int imx, int maxwav, |
| *nberr = *nberr + 1; | *nberr = *nberr + 1; |
| if(firstone == 0){ | if(firstone == 0){ |
| firstone=1; | firstone=1; |
| printf("Error! Date of death (month %2d and year %4d) of individual %ld on line %d was unknown, you must set an arbitrary year of death or he/she is skipped and results can be biased (%d) because status is a death state %d at wave %d. Wave dropped.\nOther similar cases in log file\n",(int)moisdc[i],(int)andc[i],num[i],i, *nberr,s[m][i],m); | printf("Warning (#%d)! Date of death (month %2d and year %4d) of individual %ld on line %d was unknown but status is a death state %d at wave %d. If you don't know the vital status, please enter -2. If he/she is still alive but don't know the state, please code with '-1 or '.'. Here, we do not believe in a death, skipped.\nOther similar cases in log file\n", *nberr,(int)moisdc[i],(int)andc[i],num[i],i,s[m][i],m); |
| } | } |
| fprintf(ficlog,"Error! Date of death (month %2d and year %4d) of individual %ld on line %d was unknown, you must set an arbitrary year of death or he/she is skipped and results can be biased (%d) because status is a death state %d at wave %d. Wave dropped.\n",(int)moisdc[i],(int)andc[i],num[i],i, *nberr,s[m][i],m); | fprintf(ficlog,"Warning (#%d)! Date of death (month %2d and year %4d) of individual %ld on line %d was unknown but status is a death state %d at wave %d. If you don't know the vital status, please enter -2. If he/she is still alive but don't know the state, please code with '-1 or '.'. Here, we do not believe in a death, skipped.\n", *nberr,(int)moisdc[i],(int)andc[i],num[i],i,s[m][i],m); |
| s[m][i]=-1; | s[m][i]=-1; /* Droping the death status */ |
| } | } |
| if((int)moisdc[i]==99 && (int)andc[i]!=9999 && s[m][i]>nlstate){ | if((int)moisdc[i]==99 && (int)andc[i]!=9999 && s[m][i]>nlstate){ |
| (*nberr)++; | (*nberr)++; |
| printf("Error! Month of death of individual %ld on line %d was unknown %2d, you should set it otherwise the information on the death is skipped and results are biased.\n",num[i],i,(int)moisdc[i]); | printf("Error (#%d)! Month of death of individual %ld on line %d was unknown (%2d) (year of death is %4d) and status is a death state %d at wave %d. Please impute an arbitrary (or not) month and rerun. Currently this transition to death will be skipped (status is set to -2).\nOther similar cases in log file\n", *nberr, num[i],i,(int)moisdc[i],(int)andc[i],s[m][i],m); |
| fprintf(ficlog,"Error! Month of death of individual %ld on line %d was unknown %f, you should set it otherwise the information on the death is skipped and results are biased.\n",num[i],i,moisdc[i]); | fprintf(ficlog,"Error (#%d)! Month of death of individual %ld on line %d was unknown (%2d) (year of death is %4d) and status is a death state %d at wave %d. Please impute an arbitrary (or not) month and rerun. Currently this transition to death will be skipped (status is set to -2).\n", *nberr, num[i],i,(int)moisdc[i],(int)andc[i],s[m][i],m); |
| s[m][i]=-1; /* We prefer to skip it (and to skip it in version 0.8a1 too */ | s[m][i]=-2; /* We prefer to skip it (and to skip it in version 0.8a1 too */ |
| } | } |
| } | } |
| } | } |
| Line 8795 void syscompilerinfo(int logged) | Line 9732 void syscompilerinfo(int logged) |
| int prevalence_limit(double *p, double **prlim, double ageminpar, double agemaxpar, double ftolpl, int *ncvyearp){ | int prevalence_limit(double *p, double **prlim, double ageminpar, double agemaxpar, double ftolpl, int *ncvyearp){ |
| /*--------------- Prevalence limit (period or stable prevalence) --------------*/ | /*--------------- Prevalence limit (period or stable prevalence) --------------*/ |
| int i, j, k, i1 ; | int i, j, k, i1, k4=0, nres=0 ; |
| /* double ftolpl = 1.e-10; */ | /* double ftolpl = 1.e-10; */ |
| double age, agebase, agelim; | double age, agebase, agelim; |
| double tot; | double tot; |
| Line 8823 int prevalence_limit(double *p, double * | Line 9760 int prevalence_limit(double *p, double * |
| i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */ | i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */ |
| if (cptcovn < 1){i1=1;} | if (cptcovn < 1){i1=1;} |
| for(k=1; k<=i1;k++){ | for(k=1; k<=i1;k++){ /* For each combination k of dummy covariates in the model */ |
| /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | for(nres=1; nres <= nresult; nres++){ /* For each resultline */ |
| /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */ | if(i1 != 1 && TKresult[nres]!= k) |
| //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ | continue; |
| /* k=k+1; */ | |
| /* to clean */ | |
| //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov)); | |
| fprintf(ficrespl,"#******"); | |
| printf("#******"); | |
| fprintf(ficlog,"#******"); | |
| for(j=1;j<=cptcoveff ;j++) {/* all covariates */ | |
| fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); /* Here problem for varying dummy*/ | |
| printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| } | |
| fprintf(ficrespl,"******\n"); | |
| printf("******\n"); | |
| fprintf(ficlog,"******\n"); | |
| if(invalidvarcomb[k]){ | |
| printf("\nCombination (%d) ignored because no case \n",k); | |
| fprintf(ficrespl,"#Combination (%d) ignored because no case \n",k); | |
| fprintf(ficlog,"\nCombination (%d) ignored because no case \n",k); | |
| continue; | |
| } | |
| fprintf(ficrespl,"#Age "); | /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ |
| for(j=1;j<=cptcoveff;j++) { | /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */ |
| fprintf(ficrespl,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ |
| } | /* k=k+1; */ |
| for(i=1; i<=nlstate;i++) fprintf(ficrespl," %d-%d ",i,i); | /* to clean */ |
| fprintf(ficrespl,"Total Years_to_converge\n"); | //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov)); |
| fprintf(ficrespl,"#******"); | |
| printf("#******"); | |
| fprintf(ficlog,"#******"); | |
| for(j=1;j<=cptcoveff ;j++) {/* all covariates */ | |
| fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); /* Here problem for varying dummy*/ | |
| printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| } | |
| 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"); | |
| if(invalidvarcomb[k]){ | |
| printf("\nCombination (%d) ignored because no case \n",k); | |
| fprintf(ficrespl,"#Combination (%d) ignored because no case \n",k); | |
| fprintf(ficlog,"\nCombination (%d) ignored because no case \n",k); | |
| continue; | |
| } | |
| fprintf(ficrespl,"#Age "); | |
| for(j=1;j<=cptcoveff;j++) { | |
| fprintf(ficrespl,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| } | |
| for(i=1; i<=nlstate;i++) fprintf(ficrespl," %d-%d ",i,i); | |
| fprintf(ficrespl,"Total Years_to_converge\n"); | |
| for (age=agebase; age<=agelim; age++){ | for (age=agebase; age<=agelim; age++){ |
| /* for (age=agebase; age<=agebase; age++){ */ | /* for (age=agebase; age<=agebase; age++){ */ |
| prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k); | prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k, nres); |
| fprintf(ficrespl,"%.0f ",age ); | fprintf(ficrespl,"%.0f ",age ); |
| for(j=1;j<=cptcoveff;j++) | for(j=1;j<=cptcoveff;j++) |
| fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| tot=0.; | tot=0.; |
| for(i=1; i<=nlstate;i++){ | for(i=1; i<=nlstate;i++){ |
| tot += prlim[i][i]; | tot += prlim[i][i]; |
| fprintf(ficrespl," %.5f", prlim[i][i]); | fprintf(ficrespl," %.5f", prlim[i][i]); |
| } | } |
| fprintf(ficrespl," %.3f %d\n", tot, *ncvyearp); | fprintf(ficrespl," %.3f %d\n", tot, *ncvyearp); |
| } /* Age */ | } /* Age */ |
| /* was end of cptcod */ | /* was end of cptcod */ |
| } /* cptcov */ | } /* cptcov */ |
| } /* nres */ | |
| return 0; | return 0; |
| } | } |
| Line 8879 int back_prevalence_limit(double *p, dou | Line 9826 int back_prevalence_limit(double *p, dou |
| /* Computes the back prevalence limit for any combination of covariate values | /* Computes the back prevalence limit for any combination of covariate values |
| * at any age between ageminpar and agemaxpar | * at any age between ageminpar and agemaxpar |
| */ | */ |
| int i, j, k, i1 ; | int i, j, k, i1, nres=0 ; |
| /* double ftolpl = 1.e-10; */ | /* double ftolpl = 1.e-10; */ |
| double age, agebase, agelim; | double age, agebase, agelim; |
| double tot; | double tot; |
| Line 8910 int back_prevalence_limit(double *p, dou | Line 9857 int back_prevalence_limit(double *p, dou |
| i1=pow(2,cptcoveff); | i1=pow(2,cptcoveff); |
| if (cptcovn < 1){i1=1;} | if (cptcovn < 1){i1=1;} |
| for(k=1; k<=i1;k++){ | for(nres=1; nres <= nresult; nres++){ /* For each resultline */ |
| //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 */ |
| fprintf(ficresplb,"#******"); | if(i1 != 1 && TKresult[nres]!= k) |
| printf("#******"); | continue; |
| fprintf(ficlog,"#******"); | //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov)); |
| for(j=1;j<=cptcoveff ;j++) {/* all covariates */ | fprintf(ficresplb,"#******"); |
| fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | printf("#******"); |
| printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficlog,"#******"); |
| fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | for(j=1;j<=cptcoveff ;j++) {/* all covariates */ |
| } | fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| fprintf(ficresplb,"******\n"); | printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| printf("******\n"); | fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| fprintf(ficlog,"******\n"); | } |
| if(invalidvarcomb[k]){ | for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ |
| printf("\nCombination (%d) ignored because no cases \n",k); | printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); |
| fprintf(ficresplb,"#Combination (%d) ignored because no cases \n",k); | fprintf(ficresplb," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); |
| fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k); | fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); |
| continue; | } |
| } | fprintf(ficresplb,"******\n"); |
| printf("******\n"); | |
| fprintf(ficlog,"******\n"); | |
| if(invalidvarcomb[k]){ | |
| printf("\nCombination (%d) ignored because no cases \n",k); | |
| fprintf(ficresplb,"#Combination (%d) ignored because no cases \n",k); | |
| fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k); | |
| continue; | |
| } | |
| fprintf(ficresplb,"#Age "); | fprintf(ficresplb,"#Age "); |
| for(j=1;j<=cptcoveff;j++) { | for(j=1;j<=cptcoveff;j++) { |
| fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| } | } |
| for(i=1; i<=nlstate;i++) fprintf(ficresplb," %d-%d ",i,i); | for(i=1; i<=nlstate;i++) fprintf(ficresplb," %d-%d ",i,i); |
| fprintf(ficresplb,"Total Years_to_converge\n"); | fprintf(ficresplb,"Total Years_to_converge\n"); |
| for (age=agebase; age<=agelim; age++){ | for (age=agebase; age<=agelim; age++){ |
| /* for (age=agebase; age<=agebase; age++){ */ | /* for (age=agebase; age<=agebase; age++){ */ |
| if(mobilavproj > 0){ | if(mobilavproj > 0){ |
| /* bprevalim(bprlim, mobaverage, nlstate, p, age, ageminpar, agemaxpar, oldm, savm, doldm, dsavm, ftolpl, ncvyearp, k); */ | /* bprevalim(bprlim, mobaverage, nlstate, p, age, ageminpar, agemaxpar, oldm, savm, doldm, dsavm, ftolpl, ncvyearp, k); */ |
| /* bprevalim(bprlim, mobaverage, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */ | /* bprevalim(bprlim, mobaverage, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */ |
| bprevalim(bprlim, mobaverage, nlstate, p, age, ftolpl, ncvyearp, k); | bprevalim(bprlim, mobaverage, nlstate, p, age, ftolpl, ncvyearp, k, nres); |
| }else if (mobilavproj == 0){ | }else if (mobilavproj == 0){ |
| printf("There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj); | printf("There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj); |
| fprintf(ficlog,"There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj); | fprintf(ficlog,"There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj); |
| exit(1); | exit(1); |
| }else{ | }else{ |
| /* bprevalim(bprlim, probs, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */ | /* bprevalim(bprlim, probs, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */ |
| bprevalim(bprlim, probs, nlstate, p, age, ftolpl, ncvyearp, k); | bprevalim(bprlim, probs, nlstate, p, age, ftolpl, ncvyearp, k,nres); |
| } | /* printf("TOTOT\n"); */ |
| fprintf(ficresplb,"%.0f ",age ); | /* exit(1); */ |
| for(j=1;j<=cptcoveff;j++) | } |
| fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresplb,"%.0f ",age ); |
| tot=0.; | for(j=1;j<=cptcoveff;j++) |
| for(i=1; i<=nlstate;i++){ | fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| tot += bprlim[i][i]; | tot=0.; |
| fprintf(ficresplb," %.5f", bprlim[i][i]); | for(i=1; i<=nlstate;i++){ |
| } | tot += bprlim[i][i]; |
| fprintf(ficresplb," %.3f %d\n", tot, *ncvyearp); | fprintf(ficresplb," %.5f", bprlim[i][i]); |
| } /* Age */ | } |
| /* was end of cptcod */ | fprintf(ficresplb," %.3f %d\n", tot, *ncvyearp); |
| } /* cptcov */ | } /* 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 nres */ | |
| /* hBijx(p, bage, fage); */ | /* hBijx(p, bage, fage); */ |
| /* fclose(ficrespijb); */ | /* fclose(ficrespijb); */ |
| Line 8978 int hPijx(double *p, int bage, int fage) | Line 9936 int hPijx(double *p, int bage, int fage) |
| int agelim; | int agelim; |
| int hstepm; | int hstepm; |
| int nhstepm; | int nhstepm; |
| int h, i, i1, j, k; | int h, i, i1, j, k, k4, nres=0; |
| double agedeb; | double agedeb; |
| double ***p3mat; | double ***p3mat; |
| Line 9005 int hPijx(double *p, int bage, int fage) | Line 9963 int hPijx(double *p, int bage, int fage) |
| /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ |
| /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ | /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ |
| /* k=k+1; */ | /* k=k+1; */ |
| for (k=1; k <= (int) pow(2,cptcoveff); k++){ | 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#****** "); | fprintf(ficrespij,"\n#****** "); |
| for(j=1;j<=cptcoveff;j++) | for(j=1;j<=cptcoveff;j++) |
| fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,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"); | fprintf(ficrespij,"******\n"); |
| for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */ | for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */ |
| Line 9019 int hPijx(double *p, int bage, int fage) | Line 9984 int hPijx(double *p, int bage, int fage) |
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); |
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; |
| hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); | hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k, nres); |
| fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j="); | fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j="); |
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) |
| for(j=1; j<=nlstate+ndeath;j++) | for(j=1; j<=nlstate+ndeath;j++) |
| Line 9049 int hPijx(double *p, int bage, int fage) | Line 10014 int hPijx(double *p, int bage, int fage) |
| int ageminl; | int ageminl; |
| int hstepm; | int hstepm; |
| int nhstepm; | int nhstepm; |
| int h, i, i1, j, k; | int h, i, i1, j, k, nres; |
| double agedeb; | double agedeb; |
| double ***p3mat; | double ***p3mat; |
| Line 9072 int hPijx(double *p, int bage, int fage) | Line 10037 int hPijx(double *p, int bage, int fage) |
| /* hstepm=1; aff par mois*/ | /* hstepm=1; aff par mois*/ |
| pstamp(ficrespijb); | pstamp(ficrespijb); |
| fprintf(ficrespijb,"#****** h Pij x Back Probability to be in state i at age x-h being in j at x "); | fprintf(ficrespijb,"#****** h Bij x Back probability to be in state i at age x-h being in j at x: B1j+B2j+...=1 "); |
| i1= pow(2,cptcoveff); | i1= pow(2,cptcoveff); |
| /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ |
| /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ | /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ |
| /* k=k+1; */ | /* k=k+1; */ |
| for (k=1; k <= (int) pow(2,cptcoveff); k++){ | for(nres=1; nres <= nresult; nres++){ /* For each resultline */ |
| fprintf(ficrespijb,"\n#****** "); | for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */ |
| for(j=1;j<=cptcoveff;j++) | if(i1 != 1 && TKresult[nres]!= k) |
| fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | continue; |
| fprintf(ficrespijb,"******\n"); | fprintf(ficrespijb,"\n#****** "); |
| if(invalidvarcomb[k]){ | for(j=1;j<=cptcoveff;j++) |
| fprintf(ficrespijb,"\n#Combination (%d) ignored because no cases \n",k); | fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| continue; | for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ |
| } | fprintf(ficrespijb," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); |
| } | |
| /* for (agedeb=fage; agedeb>=bage; agedeb--){ /\* If stepm=6 months *\/ */ | fprintf(ficrespijb,"******\n"); |
| for (agedeb=bage; agedeb<=fage; agedeb++){ /* If stepm=6 months and estepm=24 (2 years) */ | if(invalidvarcomb[k]){ /* Is it necessary here? */ |
| /* nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /\* Typically 20 years = 20*12/6=40 *\/ */ | fprintf(ficrespijb,"\n#Combination (%d) ignored because no cases \n",k); |
| nhstepm=(int) rint((agedeb-ageminl)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */ | continue; |
| nhstepm = nhstepm/hstepm; /* Typically 40/4=10, because estepm=24 stepm=6 => hstepm=24/6=4 */ | } |
| /* nhstepm=nhstepm*YEARM; aff par mois*/ | /* 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) */ | |
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | /* nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /\* Typically 20 years = 20*12/6=40 *\/ */ |
| /* oldm=oldms;savm=savms; */ | nhstepm=(int) rint((agedeb-ageminl)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */ |
| /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); */ | nhstepm = nhstepm/hstepm; /* Typically 40/4=10, because estepm=24 stepm=6 => hstepm=24/6=4 */ |
| hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm, k); | |
| /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm,oldm,savm, dnewm, doldm, dsavm, k); */ | /* nhstepm=nhstepm*YEARM; aff par mois*/ |
| fprintf(ficrespijb,"# Cov Agex agex-h hpijx with i,j="); | |
| for(i=1; i<=nlstate;i++) | p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); /* We can't have it at an upper level because of nhstepm */ |
| for(j=1; j<=nlstate+ndeath;j++) | /* and memory limitations if stepm is small */ |
| fprintf(ficrespijb," %1d-%1d",i,j); | |
| fprintf(ficrespijb,"\n"); | /* oldm=oldms;savm=savms; */ |
| for (h=0; h<=nhstepm; h++){ | /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); */ |
| /*agedebphstep = agedeb + h*hstepm/YEARM*stepm;*/ | hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm, k); |
| fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb - h*hstepm/YEARM*stepm ); | /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm,oldm,savm, dnewm, doldm, dsavm, k); */ |
| /* fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb + h*hstepm/YEARM*stepm ); */ | fprintf(ficrespijb,"# Cov Agex agex-h hbijx with i,j="); |
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) |
| for(j=1; j<=nlstate+ndeath;j++) | for(j=1; j<=nlstate+ndeath;j++) |
| fprintf(ficrespijb," %.5f", p3mat[i][j][h]); | fprintf(ficrespijb," %1d-%1d",i,j); |
| fprintf(ficrespijb,"\n"); | fprintf(ficrespijb,"\n"); |
| } | for (h=0; h<=nhstepm; h++){ |
| free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | /*agedebphstep = agedeb + h*hstepm/YEARM*stepm;*/ |
| fprintf(ficrespijb,"\n"); | 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]); | |
| fprintf(ficrespijb,"\n"); | |
| } | |
| free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | |
| fprintf(ficrespijb,"\n"); | |
| } /* end age deb */ | |
| } /* end combination */ | |
| } /* end nres */ | |
| return 0; | return 0; |
| } /* hBijx */ | } /* hBijx */ |
| Line 9145 int main(int argc, char *argv[]) | Line 10118 int main(int argc, char *argv[]) |
| int itimes; | int itimes; |
| int NDIM=2; | int NDIM=2; |
| int vpopbased=0; | int vpopbased=0; |
| int nres=0; | |
| int endishere=0; | |
| char ca[32], cb[32]; | char ca[32], cb[32]; |
| /* FILE *fichtm; *//* Html File */ | /* FILE *fichtm; *//* Html File */ |
| Line 9189 int main(int argc, char *argv[]) | Line 10164 int main(int argc, char *argv[]) |
| double **prlim; | double **prlim; |
| double **bprlim; | double **bprlim; |
| double ***param; /* Matrix of parameters */ | double ***param; /* Matrix of parameters */ |
| double *p; | double ***paramstart; /* Matrix of starting parameter values */ |
| double *p, *pstart; /* p=param[1][1] pstart is for starting values guessed by freqsummary */ | |
| double **matcov; /* Matrix of covariance */ | double **matcov; /* Matrix of covariance */ |
| double **hess; /* Hessian matrix */ | double **hess; /* Hessian matrix */ |
| double ***delti3; /* Scale */ | double ***delti3; /* Scale */ |
| Line 9425 int main(int argc, char *argv[]) | Line 10401 int main(int argc, char *argv[]) |
| break; | break; |
| } | } |
| if((num_filled=sscanf(line,"model=1+age%[^.\n]", model)) !=EOF){ | if((num_filled=sscanf(line,"model=1+age%[^.\n]", model)) !=EOF){ |
| if (num_filled == 0) | if (num_filled == 0){ |
| model[0]='\0'; | printf("ERROR %d: Model should be at minimum 'model=1+age.' WITHOUT space:'%s'\n",num_filled, line); |
| else if (num_filled != 1){ | fprintf(ficlog,"ERROR %d: Model should be at minimum 'model=1+age.' WITHOUT space:'%s'\n",num_filled, line); |
| model[0]='\0'; | |
| goto end; | |
| } else if (num_filled != 1){ | |
| printf("ERROR %d: Model should be at minimum 'model=1+age.' %s\n",num_filled, line); | printf("ERROR %d: Model should be at minimum 'model=1+age.' %s\n",num_filled, line); |
| fprintf(ficlog,"ERROR %d: Model should be at minimum 'model=1+age.' %s\n",num_filled, line); | fprintf(ficlog,"ERROR %d: Model should be at minimum 'model=1+age.' %s\n",num_filled, line); |
| model[0]='\0'; | model[0]='\0'; |
| Line 9500 int main(int argc, char *argv[]) | Line 10479 int main(int argc, char *argv[]) |
| delti=delti3[1][1]; | delti=delti3[1][1]; |
| /*delti=vector(1,npar); *//* Scale of each paramater (output from hesscov)*/ | /*delti=vector(1,npar); *//* Scale of each paramater (output from hesscov)*/ |
| if(mle==-1){ /* Print a wizard for help writing covariance matrix */ | if(mle==-1){ /* Print a wizard for help writing covariance matrix */ |
| /* We could also provide initial parameters values giving by simple logistic regression | |
| * only one way, that is without matrix product. We will have nlstate maximizations */ | |
| /* for(i=1;i<nlstate;i++){ */ | |
| /* /\*reducing xi for 1 to npar to 1 to ncovmodel; *\/ */ | |
| /* mlikeli(ficres,p, ncovmodel, ncovmodel, nlstate, ftol, funcnoprod); */ | |
| /* } */ | |
| prwizard(ncovmodel, nlstate, ndeath, model, ficparo); | prwizard(ncovmodel, nlstate, ndeath, model, ficparo); |
| printf(" You chose mle=-1, look at file %s for a template of covariance matrix \n",filereso); | printf(" You chose mle=-1, look at file %s for a template of covariance matrix \n",filereso); |
| fprintf(ficlog," You chose mle=-1, look at file %s for a template of covariance matrix \n",filereso); | fprintf(ficlog," You chose mle=-1, look at file %s for a template of covariance matrix \n",filereso); |
| Line 9529 int main(int argc, char *argv[]) | Line 10514 int main(int argc, char *argv[]) |
| ungetc(c,ficpar); | ungetc(c,ficpar); |
| param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); | param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); |
| paramstart= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); | |
| for(i=1; i <=nlstate; i++){ | for(i=1; i <=nlstate; i++){ |
| j=0; | j=0; |
| for(jj=1; jj <=nlstate+ndeath; jj++){ | for(jj=1; jj <=nlstate+ndeath; jj++){ |
| Line 9565 run imach with mle=-1 to get a correct t | Line 10551 run imach with mle=-1 to get a correct t |
| } | } |
| fflush(ficlog); | fflush(ficlog); |
| /* Reads scales values */ | /* Reads parameters values */ |
| p=param[1][1]; | p=param[1][1]; |
| pstart=paramstart[1][1]; | |
| /* Reads comments: lines beginning with '#' */ | /* Reads comments: lines beginning with '#' */ |
| while((c=getc(ficpar))=='#' && c!= EOF){ | while((c=getc(ficpar))=='#' && c!= EOF){ |
| Line 9831 Please run with mle=-1 to get a correct | Line 10818 Please run with mle=-1 to get a correct |
| */ | */ |
| concatwav(wav, dh, bh, mw, s, agedc, agev, firstpass, lastpass, imx, nlstate, stepm); | concatwav(wav, dh, bh, mw, s, agedc, agev, firstpass, lastpass, imx, nlstate, stepm); |
| /* */ | /* Concatenates waves */ |
| free_vector(moisdc,1,n); | free_vector(moisdc,1,n); |
| free_vector(andc,1,n); | free_vector(andc,1,n); |
| Line 10012 Title=%s <br>Datafile=%s Firstpass=%d La | Line 10999 Title=%s <br>Datafile=%s Firstpass=%d La |
| /* Calculates basic frequencies. Computes observed prevalence at single age | /* Calculates basic frequencies. Computes observed prevalence at single age |
| and for any valid combination of covariates | and for any valid combination of covariates |
| and prints on file fileres'p'. */ | and prints on file fileres'p'. */ |
| freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx, Tvaraff, invalidvarcomb, nbcode, ncodemax,mint,anint,strstart, \ | freqsummary(fileres, p, pstart, agemin, agemax, s, agev, nlstate, imx, Tvaraff, invalidvarcomb, nbcode, ncodemax,mint,anint,strstart, \ |
| firstpass, lastpass, stepm, weightopt, model); | firstpass, lastpass, stepm, weightopt, model); |
| fprintf(fichtm,"\n"); | fprintf(fichtm,"\n"); |
| Line 10034 Interval (in months) between two waves: | Line 11021 Interval (in months) between two waves: |
| /* For mortality only */ | /* For mortality only */ |
| if (mle==-3){ | if (mle==-3){ |
| ximort=matrix(1,NDIM,1,NDIM); | ximort=matrix(1,NDIM,1,NDIM); |
| for(i=1;i<=NDIM;i++) | for(i=1;i<=NDIM;i++) |
| for(j=1;j<=NDIM;j++) | for(j=1;j<=NDIM;j++) |
| ximort[i][j]=0.; | ximort[i][j]=0.; |
| /* ximort=gsl_matrix_alloc(1,NDIM,1,NDIM); */ | /* ximort=gsl_matrix_alloc(1,NDIM,1,NDIM); */ |
| cens=ivector(1,n); | cens=ivector(1,n); |
| ageexmed=vector(1,n); | ageexmed=vector(1,n); |
| Line 10272 Please run with mle=-1 to get a correct | Line 11259 Please run with mle=-1 to get a correct |
| printf("\n"); | printf("\n"); |
| if(mle>=1){ /* Could be 1 or 2, Real Maximization */ | if(mle>=1){ /* Could be 1 or 2, Real Maximization */ |
| /* mlikeli uses func not funcone */ | /* mlikeli uses func not funcone */ |
| /* for(i=1;i<nlstate;i++){ */ | |
| /* /\*reducing xi for 1 to npar to 1 to ncovmodel; *\/ */ | |
| /* mlikeli(ficres,p, ncovmodel, ncovmodel, nlstate, ftol, funcnoprod); */ | |
| /* } */ | |
| mlikeli(ficres,p, npar, ncovmodel, nlstate, ftol, func); | mlikeli(ficres,p, npar, ncovmodel, nlstate, ftol, func); |
| } | } |
| if(mle==0) {/* No optimization, will print the likelihoods for the datafile */ | if(mle==0) {/* No optimization, will print the likelihoods for the datafile */ |
| Line 10487 Please run with mle=-1 to get a correct | Line 11478 Please run with mle=-1 to get a correct |
| fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d, ftolpl=%e\n",ageminpar,agemaxpar,bage,fage, estepm, ftolpl); | fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d, ftolpl=%e\n",ageminpar,agemaxpar,bage,fage, estepm, ftolpl); |
| /* Other stuffs, more or less useful */ | /* Other stuffs, more or less useful */ |
| while((c=getc(ficpar))=='#' && c!= EOF){ | while(fgets(line, MAXLINE, ficpar)) { |
| ungetc(c,ficpar); | /* If line starts with a # it is a comment */ |
| fgets(line, MAXLINE, ficpar); | if (line[0] == '#') { |
| fputs(line,stdout); | numlinepar++; |
| fputs(line,ficparo); | fputs(line,stdout); |
| } | fputs(line,ficparo); |
| ungetc(c,ficpar); | fputs(line,ficlog); |
| continue; | |
| fscanf(ficpar,"begin-prev-date=%lf/%lf/%lf end-prev-date=%lf/%lf/%lf mov_average=%d\n",&jprev1, &mprev1,&anprev1,&jprev2, &mprev2,&anprev2,&mobilav); | }else |
| fprintf(ficparo,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav); | break; |
| fprintf(ficres,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav); | |
| printf("begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav); | |
| fprintf(ficlog,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav); | |
| while((c=getc(ficpar))=='#' && c!= EOF){ | |
| ungetc(c,ficpar); | |
| fgets(line, MAXLINE, ficpar); | |
| fputs(line,stdout); | |
| fputs(line,ficparo); | |
| } | |
| ungetc(c,ficpar); | |
| dateprev1=anprev1+(mprev1-1)/12.+(jprev1-1)/365.; | |
| dateprev2=anprev2+(mprev2-1)/12.+(jprev2-1)/365.; | |
| fscanf(ficpar,"pop_based=%d\n",&popbased); | |
| fprintf(ficlog,"pop_based=%d\n",popbased); | |
| fprintf(ficparo,"pop_based=%d\n",popbased); | |
| fprintf(ficres,"pop_based=%d\n",popbased); | |
| while((c=getc(ficpar))=='#' && c!= EOF){ | |
| ungetc(c,ficpar); | |
| fgets(line, MAXLINE, ficpar); | |
| fputs(line,stdout); | |
| fputs(line,ficparo); | |
| } | } |
| ungetc(c,ficpar); | |
| if((num_filled=sscanf(line,"begin-prev-date=%lf/%lf/%lf end-prev-date=%lf/%lf/%lf mov_average=%d\n",&jprev1, &mprev1,&anprev1,&jprev2, &mprev2,&anprev2,&mobilav)) !=EOF){ | |
| fscanf(ficpar,"prevforecast=%d starting-proj-date=%lf/%lf/%lf final-proj-date=%lf/%lf/%lf mobil_average=%d\n",&prevfcast,&jproj1,&mproj1,&anproj1,&jproj2,&mproj2,&anproj2,&mobilavproj); | |
| fprintf(ficparo,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); | if (num_filled != 7) { |
| printf("prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); | printf("Error: Not 7 (data)parameters in line but %d, for example:begin-prev-date=1/1/1990 end-prev-date=1/6/2004 mov_average=0\n, your line=%s . Probably you are running an older format.\n",num_filled,line); |
| fprintf(ficlog,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); | fprintf(ficlog,"Error: Not 7 (data)parameters in line but %d, for example:begin-prev-date=1/1/1990 end-prev-date=1/6/2004 mov_average=0\n, your line=%s . Probably you are running an older format.\n",num_filled,line); |
| fprintf(ficres,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); | goto end; |
| /* day and month of proj2 are not used but only year anproj2.*/ | } |
| printf("begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav); | |
| while((c=getc(ficpar))=='#' && c!= EOF){ | fprintf(ficparo,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav); |
| ungetc(c,ficpar); | fprintf(ficres,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav); |
| fgets(line, MAXLINE, ficpar); | fprintf(ficlog,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav); |
| fputs(line,stdout); | |
| fputs(line,ficparo); | |
| } | } |
| ungetc(c,ficpar); | |
| fscanf(ficpar,"backcast=%d starting-back-date=%lf/%lf/%lf final-back-date=%lf/%lf/%lf mobil_average=%d\n",&backcast,&jback1,&mback1,&anback1,&jback2,&mback2,&anback2,&mobilavproj); | |
| fprintf(ficparo,"backcast=%d starting-back-date=%.lf/%.lf/%.lf final-back-date=%.lf/%.lf/%.lf mobil_average=%d\n",backcast,jback1,mback1,anback1,jback2,mback2,anback2,mobilavproj); | |
| fprintf(ficlog,"backcast=%d starting-back-date=%.lf/%.lf/%.lf final-back-date=%.lf/%.lf/%.lf mobil_average=%d\n",backcast,jback1,mback1,anback1,jback2,mback2,anback2,mobilavproj); | |
| fprintf(ficres,"backcast=%d starting-back-date=%.lf/%.lf/%.lf final-back-date=%.lf/%.lf/%.lf mobil_average=%d\n",backcast,jback1,mback1,anback1,jback2,mback2,anback2,mobilavproj); | |
| /* day and month of proj2 are not used but only year anproj2.*/ | |
| /* Results */ | |
| while(fgets(line, MAXLINE, ficpar)) { | while(fgets(line, MAXLINE, ficpar)) { |
| /* If line starts with a # it is a comment */ | /* If line starts with a # it is a comment */ |
| if (line[0] == '#') { | if (line[0] == '#') { |
| Line 10559 Please run with mle=-1 to get a correct | Line 11514 Please run with mle=-1 to get a correct |
| }else | }else |
| break; | break; |
| } | } |
| while((num_filled=sscanf(line,"result:%[^\n]\n",resultline)) !=EOF){ | |
| if (num_filled == 0) | |
| resultline[0]='\0'; | dateprev1=anprev1+(mprev1-1)/12.+(jprev1-1)/365.; |
| else if (num_filled != 1){ | dateprev2=anprev2+(mprev2-1)/12.+(jprev2-1)/365.; |
| printf("ERROR %d: result line should be at minimum 'result=' %s\n",num_filled, line); | |
| } | if((num_filled=sscanf(line,"pop_based=%d\n",&popbased)) !=EOF){ |
| printf("Result %d: result line should be at minimum 'line=' %s, result=%s\n",num_filled, line, resultline); | if (num_filled != 1) { |
| decoderesult(resultline); | printf("Error: Not 1 (data)parameters in line but %d, for example:pop_based=0\n, your line=%s . Probably you are running an older format.\n",num_filled,line); |
| while(fgets(line, MAXLINE, ficpar)) { | fprintf(ficlog,"Error: Not 1 (data)parameters in line but %d, for example: pop_based=1\n, your line=%s . Probably you are running an older format.\n",num_filled,line); |
| goto end; | |
| } | |
| printf("pop_based=%d\n",popbased); | |
| fprintf(ficlog,"pop_based=%d\n",popbased); | |
| fprintf(ficparo,"pop_based=%d\n",popbased); | |
| fprintf(ficres,"pop_based=%d\n",popbased); | |
| } | |
| /* Results */ | |
| nresult=0; | |
| do{ | |
| if(!fgets(line, MAXLINE, ficpar)){ | |
| endishere=1; | |
| parameterline=14; | |
| }else if (line[0] == '#') { | |
| /* If line starts with a # it is a comment */ | /* If line starts with a # it is a comment */ |
| if (line[0] == '#') { | numlinepar++; |
| numlinepar++; | fputs(line,stdout); |
| fputs(line,stdout); | fputs(line,ficparo); |
| fputs(line,ficparo); | fputs(line,ficlog); |
| fputs(line,ficlog); | continue; |
| continue; | }else if(sscanf(line,"prevforecast=%[^\n]\n",modeltemp)) |
| }else | parameterline=11; |
| break; | else if(sscanf(line,"backcast=%[^\n]\n",modeltemp)) |
| parameterline=12; | |
| else if(sscanf(line,"result:%[^\n]\n",modeltemp)) | |
| parameterline=13; | |
| else{ | |
| parameterline=14; | |
| } | } |
| if (feof(ficpar)) | switch (parameterline){ |
| case 11: | |
| if((num_filled=sscanf(line,"prevforecast=%d starting-proj-date=%lf/%lf/%lf final-proj-date=%lf/%lf/%lf mobil_average=%d\n",&prevfcast,&jproj1,&mproj1,&anproj1,&jproj2,&mproj2,&anproj2,&mobilavproj)) !=EOF){ | |
| if (num_filled != 8) { | |
| printf("Error: Not 8 (data)parameters in line but %d, for example:prevforecast=1 starting-proj-date=1/1/1990 final-proj-date=1/1/2000 mobil_average=0\n, your line=%s . Probably you are running an older format.\n",num_filled,line); | |
| fprintf(ficlog,"Error: Not 8 (data)parameters in line but %d, for example:prevforecast=1 starting-proj-date=1/1/1990 final-proj-date=1/1/2000 mov_average=0\n, your line=%s . Probably you are running an older format.\n",num_filled,line); | |
| goto end; | |
| } | |
| fprintf(ficparo,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); | |
| printf("prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); | |
| fprintf(ficlog,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); | |
| fprintf(ficres,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); | |
| /* day and month of proj2 are not used but only year anproj2.*/ | |
| } | |
| break; | break; |
| else{ /* Processess output results for this combination of covariate values */ | case 12: |
| } | /*fscanf(ficpar,"backcast=%d starting-back-date=%lf/%lf/%lf final-back-date=%lf/%lf/%lf mobil_average=%d\n",&backcast,&jback1,&mback1,&anback1,&jback2,&mback2,&anback2,&mobilavproj);*/ |
| } | if((num_filled=sscanf(line,"backcast=%d starting-back-date=%lf/%lf/%lf final-back-date=%lf/%lf/%lf mobil_average=%d\n",&backcast,&jback1,&mback1,&anback1,&jback2,&mback2,&anback2,&mobilavproj)) !=EOF){ |
| if (num_filled != 8) { | |
| printf("Error: Not 8 (data)parameters in line but %d, for example:backcast=1 starting-back-date=1/1/1990 final-back-date=1/1/1970 mobil_average=1\n, your line=%s . Probably you are running an older format.\n",num_filled,line); | |
| fprintf(ficlog,"Error: Not 8 (data)parameters in line but %d, for example:backcast=1 starting-back-date=1/1/1990 final-back-date=1/1/1970 mobil_average=1\n, your line=%s . Probably you are running an older format.\n",num_filled,line); | |
| goto end; | |
| } | |
| printf("backcast=%d starting-back-date=%.lf/%.lf/%.lf final-back-date=%.lf/%.lf/%.lf mobil_average=%d\n",backcast,jback1,mback1,anback1,jback2,mback2,anback2,mobilavproj); | |
| fprintf(ficparo,"backcast=%d starting-back-date=%.lf/%.lf/%.lf final-back-date=%.lf/%.lf/%.lf mobil_average=%d\n",backcast,jback1,mback1,anback1,jback2,mback2,anback2,mobilavproj); | |
| fprintf(ficlog,"backcast=%d starting-back-date=%.lf/%.lf/%.lf final-back-date=%.lf/%.lf/%.lf mobil_average=%d\n",backcast,jback1,mback1,anback1,jback2,mback2,anback2,mobilavproj); | |
| fprintf(ficres,"backcast=%d starting-back-date=%.lf/%.lf/%.lf final-back-date=%.lf/%.lf/%.lf mobil_average=%d\n",backcast,jback1,mback1,anback1,jback2,mback2,anback2,mobilavproj); | |
| /* day and month of proj2 are not used but only year anproj2.*/ | |
| } | |
| break; | |
| case 13: | |
| if((num_filled=sscanf(line,"result:%[^\n]\n",resultline)) !=EOF){ | |
| if (num_filled == 0){ | |
| resultline[0]='\0'; | |
| printf("Warning %d: no result line! It should be at minimum 'result: V2=0 V1=1 or result:.\n%s\n", num_filled, line); | |
| fprintf(ficlog,"Warning %d: no result line! It should be at minimum 'result: V2=0 V1=1 or result:.\n%s\n", num_filled, line); | |
| break; | |
| } else if (num_filled != 1){ | |
| printf("ERROR %d: result line! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",num_filled, line); | |
| fprintf(ficlog,"ERROR %d: result line! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",num_filled, line); | |
| } | |
| nresult++; /* Sum of resultlines */ | |
| printf("Result %d: result=%s\n",nresult, resultline); | |
| if(nresult > MAXRESULTLINES){ | |
| printf("ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult); | |
| fprintf(ficlog,"ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult); | |
| goto end; | |
| } | |
| decoderesult(resultline, nresult); /* Fills TKresult[nresult] combination and Tresult[nresult][k4+1] combination values */ | |
| fprintf(ficparo,"result: %s\n",resultline); | |
| fprintf(ficres,"result: %s\n",resultline); | |
| fprintf(ficlog,"result: %s\n",resultline); | |
| break; | |
| case 14: | |
| if(ncovmodel >2 && nresult==0 ){ | |
| printf("ERROR: no result lines! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",line); | |
| goto end; | |
| } | |
| break; | |
| default: | |
| nresult=1; | |
| decoderesult(".",nresult ); /* No covariate */ | |
| } | |
| } /* End switch parameterline */ | |
| }while(endishere==0); /* End do */ | |
| /* freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint); */ | /* freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint); */ |
| /* ,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2); */ | /* ,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2); */ |
| Line 10598 Please run with mle=-1 to get a correct | Line 11631 Please run with mle=-1 to get a correct |
| This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\ | This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\ |
| Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar); | Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar); |
| }else{ | }else{ |
| printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p); | printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p, (int)anproj1-(int)ageminpar); |
| } | } |
| printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt, \ | printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt, \ |
| model,imx,jmin,jmax,jmean,rfileres,popforecast,prevfcast,backcast, estepm, \ | model,imx,jmin,jmax,jmean,rfileres,popforecast,mobilav,prevfcast,mobilavproj,backcast, estepm, \ |
| jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2); | jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2); |
| /*------------ free_vector -------------*/ | /*------------ free_vector -------------*/ |
| Line 10653 Please run with mle=-1 to get a correct | Line 11686 Please run with mle=-1 to get a correct |
| mobaverages[i][j][k]=0.; | mobaverages[i][j][k]=0.; |
| mobaverage=mobaverages; | mobaverage=mobaverages; |
| if (mobilav!=0) { | if (mobilav!=0) { |
| printf("Movingaveraging observed prevalence\n"); | |
| fprintf(ficlog,"Movingaveraging observed prevalence\n"); | |
| if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilav)!=0){ | if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilav)!=0){ |
| fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav); | fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav); |
| printf(" Error in movingaverage mobilav=%d\n",mobilav); | printf(" Error in movingaverage mobilav=%d\n",mobilav); |
| } | } |
| } | } |
| /* /\* Prevalence for each covariates in probs[age][status][cov] *\/ */ | /* else if(mobilavproj==-1){ /\* Forcing raw observed prevalences *\/ */ |
| /* prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); */ | /* for(i=1;i<=AGESUP;i++) */ |
| /* for(j=1;j<=nlstate;j++) */ | |
| /* for(k=1;k<=ncovcombmax;k++) */ | |
| /* mobaverages[i][j][k]=probs[i][j][k]; */ | |
| /* /\* /\\* Prevalence for each covariates in probs[age][status][cov] *\\/ *\/ */ | |
| /* /\* prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); *\/ */ | |
| /* } */ | |
| else if (mobilavproj !=0) { | else if (mobilavproj !=0) { |
| printf("Movingaveraging projected observed prevalence\n"); | |
| fprintf(ficlog,"Movingaveraging projected observed prevalence\n"); | |
| if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilavproj)!=0){ | if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilavproj)!=0){ |
| fprintf(ficlog," Error in movingaverage mobilavproj=%d\n",mobilavproj); | fprintf(ficlog," Error in movingaverage mobilavproj=%d\n",mobilavproj); |
| printf(" Error in movingaverage mobilavproj=%d\n",mobilavproj); | printf(" Error in movingaverage mobilavproj=%d\n",mobilavproj); |
| Line 10715 Please run with mle=-1 to get a correct | Line 11758 Please run with mle=-1 to get a correct |
| } | } |
| printf("Computing Health Expectancies: result on file '%s' ...", filerese);fflush(stdout); | printf("Computing Health Expectancies: result on file '%s' ...", filerese);fflush(stdout); |
| fprintf(ficlog,"Computing Health Expectancies: result on file '%s' ...", filerese);fflush(ficlog); | fprintf(ficlog,"Computing Health Expectancies: result on file '%s' ...", filerese);fflush(ficlog); |
| pstamp(ficreseij); | |
| for (k=1; k <= (int) pow(2,cptcoveff); k++){ /* For any combination of dummy covariates, fixed and varying */ | i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */ |
| 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; | |
| fprintf(ficreseij,"\n#****** "); | fprintf(ficreseij,"\n#****** "); |
| printf("\n#****** "); | |
| for(j=1;j<=cptcoveff;j++) { | for(j=1;j<=cptcoveff;j++) { |
| fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| } | |
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficreseij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | } |
| fprintf(ficreseij,"******\n"); | fprintf(ficreseij,"******\n"); |
| printf("******\n"); | |
| eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); |
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; |
| evsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart); | evsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart, nres); |
| free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); |
| } | } |
| Line 10776 Please run with mle=-1 to get a correct | Line 11834 Please run with mle=-1 to get a correct |
| /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ |
| for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ | for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ |
| for (k=1; k <= (int) pow(2,cptcoveff); k++){ | i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */ |
| printf("\n#****** "); | if (cptcovn < 1){i1=1;} |
| fprintf(ficrest,"\n#****** "); | |
| fprintf(ficlog,"\n#****** "); | 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("\n#****** Result for:"); | |
| fprintf(ficrest,"\n#****** Result for:"); | |
| fprintf(ficlog,"\n#****** Result for:"); | |
| for(j=1;j<=cptcoveff;j++){ | for(j=1;j<=cptcoveff;j++){ |
| printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| } | } |
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficrest," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| fprintf(ficrest,"******\n"); | fprintf(ficrest,"******\n"); |
| fprintf(ficlog,"******\n"); | fprintf(ficlog,"******\n"); |
| printf("******\n"); | printf("******\n"); |
| Line 10795 Please run with mle=-1 to get a correct | Line 11864 Please run with mle=-1 to get a correct |
| fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| } | } |
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| fprintf(ficresstdeij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficrescveij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| fprintf(ficresstdeij,"******\n"); | fprintf(ficresstdeij,"******\n"); |
| fprintf(ficrescveij,"******\n"); | fprintf(ficrescveij,"******\n"); |
| fprintf(ficresvij,"\n#****** "); | fprintf(ficresvij,"\n#****** "); |
| /* pstamp(ficresvij); */ | |
| for(j=1;j<=cptcoveff;j++) | for(j=1;j<=cptcoveff;j++) |
| fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| fprintf(ficresvij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| fprintf(ficresvij,"******\n"); | fprintf(ficresvij,"******\n"); |
| eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); |
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; |
| printf(" cvevsij combination#=%d, ",k); | printf(" cvevsij "); |
| fprintf(ficlog, " cvevsij combination#=%d, ",k); | fprintf(ficlog, " cvevsij "); |
| cvevsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart); | cvevsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart, nres); |
| printf(" end cvevsij \n "); | printf(" end cvevsij \n "); |
| fprintf(ficlog, " end cvevsij \n "); | fprintf(ficlog, " end cvevsij \n "); |
| Line 10824 Please run with mle=-1 to get a correct | Line 11901 Please run with mle=-1 to get a correct |
| cptcod= 0; /* To be deleted */ | cptcod= 0; /* To be deleted */ |
| printf("varevsij vpopbased=%d \n",vpopbased); | printf("varevsij vpopbased=%d \n",vpopbased); |
| fprintf(ficlog, "varevsij vpopbased=%d \n",vpopbased); | fprintf(ficlog, "varevsij vpopbased=%d \n",vpopbased); |
| varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); /* cptcod not initialized Intel */ | varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart, nres); /* cptcod not initialized Intel */ |
| fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n# (weighted average of eij where weights are "); | fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n# (weighted average of eij where weights are "); |
| if(vpopbased==1) | if(vpopbased==1) |
| 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); | 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); |
| Line 10838 Please run with mle=-1 to get a correct | Line 11915 Please run with mle=-1 to get a correct |
| printf("Computing age specific period (stable) prevalences in each health state \n"); | printf("Computing age specific period (stable) prevalences in each health state \n"); |
| fprintf(ficlog,"Computing age specific period (stable) prevalences in each health state \n"); | fprintf(ficlog,"Computing age specific period (stable) prevalences in each health state \n"); |
| for(age=bage; age <=fage ;age++){ | for(age=bage; age <=fage ;age++){ |
| prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, &ncvyear, k); /*ZZ Is it the correct prevalim */ | prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, &ncvyear, k, nres); /*ZZ Is it the correct prevalim */ |
| if (vpopbased==1) { | if (vpopbased==1) { |
| if(mobilav ==0){ | if(mobilav ==0){ |
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) |
| Line 10875 Please run with mle=-1 to get a correct | Line 11952 Please run with mle=-1 to get a correct |
| free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); |
| free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage); |
| free_vector(epj,1,nlstate+1); | free_vector(epj,1,nlstate+1); |
| printf("done \n");fflush(stdout); | printf("done selection\n");fflush(stdout); |
| fprintf(ficlog,"done\n");fflush(ficlog); | fprintf(ficlog,"done selection\n");fflush(ficlog); |
| /*}*/ | /*}*/ |
| } /* End k */ | } /* End k selection */ |
| printf("done State-specific expectancies\n");fflush(stdout); | printf("done State-specific expectancies\n");fflush(stdout); |
| fprintf(ficlog,"done State-specific expectancies\n");fflush(ficlog); | fprintf(ficlog,"done State-specific expectancies\n");fflush(ficlog); |
| Line 10898 Please run with mle=-1 to get a correct | Line 11975 Please run with mle=-1 to get a correct |
| /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ |
| for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ | for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ |
| for (k=1; k <= (int) pow(2,cptcoveff); k++){ | 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; | |
| fprintf(ficresvpl,"\n#****** "); | fprintf(ficresvpl,"\n#****** "); |
| printf("\n#****** "); | printf("\n#****** "); |
| fprintf(ficlog,"\n#****** "); | fprintf(ficlog,"\n#****** "); |
| Line 10907 Please run with mle=-1 to get a correct | Line 11990 Please run with mle=-1 to get a correct |
| fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
| } | } |
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficresvpl," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| fprintf(ficresvpl,"******\n"); | fprintf(ficresvpl,"******\n"); |
| printf("******\n"); | printf("******\n"); |
| fprintf(ficlog,"******\n"); | fprintf(ficlog,"******\n"); |
| varpl=matrix(1,nlstate,(int) bage, (int) fage); | varpl=matrix(1,nlstate,(int) bage, (int) fage); |
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; |
| varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, strstart); | varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, strstart, nres); |
| free_matrix(varpl,1,nlstate,(int) bage, (int)fage); | free_matrix(varpl,1,nlstate,(int) bage, (int)fage); |
| /*}*/ | /*}*/ |
| } | } |
| Line 10962 Please run with mle=-1 to get a correct | Line 12050 Please run with mle=-1 to get a correct |
| free_ivector(ncodemaxwundef,1,NCOVMAX); | free_ivector(ncodemaxwundef,1,NCOVMAX); |
| free_ivector(Dummy,-1,NCOVMAX); | free_ivector(Dummy,-1,NCOVMAX); |
| free_ivector(Fixed,-1,NCOVMAX); | free_ivector(Fixed,-1,NCOVMAX); |
| free_ivector(DummyV,1,NCOVMAX); | |
| free_ivector(FixedV,1,NCOVMAX); | |
| free_ivector(Typevar,-1,NCOVMAX); | free_ivector(Typevar,-1,NCOVMAX); |
| free_ivector(Tvar,1,NCOVMAX); | free_ivector(Tvar,1,NCOVMAX); |
| free_ivector(TvarsQ,1,NCOVMAX); | free_ivector(TvarsQ,1,NCOVMAX); |