|
|
| version 1.144, 2014/02/10 22:17:31 | version 1.148, 2014/06/17 17:38:48 |
|---|---|
| Line 1 | Line 1 |
| /* $Id$ | /* $Id$ |
| $State$ | $State$ |
| $Log$ | $Log$ |
| Revision 1.144 2014/02/10 22:17:31 brouard | Revision 1.148 2014/06/17 17:38:48 brouard |
| Summary: Nothing new | |
| Author: Brouard | |
| Just a new packaging for OS/X version 0.98nS | |
| Revision 1.147 2014/06/16 10:33:11 brouard | |
| *** empty log message *** | *** empty log message *** |
| Revision 1.146 2014/06/16 10:20:28 brouard | |
| Summary: Merge | |
| Author: Brouard | |
| Merge, before building revised version. | |
| Revision 1.145 2014/06/10 21:23:15 brouard | |
| Summary: Debugging with valgrind | |
| Author: Nicolas Brouard | |
| Lot of changes in order to output the results with some covariates | |
| After the Edimburgh REVES conference 2014, it seems mandatory to | |
| improve the code. | |
| No more memory valgrind error but a lot has to be done in order to | |
| continue the work of splitting the code into subroutines. | |
| Also, decodemodel has been improved. Tricode is still not | |
| optimal. nbcode should be improved. Documentation has been added in | |
| the source code. | |
| Revision 1.143 2014/01/26 09:45:38 brouard | Revision 1.143 2014/01/26 09:45:38 brouard |
| Summary: Version 0.98nR (to be improved, but gives same optimization results as 0.98k. Nice, promising | Summary: Version 0.98nR (to be improved, but gives same optimization results as 0.98k. Nice, promising |
| Line 377 | Line 402 |
| begin-prev-date,... | begin-prev-date,... |
| open gnuplot file | open gnuplot file |
| open html file | open html file |
| period (stable) prevalence | period (stable) prevalence | pl_nom 1-1 2-2 etc by covariate |
| for age prevalim() | for age prevalim() | #****** V1=0 V2=1 V3=1 V4=0 ****** |
| h Pij x | | 65 1 0 2 1 3 1 4 0 0.96326 0.03674 |
| variance of p varprob | freexexit2 possible for memory heap. |
| h Pij x | pij_nom ficrestpij | |
| # Cov Agex agex+h hpijx with i,j= 1-1 1-2 1-3 2-1 2-2 2-3 | |
| 1 85 85 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 | |
| 1 85 86 0.68299 0.22291 0.09410 0.71093 0.00000 0.28907 | |
| 1 65 99 0.00364 0.00322 0.99314 0.00350 0.00310 0.99340 | |
| 1 65 100 0.00214 0.00204 0.99581 0.00206 0.00196 0.99597 | |
| variance of p one-step probabilities varprob | prob_nom ficresprob #One-step probabilities and stand. devi in () | |
| Standard deviation of one-step probabilities | probcor_nom ficresprobcor #One-step probabilities and correlation matrix | |
| Matrix of variance covariance of one-step probabilities | probcov_nom ficresprobcov #One-step probabilities and covariance matrix | |
| forecasting if prevfcast==1 prevforecast call prevalence() | forecasting if prevfcast==1 prevforecast call prevalence() |
| health expectancies | health expectancies |
| Variance-covariance of DFLE | Variance-covariance of DFLE |
| Line 439 extern int errno; | Line 476 extern int errno; |
| #define NLSTATEMAX 8 /**< Maximum number of live states (for func) */ | #define NLSTATEMAX 8 /**< Maximum number of live states (for func) */ |
| #define NDEATHMAX 8 /**< Maximum number of dead states (for func) */ | #define NDEATHMAX 8 /**< Maximum number of dead states (for func) */ |
| #define NCOVMAX 20 /**< Maximum number of covariates, including generated covariates V1*V2 */ | #define NCOVMAX 20 /**< Maximum number of covariates, including generated covariates V1*V2 */ |
| #define codtabm(h,k) 1 & (h-1) >> (k-1) ; | |
| #define MAXN 20000 | #define MAXN 20000 |
| #define YEARM 12. /**< Number of months per year */ | #define YEARM 12. /**< Number of months per year */ |
| #define AGESUP 130 | #define AGESUP 130 |
| Line 457 extern int errno; | Line 495 extern int errno; |
| /* $Id$ */ | /* $Id$ */ |
| /* $State$ */ | /* $State$ */ |
| char version[]="Imach version 0.98nR2, January 2014,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121)"; | char version[]="Imach version 0.98nS, January 2014,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121)"; |
| char fullversion[]="$Revision$ $Date$"; | char fullversion[]="$Revision$ $Date$"; |
| char strstart[80]; | char strstart[80]; |
| char optionfilext[10], optionfilefiname[FILENAMELENGTH]; | char optionfilext[10], optionfilefiname[FILENAMELENGTH]; |
| int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */ | int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */ |
| int nvar=0, nforce=0; /* Number of variables, number of forces */ | int nvar=0, nforce=0; /* Number of variables, number of forces */ |
| int cptcovn=0, cptcovage=0, cptcoveff=0,cptcov=0; /* Number of covariates, of covariates with '*age' */ | /* Number of covariates model=V2+V1+ V3*age+V2*V4 */ |
| int cptcovn=0; /**< cptcovn number of covariates added in the model (excepting constant and age and age*product) */ | |
| int cptcovt=0; /**< cptcovt number of covariates added in the model (excepting constant and age) */ | |
| int cptcovs=0; /**< cptcovs number of simple covariates V2+V1 =2 */ | |
| int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */ | |
| int cptcovprodnoage=0; /**< Number of covariate products without age */ | |
| int cptcoveff=0; /* Total number of covariates to vary for printing results */ | |
| int cptcov=0; /* Working variable */ | |
| int npar=NPARMAX; | int npar=NPARMAX; |
| int nlstate=2; /* Number of live states */ | int nlstate=2; /* Number of live states */ |
| int ndeath=1; /* Number of dead states */ | int ndeath=1; /* Number of dead states */ |
| Line 482 int **dh; /* dh[mi][i] is number of step | Line 527 int **dh; /* dh[mi][i] is number of step |
| int **bh; /* bh[mi][i] is the bias (+ or -) for this individual if the delay between | int **bh; /* bh[mi][i] is the bias (+ or -) for this individual if the delay between |
| * wave mi and wave mi+1 is not an exact multiple of stepm. */ | * wave mi and wave mi+1 is not an exact multiple of stepm. */ |
| double jmean=1; /* Mean space between 2 waves */ | double jmean=1; /* Mean space between 2 waves */ |
| double **matprod2(); /* test */ | |
| double **oldm, **newm, **savm; /* Working pointers to matrices */ | double **oldm, **newm, **savm; /* Working pointers to matrices */ |
| double **oldms, **newms, **savms; /* Fixed working pointers to matrices */ | double **oldms, **newms, **savms; /* Fixed working pointers to matrices */ |
| /*FILE *fic ; */ /* Used in readdata only */ | /*FILE *fic ; */ /* Used in readdata only */ |
| Line 582 double dateintmean=0; | Line 628 double dateintmean=0; |
| double *weight; | double *weight; |
| int **s; /* Status */ | int **s; /* Status */ |
| double *agedc; | double *agedc; |
| double **covar; /**< covar[i,j], value of jth covariate for individual i, | double **covar; /**< covar[j,i], value of jth covariate for individual i, |
| * covar=matrix(0,NCOVMAX,1,n); | * covar=matrix(0,NCOVMAX,1,n); |
| * cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; */ | * cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; */ |
| double idx; | double idx; |
| int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */ | int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */ |
| int *Ndum; /** Freq of modality (tricode */ | |
| int **codtab; /**< codtab=imatrix(1,100,1,10); */ | int **codtab; /**< codtab=imatrix(1,100,1,10); */ |
| int **Tvard, *Tprod, cptcovprod, *Tvaraff; | int **Tvard, *Tprod, cptcovprod, *Tvaraff; |
| double *lsurv, *lpop, *tpop; | double *lsurv, *lpop, *tpop; |
| Line 675 char *trimbb(char *out, char *in) | Line 722 char *trimbb(char *out, char *in) |
| return s; | return s; |
| } | } |
| char *cutl(char *blocc, char *alocc, char *in, char occ) | |
| { | |
| /* cuts string in into blocc and alocc where blocc ends before first occurence of char 'occ' | |
| and alocc starts after first occurence of char 'occ' : ex cutv(blocc,alocc,"abcdef2ghi2j",'2') | |
| gives blocc="abcdef2ghi" and alocc="j". | |
| If occ is not found blocc is null and alocc is equal to in. Returns blocc | |
| */ | |
| char *s, *t, *bl; | |
| t=in;s=in; | |
| while ((*in != occ) && (*in != '\0')){ | |
| *alocc++ = *in++; | |
| } | |
| if( *in == occ){ | |
| *(alocc)='\0'; | |
| s=++in; | |
| } | |
| if (s == t) {/* occ not found */ | |
| *(alocc-(in-s))='\0'; | |
| in=s; | |
| } | |
| while ( *in != '\0'){ | |
| *blocc++ = *in++; | |
| } | |
| *blocc='\0'; | |
| return t; | |
| } | |
| char *cutv(char *blocc, char *alocc, char *in, char occ) | char *cutv(char *blocc, char *alocc, char *in, char occ) |
| { | { |
| /* cuts string in into blocc and alocc where blocc ends before last occurence of char 'occ' | /* cuts string in into blocc and alocc where blocc ends before last occurence of char 'occ' |
| Line 845 double **matrix(long nrl, long nrh, long | Line 920 double **matrix(long nrl, long nrh, long |
| for (i=nrl+1; i<=nrh; i++) m[i]=m[i-1]+ncol; | for (i=nrl+1; i<=nrh; i++) m[i]=m[i-1]+ncol; |
| return m; | return m; |
| /* print *(*(m+1)+70) or print m[1][70]; print m+1 or print &(m[1]) | /* print *(*(m+1)+70) or print m[1][70]; print m+1 or print &(m[1]) or &(m[1][0]) |
| m[i] = address of ith row of the table. &(m[i]) is its value which is another adress | |
| that of m[i][0]. In order to get the value p m[i][0] but it is unitialized. | |
| */ | */ |
| } | } |
| Line 1280 double **prevalim(double **prlim, int nl | Line 1357 double **prevalim(double **prlim, int nl |
| int i, ii,j,k; | int i, ii,j,k; |
| double min, max, maxmin, maxmax,sumnew=0.; | double min, max, maxmin, maxmax,sumnew=0.; |
| double **matprod2(); | /* double **matprod2(); */ /* test */ |
| double **out, cov[NCOVMAX+1], **pmij(); | double **out, cov[NCOVMAX+1], **pmij(); |
| double **newm; | double **newm; |
| double agefin, delaymax=50 ; /* Max number of years to converge */ | double agefin, delaymax=50 ; /* Max number of years to converge */ |
| Line 1300 double **prevalim(double **prlim, int nl | Line 1377 double **prevalim(double **prlim, int nl |
| for (k=1; k<=cptcovn;k++) { | for (k=1; k<=cptcovn;k++) { |
| cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; | cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; |
| /* printf("ij=%d k=%d Tvar[k]=%d nbcode=%d cov=%lf codtab[ij][Tvar[k]]=%d \n",ij,k, Tvar[k],nbcode[Tvar[k]][codtab[ij][Tvar[k]]],cov[2+k], codtab[ij][Tvar[k]]);*/ | /*printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtab[%d][Tvar[%d]]=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtab[ij][Tvar[k]]],cov[2+k], ij, k, codtab[ij][Tvar[k]]);*/ |
| } | } |
| for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; | /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ |
| for (k=1; k<=cptcovprod;k++) | /* for (k=1; k<=cptcovprod;k++) /\* Useless *\/ */ |
| cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]] * nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; | /* cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]] * nbcode[Tvard[k][2]][codtab[ij][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]);*/ |
| /*printf("ij=%d cov[3]=%lf \n",ij, cov[3]);*/ | /*printf("ij=%d cov[3]=%lf \n",ij, cov[3]);*/ |
| /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ | |
| /* out=matprod2(newm, pmij(pmmij,cov,ncovmodel,x,nlstate),1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); /\* Bug Valgrind *\/ */ | |
| out=matprod2(newm, pmij(pmmij,cov,ncovmodel,x,nlstate),1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); /* Bug Valgrind */ | out=matprod2(newm, pmij(pmmij,cov,ncovmodel,x,nlstate),1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); /* Bug Valgrind */ |
| savm=oldm; | savm=oldm; |
| Line 1321 double **prevalim(double **prlim, int nl | Line 1400 double **prevalim(double **prlim, int nl |
| sumnew=0; | sumnew=0; |
| for(k=1; k<=ndeath; k++) sumnew+=newm[i][nlstate+k]; | for(k=1; k<=ndeath; k++) sumnew+=newm[i][nlstate+k]; |
| prlim[i][j]= newm[i][j]/(1-sumnew); | prlim[i][j]= newm[i][j]/(1-sumnew); |
| /*printf(" prevalim i=%d, j=%d, prmlim[%d][%d]=%f, agefin=%d \n", i, j, i, j, prlim[i][j],(int)agefin);*/ | |
| max=FMAX(max,prlim[i][j]); | max=FMAX(max,prlim[i][j]); |
| min=FMIN(min,prlim[i][j]); | min=FMIN(min,prlim[i][j]); |
| } | } |
| Line 1401 double **pmij(double **ps, double *cov, | Line 1481 double **pmij(double **ps, double *cov, |
| } | } |
| } | } |
| /* for(ii=1; ii<= nlstate+ndeath; ii++){ */ | /* for(ii=1; ii<= nlstate+ndeath; ii++){ */ |
| /* for(jj=1; jj<= nlstate+ndeath; jj++){ */ | /* for(jj=1; jj<= nlstate+ndeath; jj++){ */ |
| /* printf("ddd %lf ",ps[ii][jj]); */ | /* printf(" pmij ps[%d][%d]=%lf ",ii,jj,ps[ii][jj]); */ |
| /* } */ | /* } */ |
| /* printf("\n "); */ | /* printf("\n "); */ |
| /* } */ | /* } */ |
| /* printf("\n ");printf("%lf ",cov[2]); */ | /* printf("\n ");printf("%lf ",cov[2]);*/ |
| /* | /* |
| 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; |
| Line 1417 double **pmij(double **ps, double *cov, | Line 1497 double **pmij(double **ps, double *cov, |
| /**************** Product of 2 matrices ******************/ | /**************** Product of 2 matrices ******************/ |
| double **matprod2(double **out, double **in,long nrl, long nrh, long ncl, long nch, long ncolol, long ncoloh, double **b) | double **matprod2(double **out, double **in,int nrl, int nrh, int ncl, int nch, int ncolol, int ncoloh, double **b) |
| { | { |
| /* Computes the matrix product of in(1,nrh-nrl+1)(1,nch-ncl+1) times | /* Computes the matrix product of in(1,nrh-nrl+1)(1,nch-ncl+1) times |
| b(1,nch-ncl+1)(1,ncoloh-ncolol+1) into out(...) */ | b(1,nch-ncl+1)(1,ncoloh-ncolol+1) into out(...) */ |
| /* in, b, out are matrice of pointers which should have been initialized | /* in, b, out are matrice of pointers which should have been initialized |
| before: only the contents of out is modified. The function returns | before: only the contents of out is modified. The function returns |
| a pointer to pointers identical to out */ | a pointer to pointers identical to out */ |
| long i, j, k; | int i, j, k; |
| for(i=nrl; i<= nrh; i++) | for(i=nrl; i<= nrh; i++) |
| for(k=ncolol; k<=ncoloh; k++) | for(k=ncolol; k<=ncoloh; k++){ |
| for(j=ncl,out[i][k]=0.; j<=nch; j++) | out[i][k]=0.; |
| out[i][k] +=in[i][j]*b[j][k]; | for(j=ncl; j<=nch; j++) |
| out[i][k] +=in[i][j]*b[j][k]; | |
| } | |
| return out; | return out; |
| } | } |
| Line 1471 double ***hpxij(double ***po, int nhstep | Line 1552 double ***hpxij(double ***po, int nhstep |
| cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; | cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; |
| for (k=1; k<=cptcovage;k++) | for (k=1; k<=cptcovage;k++) |
| cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; | cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; |
| for (k=1; k<=cptcovprod;k++) | for (k=1; k<=cptcovprod;k++) /* Useless because included in cptcovn */ |
| cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; | cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; |
| Line 1522 double func( double *x) | Line 1603 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. |
| */ | */ |
| for (k=1; k<=cptcovn;k++) cov[2+k]=covar[Tvar[k]][i]; | for (k=1; k<=cptcovn;k++){ /* Simple and product covariates without age* products */ |
| cov[2+k]=covar[Tvar[k]][i]; | |
| } | |
| /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] | /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] |
| is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2] | is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2] |
| has been calculated etc */ | has been calculated etc */ |
| Line 1790 double funcone( double *x) | Line 1873 double funcone( double *x) |
| for (kk=1; kk<=cptcovage;kk++) { | for (kk=1; kk<=cptcovage;kk++) { |
| cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; | cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; |
| } | } |
| /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ | |
| 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)); |
| /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, */ | |
| /* 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); */ | |
| savm=oldm; | savm=oldm; |
| oldm=newm; | oldm=newm; |
| } /* end mult */ | } /* end mult */ |
| Line 2037 double hessii(double x[], double delta, | Line 2123 double hessii(double x[], double delta, |
| fx=func(x); | fx=func(x); |
| for (i=1;i<=npar;i++) p2[i]=x[i]; | for (i=1;i<=npar;i++) p2[i]=x[i]; |
| for(l=0 ; l <=lmax; l++){ | for(l=0 ; l <=lmax; l++){ /* Enlarging the zone around the Maximum */ |
| l1=pow(10,l); | l1=pow(10,l); |
| delts=delt; | delts=delt; |
| for(k=1 ; k <kmax; k=k+1){ | for(k=1 ; k <kmax; k=k+1){ |
| delt = delta*(l1*k); | delt = delta*(l1*k); |
| p2[theta]=x[theta] +delt; | p2[theta]=x[theta] +delt; |
| k1=func(p2)-fx; | k1=func(p2)-fx; /* Might be negative if too close to the theoretical maximum */ |
| p2[theta]=x[theta]-delt; | p2[theta]=x[theta]-delt; |
| k2=func(p2)-fx; | k2=func(p2)-fx; |
| /*res= (k1-2.0*fx+k2)/delt/delt; */ | /*res= (k1-2.0*fx+k2)/delt/delt; */ |
| Line 2212 void freqsummary(char fileres[], int ia | Line 2298 void freqsummary(char fileres[], int ia |
| first=1; | first=1; |
| for(k1=1; k1<=j ; k1++){ /* Loop on covariates */ | /* for(k1=1; k1<=j ; k1++){ /* Loop on covariates */ |
| for(i1=1; i1<=ncodemax[k1];i1++){ /* Now it is 2 */ | /* for(i1=1; i1<=ncodemax[k1];i1++){ /* Now it is 2 */ |
| j1++; | /* j1++; |
| */ | |
| for (j1 = 1; j1 <= (int) pow(2,cptcoveff); j1++){ | |
| /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]); | /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]); |
| scanf("%d", i);*/ | scanf("%d", i);*/ |
| for (i=-5; i<=nlstate+ndeath; i++) | for (i=-5; i<=nlstate+ndeath; i++) |
| Line 2233 void freqsummary(char fileres[], int ia | Line 2321 void freqsummary(char fileres[], int ia |
| if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ | if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ |
| for (z1=1; z1<=cptcoveff; z1++) | for (z1=1; z1<=cptcoveff; z1++) |
| if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtab[j1][z1]]){ | if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtab[j1][z1]]){ |
| /* Tests if the value of each of the covariates of i is equal to filter j1 */ | |
| bool=0; | bool=0; |
| printf("bool=%d i=%d, z1=%d, i1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtab[%d][%d]=%d, nbcode[Tvaraff][codtab[%d][%d]=%d, j1=%d\n", | /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtab[%d][%d]=%d, nbcode[Tvaraff][codtab[%d][%d]=%d, j1=%d\n", |
| bool,i,z1, i1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtab[j1][z1], | bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtab[j1][z1], |
| j1,z1,nbcode[Tvaraff[z1]][codtab[j1][z1]],j1); | j1,z1,nbcode[Tvaraff[z1]][codtab[j1][z1]],j1);*/ |
| /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtab[7][3]=1 and nbcde[3][?]=1*/ | /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtab[7][3]=1 and nbcde[3][?]=1*/ |
| } | } |
| } | } |
| Line 2260 void freqsummary(char fileres[], int ia | Line 2349 void freqsummary(char fileres[], int ia |
| /*}*/ | /*}*/ |
| } | } |
| } | } |
| } | } /* end i */ |
| /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ | /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ |
| pstamp(ficresp); | pstamp(ficresp); |
| Line 2347 void freqsummary(char fileres[], int ia | Line 2436 void freqsummary(char fileres[], int ia |
| printf("Others in log...\n"); | printf("Others in log...\n"); |
| fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); |
| } | } |
| } | /*}*/ |
| } | } |
| dateintmean=dateintsum/k2cpt; | dateintmean=dateintsum/k2cpt; |
| Line 2372 void prevalence(double ***probs, double | Line 2461 void prevalence(double ***probs, double |
| double pos,posprop; | double pos,posprop; |
| double y2; /* in fractional years */ | double y2; /* in fractional years */ |
| int iagemin, iagemax; | int iagemin, iagemax; |
| int first; /** to stop verbosity which is redirected to log file */ | |
| iagemin= (int) agemin; | iagemin= (int) agemin; |
| iagemax= (int) agemax; | iagemax= (int) agemax; |
| Line 2380 void prevalence(double ***probs, double | Line 2470 void prevalence(double ***probs, double |
| /* 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; |
| j=cptcoveff; | /*j=cptcoveff;*/ |
| if (cptcovn<1) {j=1;ncodemax[1]=1;} | if (cptcovn<1) {j=1;ncodemax[1]=1;} |
| for(k1=1; k1<=j;k1++){ | first=1; |
| for(i1=1; i1<=ncodemax[k1];i1++){ | for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){ |
| j1++; | /*for(i1=1; i1<=ncodemax[k1];i1++){ |
| j1++;*/ | |
| for (i=1; i<=nlstate; i++) | for (i=1; i<=nlstate; i++) |
| for(m=iagemin; m <= iagemax+3; m++) | for(m=iagemin; m <= iagemax+3; m++) |
| Line 2415 void prevalence(double ***probs, double | Line 2506 void prevalence(double ***probs, double |
| } | } |
| } | } |
| for(i=iagemin; i <= iagemax+3; i++){ | for(i=iagemin; i <= iagemax+3; i++){ |
| for(jk=1,posprop=0; jk <=nlstate ; jk++) { | for(jk=1,posprop=0; jk <=nlstate ; jk++) { |
| posprop += prop[jk][i]; | posprop += prop[jk][i]; |
| } | } |
| for(jk=1; jk <=nlstate ; jk++){ | for(jk=1; jk <=nlstate ; jk++){ |
| if( i <= iagemax){ | if( i <= iagemax){ |
| if(posprop>=1.e-5){ | if(posprop>=1.e-5){ |
| probs[i][jk][j1]= prop[jk][i]/posprop; | probs[i][jk][j1]= prop[jk][i]/posprop; |
| } else | } else{ |
| printf("Warning Observed prevalence probs[%d][%d][%d]=%lf because of lack of cases\n",jk,i,j1,probs[i][jk][j1]); | if(first==1){ |
| first=0; | |
| printf("Warning Observed prevalence probs[%d][%d][%d]=%lf because of lack of cases\nSee others on log file...\n",jk,i,j1,probs[i][jk][j1]); | |
| } | |
| } | |
| } | } |
| }/* end jk */ | }/* end jk */ |
| }/* end i */ | }/* end i */ |
| } /* end i1 */ | /*} *//* end i1 */ |
| } /* end k1 */ | } /* end j1 */ |
| /* 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);*/ |
| Line 2580 void concatwav(int wav[], int **dh, int | Line 2674 void concatwav(int wav[], int **dh, int |
| } | } |
| /*********** Tricode ****************************/ | /*********** Tricode ****************************/ |
| void tricode(int *Tvar, int **nbcode, int imx) | void tricode(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] |
| /* nbcode[Tvar[j][1]= | * Tvar[5] in V2+V1+V3*age+V2*V4 is 2 (V2) |
| /* nbcode[Tvar[j]][1]= | |
| */ | */ |
| int Ndum[20],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 modmincovj=0; /* Modality min of covariates j */ | |
| cptcoveff=0; | cptcoveff=0; |
| for (k=0; k < maxncov; k++) Ndum[k]=0; | for (k=-1; k < maxncov; k++) Ndum[k]=0; |
| for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ | for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ |
| for (j=1; j<=(cptcovn+2*cptcovprod); j++) { /* For each covariate j */ | /* Loop on covariates without age and products */ |
| for (i=1; i<=imx; i++) { /*reads the data file to get the maximum value of the | for (j=1; j<=(cptcovs); j++) { /* model V1 + V2*age+ V3 + V3*V4 : V1 + V3 = 2 only */ |
| for (i=1; i<=imx; i++) { /* Lopp on individuals: reads the data file to get the maximum value of the | |
| modality of this covariate Vj*/ | modality of this covariate Vj*/ |
| ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Finds for covariate j, n=Tvar[j] of Vn . ij is the | ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i |
| * If product of Vn*Vm, still boolean *: | |
| * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables | |
| * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0 */ | |
| /* Finds for covariate j, n=Tvar[j] of Vn . ij is the | |
| modality of the nth covariate of individual i. */ | modality of the nth covariate of individual i. */ |
| if (ij > modmaxcovj) | |
| modmaxcovj=ij; | |
| else if (ij < modmincovj) | |
| modmincovj=ij; | |
| if ((ij < -1) && (ij > NCOVMAX)){ | |
| printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); | |
| exit(1); | |
| }else | |
| Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ | Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ |
| /* If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */ | |
| /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ | /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ |
| if (ij > modmaxcovj) modmaxcovj=ij; | |
| /* 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 is 1, then modmaxcovj=1.*/ | female is 1, then modmaxcovj=1.*/ |
| } | } |
| printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); | |
| cptcode=modmaxcovj; | |
| /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ | /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ |
| for (i=0; i<=modmaxcovj; i++) { /* i=-1 ? 0 and 1*//* For each modality of model-cov j */ | /*for (i=0; i<=cptcode; i++) {*/ |
| if( Ndum[i] != 0 ) | for (i=modmincovj; i<=modmaxcovj; i++) { /* i=-1 ? 0 and 1*//* For each value of the modality of model-cov j */ |
| ncodemax[j]++; | printf("Frequencies of covariates %d V%d %d\n", j, Tvar[j], Ndum[i]); |
| /* Number of modalities of the j th covariate. In fact | if( Ndum[i] != 0 ){ /* Counts if nobody answered, empty modality */ |
| ncodemax[j]=2 (dichotom. variables only) but it could be more for | ncodemax[j]++; /* ncodemax[j]= Number of non-null modalities of the j th covariate. */ |
| historical reasons */ | } |
| /* In fact ncodemax[j]=2 (dichotom. variables only) but it could be more for | |
| historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ | |
| } /* 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 */ |
| ij=1; | /* For covariate j, modalities could be 1, 2, 3, 4. If Ndum[2]=0 ncodemax[j] is not 4 but 3 */ |
| for (i=1; i<=ncodemax[j]; i++) { /* i= 1 to 2 for dichotomous */ | /* If Ndum[3}= 635; Ndum[4]=0; Ndum[5]=0; Ndum[6]=27; Ndum[7]=125; |
| for (k=0; k<= modmaxcovj; k++) { /* k=-1 ? NCOVMAX*//* maxncov or modmaxcovj */ | modmincovj=3; modmaxcovj = 7; |
| There are only 3 modalities non empty (or 2 if 27 is too few) : ncodemax[j]=3; | |
| which will be coded 0, 1, 2 which in binary on 3-1 digits are 0=00 1=01, 2=10; defining two dummy | |
| variables V1_1 and V1_2. | |
| nbcode[Tvar[j]][ij]=k; | |
| nbcode[Tvar[j]][1]=0; | |
| nbcode[Tvar[j]][2]=1; | |
| nbcode[Tvar[j]][3]=2; | |
| */ | |
| ij=1; /* ij is similar to i but can jumps over null modalities */ | |
| for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 */ | |
| for (k=0; k<= cptcode; k++) { /* k=-1 ? k=0 to 1 *//* Could be 1 to 4 */ | |
| /*recode from 0 */ | |
| if (Ndum[k] != 0) { /* If at least one individual responded to this modality k */ | if (Ndum[k] != 0) { /* If at least one individual responded to this modality k */ |
| nbcode[Tvar[j]][ij]=k; /* stores the modality in an array nbcode. | nbcode[Tvar[j]][ij]=k; /* stores the modality in an array nbcode. |
| k is a modality. If we have model=V1+V1*sex | k is a modality. If we have model=V1+V1*sex |
| Line 2631 void tricode(int *Tvar, int **nbcode, in | Line 2759 void tricode(int *Tvar, int **nbcode, in |
| } /* end of loop on modality */ | } /* end of loop on modality */ |
| } /* 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=0; k< maxncov; k++) Ndum[k]=0; | for (k=-1; k< maxncov; k++) Ndum[k]=0; |
| for (i=1; i<=ncovmodel-2; i++) { /* -2, cste and age */ | for (i=1; i<=ncovmodel-2; i++) { /* -2, cste and 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 might be -1 if status was unknown */ | ij=Tvar[i]; /* Tvar might be -1 if status was unknown */ |
| Ndum[ij]++; | Ndum[ij]++; |
| } | } |
| ij=1; | ij=1; |
| for (i=1; i<= maxncov; 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) */ |
| /*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/ | |
| if((Ndum[i]!=0) && (i<=ncovcol)){ | if((Ndum[i]!=0) && (i<=ncovcol)){ |
| Tvaraff[ij]=i; /*For printing */ | /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ |
| Tvaraff[ij]=i; /*For printing (unclear) */ | |
| ij++; | ij++; |
| } | }else |
| Tvaraff[ij]=0; | |
| } | } |
| ij--; | ij--; |
| cptcoveff=ij; /*Number of total covariates*/ | cptcoveff=ij; /*Number of total covariates*/ |
| } | } |
| /*********** 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[] ) |
| Line 3245 void varevsij(char optionfilefiname[], d | Line 3378 void varevsij(char optionfilefiname[], d |
| free_vector(gmp,nlstate+1,nlstate+ndeath); | free_vector(gmp,nlstate+1,nlstate+ndeath); |
| free_matrix(gradgp,1,npar,nlstate+1,nlstate+ndeath); | free_matrix(gradgp,1,npar,nlstate+1,nlstate+ndeath); |
| free_matrix(trgradgp,nlstate+1,nlstate+ndeath,1,npar); /* mu or p point j*/ | free_matrix(trgradgp,nlstate+1,nlstate+ndeath,1,npar); /* mu or p point j*/ |
| fprintf(ficgp,"\nunset parametric;unset label; set ter png small;set size 0.65, 0.65"); | fprintf(ficgp,"\nunset parametric;unset label; set ter png small size 320, 240"); |
| /* for(j=nlstate+1; j<= nlstate+ndeath; j++){ *//* Only the first actually */ | /* for(j=nlstate+1; j<= nlstate+ndeath; j++){ *//* Only the first actually */ |
| fprintf(ficgp,"\n set log y; unset log x;set xlabel \"Age\"; set ylabel \"Force of mortality (year-1)\";"); | fprintf(ficgp,"\n set log y; unset log x;set xlabel \"Age\"; set ylabel \"Force of mortality (year-1)\";"); |
| /* fprintf(ficgp,"\n plot \"%s\" u 1:($3*%6.3f) not w l 1 ",fileresprobmorprev,YEARM/estepm); */ | /* fprintf(ficgp,"\n plot \"%s\" u 1:($3*%6.3f) not w l 1 ",fileresprobmorprev,YEARM/estepm); */ |
| /* fprintf(ficgp,"\n replot \"%s\" u 1:(($3+1.96*$4)*%6.3f) t \"95\%% interval\" w l 2 ",fileresprobmorprev,YEARM/estepm); */ | /* fprintf(ficgp,"\n replot \"%s\" u 1:(($3+1.96*$4)*%6.3f) t \"95\%% interval\" w l 2 ",fileresprobmorprev,YEARM/estepm); */ |
| /* fprintf(ficgp,"\n replot \"%s\" u 1:(($3-1.96*$4)*%6.3f) not w l 2 ",fileresprobmorprev,YEARM/estepm); */ | /* fprintf(ficgp,"\n replot \"%s\" u 1:(($3-1.96*$4)*%6.3f) not w l 2 ",fileresprobmorprev,YEARM/estepm); */ |
| fprintf(ficgp,"\n plot \"%s\" u 1:($3) not w l lt 2 ",subdirf(fileresprobmorprev)); | fprintf(ficgp,"\n plot \"%s\" u 1:($3) not w l lt 1 ",subdirf(fileresprobmorprev)); |
| fprintf(ficgp,"\n replot \"%s\" u 1:(($3+1.96*$4)) t \"95\%% interval\" w l lt 3 ",subdirf(fileresprobmorprev)); | fprintf(ficgp,"\n replot \"%s\" u 1:(($3+1.96*$4)) t \"95\%% interval\" w l lt 2 ",subdirf(fileresprobmorprev)); |
| fprintf(ficgp,"\n replot \"%s\" u 1:(($3-1.96*$4)) not w l lt 3 ",subdirf(fileresprobmorprev)); | fprintf(ficgp,"\n replot \"%s\" u 1:(($3-1.96*$4)) not w l lt 2 ",subdirf(fileresprobmorprev)); |
| fprintf(fichtm,"\n<br> File (multiple files are possible if covariates are present): <A href=\"%s\">%s</a>\n",subdirf(fileresprobmorprev),subdirf(fileresprobmorprev)); | fprintf(fichtm,"\n<br> File (multiple files are possible if covariates are present): <A href=\"%s\">%s</a>\n",subdirf(fileresprobmorprev),subdirf(fileresprobmorprev)); |
| fprintf(fichtm,"\n<br> Probability is computed over estepm=%d months. <br> <img src=\"%s%s.png\"> <br>\n", estepm,subdirf3(optionfilefiname,"varmuptjgr",digitp),digit); | fprintf(fichtm,"\n<br> Probability is computed over estepm=%d months. <br> <img src=\"%s%s.png\"> <br>\n", estepm,subdirf3(optionfilefiname,"varmuptjgr",digitp),digit); |
| /* fprintf(fichtm,"\n<br> Probability is computed over estepm=%d months and then divided by estepm and multiplied by %.0f in order to have the probability to die over a year <br> <img src=\"varmuptjgr%s%s.png\"> <br>\n", stepm,YEARM,digitp,digit); | /* fprintf(fichtm,"\n<br> Probability is computed over estepm=%d months and then divided by estepm and multiplied by %.0f in order to have the probability to die over a year <br> <img src=\"varmuptjgr%s%s.png\"> <br>\n", stepm,YEARM,digitp,digit); |
| Line 3363 void varprob(char optionfilefiname[], do | Line 3496 void varprob(char optionfilefiname[], do |
| int i, j=0, i1, k1, l1, t, tj; | int i, j=0, i1, k1, l1, t, tj; |
| int k2, l2, j1, z1; | int k2, l2, j1, z1; |
| int k=0,l, cptcode; | int k=0,l, cptcode; |
| int first=1, first1; | int first=1, first1, first2; |
| double cv12, mu1, mu2, lc1, lc2, v12, v21, v11, v22,v1,v2, c12, tnalp; | double cv12, mu1, mu2, lc1, lc2, v12, v21, v11, v22,v1,v2, c12, tnalp; |
| double **dnewm,**doldm; | double **dnewm,**doldm; |
| double *xp; | double *xp; |
| double *gp, *gm; | double *gp, *gm; |
| double **gradg, **trgradg; | double **gradg, **trgradg; |
| double **mu; | double **mu; |
| double age,agelim, cov[NCOVMAX]; | double age,agelim, cov[NCOVMAX+1]; |
| double std=2.0; /* Number of standard deviation wide of confidence ellipsoids */ | double std=2.0; /* Number of standard deviation wide of confidence ellipsoids */ |
| int theta; | int theta; |
| char fileresprob[FILENAMELENGTH]; | char fileresprob[FILENAMELENGTH]; |
| char fileresprobcov[FILENAMELENGTH]; | char fileresprobcov[FILENAMELENGTH]; |
| char fileresprobcor[FILENAMELENGTH]; | char fileresprobcor[FILENAMELENGTH]; |
| double ***varpij; | double ***varpij; |
| strcpy(fileresprob,"prob"); | strcpy(fileresprob,"prob"); |
| Line 3449 standard deviations wide on each axis. < | Line 3581 standard deviations wide on each axis. < |
| To be simple, these graphs help to understand the significativity of each parameter in relation to a second other one.<br> \n"); | To be simple, these graphs help to understand the significativity of each parameter in relation to a second other one.<br> \n"); |
| cov[1]=1; | cov[1]=1; |
| tj=cptcoveff; | /* tj=cptcoveff; */ |
| tj = (int) pow(2,cptcoveff); | |
| if (cptcovn<1) {tj=1;ncodemax[1]=1;} | if (cptcovn<1) {tj=1;ncodemax[1]=1;} |
| j1=0; | j1=0; |
| for(t=1; t<=tj;t++){ | for(j1=1; j1<=tj;j1++){ |
| for(i1=1; i1<=ncodemax[t];i1++){ | /*for(i1=1; i1<=ncodemax[t];i1++){ */ |
| j1++; | /*j1++;*/ |
| if (cptcovn>0) { | if (cptcovn>0) { |
| fprintf(ficresprob, "\n#********** Variable "); | fprintf(ficresprob, "\n#********** Variable "); |
| for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); | for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); |
| Line 3477 To be simple, these graphs help to under | Line 3610 To be simple, these graphs help to under |
| fprintf(ficresprobcor, "**********\n#"); | fprintf(ficresprobcor, "**********\n#"); |
| } | } |
| gradg=matrix(1,npar,1,(nlstate)*(nlstate+ndeath)); | |
| trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar); | |
| gp=vector(1,(nlstate)*(nlstate+ndeath)); | |
| gm=vector(1,(nlstate)*(nlstate+ndeath)); | |
| for (age=bage; age<=fage; age ++){ | for (age=bage; age<=fage; age ++){ |
| cov[2]=age; | cov[2]=age; |
| for (k=1; k<=cptcovn;k++) { | for (k=1; k<=cptcovn;k++) { |
| cov[2+k]=nbcode[Tvar[k]][codtab[j1][Tvar[k]]]; | cov[2+k]=nbcode[Tvar[k]][codtab[j1][Tvar[k]]];/* j1 1 2 3 4 |
| * 1 1 1 1 1 | |
| * 2 2 1 1 1 | |
| * 3 1 2 1 1 | |
| */ | |
| /* nbcode[1][1]=0 nbcode[1][2]=1;*/ | |
| } | } |
| for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; | for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; |
| for (k=1; k<=cptcovprod;k++) | for (k=1; k<=cptcovprod;k++) |
| cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; | cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; |
| gradg=matrix(1,npar,1,(nlstate)*(nlstate+ndeath)); | |
| trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar); | |
| gp=vector(1,(nlstate)*(nlstate+ndeath)); | |
| gm=vector(1,(nlstate)*(nlstate+ndeath)); | |
| for(theta=1; theta <=npar; theta++){ | for(theta=1; theta <=npar; theta++){ |
| for(i=1; i<=npar; i++) | for(i=1; i<=npar; i++) |
| Line 3527 To be simple, these graphs help to under | Line 3665 To be simple, these graphs help to under |
| matprod2(dnewm,trgradg,1,(nlstate)*(nlstate+ndeath),1,npar,1,npar,matcov); | matprod2(dnewm,trgradg,1,(nlstate)*(nlstate+ndeath),1,npar,1,npar,matcov); |
| matprod2(doldm,dnewm,1,(nlstate)*(nlstate+ndeath),1,npar,1,(nlstate)*(nlstate+ndeath),gradg); | matprod2(doldm,dnewm,1,(nlstate)*(nlstate+ndeath),1,npar,1,(nlstate)*(nlstate+ndeath),gradg); |
| free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath)); | |
| free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath)); | |
| free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); | |
| free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); | |
| pmij(pmmij,cov,ncovmodel,x,nlstate); | pmij(pmmij,cov,ncovmodel,x,nlstate); |
| Line 3564 To be simple, these graphs help to under | Line 3698 To be simple, these graphs help to under |
| i=0; | i=0; |
| for (k=1; k<=(nlstate);k++){ | for (k=1; k<=(nlstate);k++){ |
| for (l=1; l<=(nlstate+ndeath);l++){ | for (l=1; l<=(nlstate+ndeath);l++){ |
| i=i++; | i++; |
| fprintf(ficresprobcov,"\n%d %d-%d",(int)age,k,l); | fprintf(ficresprobcov,"\n%d %d-%d",(int)age,k,l); |
| fprintf(ficresprobcor,"\n%d %d-%d",(int)age,k,l); | fprintf(ficresprobcor,"\n%d %d-%d",(int)age,k,l); |
| for (j=1; j<=i;j++){ | for (j=1; j<=i;j++){ |
| /* printf(" k=%d l=%d i=%d j=%d\n",k,l,i,j);fflush(stdout); */ | |
| fprintf(ficresprobcov," %11.3e",varpij[i][j][(int)age]); | fprintf(ficresprobcov," %11.3e",varpij[i][j][(int)age]); |
| fprintf(ficresprobcor," %11.3e",varpij[i][j][(int) age]/sqrt(varpij[i][i][(int) age])/sqrt(varpij[j][j][(int)age])); | fprintf(ficresprobcor," %11.3e",varpij[i][j][(int) age]/sqrt(varpij[i][i][(int) age])/sqrt(varpij[j][j][(int)age])); |
| } | } |
| } | } |
| }/* end of loop for state */ | }/* end of loop for state */ |
| } /* end of loop for age */ | } /* end of loop for age */ |
| free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath)); | |
| free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath)); | |
| free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); | |
| free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); | |
| /* Confidence intervalle of pij */ | /* Confidence intervalle of pij */ |
| /* | /* |
| fprintf(ficgp,"\nunset parametric;unset label"); | fprintf(ficgp,"\nunset parametric;unset label"); |
| Line 3587 To be simple, these graphs help to under | Line 3726 To be simple, these graphs help to under |
| */ | */ |
| /* Drawing ellipsoids of confidence of two variables p(k1-l1,k2-l2)*/ | /* Drawing ellipsoids of confidence of two variables p(k1-l1,k2-l2)*/ |
| first1=1; | first1=1;first2=2; |
| for (k2=1; k2<=(nlstate);k2++){ | for (k2=1; k2<=(nlstate);k2++){ |
| for (l2=1; l2<=(nlstate+ndeath);l2++){ | for (l2=1; l2<=(nlstate+ndeath);l2++){ |
| if(l2==k2) continue; | if(l2==k2) continue; |
| Line 3609 To be simple, these graphs help to under | Line 3748 To be simple, these graphs help to under |
| lc1=((v1+v2)+sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; | lc1=((v1+v2)+sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; |
| lc2=((v1+v2)-sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; | lc2=((v1+v2)-sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; |
| if ((lc2 <0) || (lc1 <0) ){ | if ((lc2 <0) || (lc1 <0) ){ |
| printf("Error: One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Continuing by making them positive: WRONG RESULTS.\n", lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor); | if(first2==1){ |
| fprintf(ficlog,"Error: One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e\n", lc1, lc2, v1, v2, cv12);fflush(ficlog); | first1=0; |
| lc1=fabs(lc1); | printf("Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS. See log file for details...\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor); |
| lc2=fabs(lc2); | } |
| fprintf(ficlog,"Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS.\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);fflush(ficlog); | |
| /* lc1=fabs(lc1); */ /* If we want to have them positive */ | |
| /* lc2=fabs(lc2); */ | |
| } | } |
| /* Eigen vectors */ | /* Eigen vectors */ |
| Line 3634 To be simple, these graphs help to under | Line 3776 To be simple, these graphs help to under |
| first=0; | first=0; |
| 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 png small\nset size 0.65,0.65"); | fprintf(ficgp,"\nset ter png small size 320, 240"); |
| fprintf(fichtmcov,"\n<br>Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year<sup>-1</sup>\ | fprintf(fichtmcov,"\n<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.png\">\ | :<a href=\"%s%d%1d%1d-%1d%1d.png\">\ |
| %s%d%1d%1d-%1d%1d.png</A>, ",k1,l1,k2,l2,\ | %s%d%1d%1d-%1d%1d.png</A>, ",k1,l1,k2,l2,\ |
| Line 3665 To be simple, these graphs help to under | Line 3807 To be simple, these graphs help to under |
| } /* k12 */ | } /* k12 */ |
| } /*l1 */ | } /*l1 */ |
| }/* k1 */ | }/* k1 */ |
| } /* loop covariates */ | /* } /* loop covariates */ |
| } | } |
| free_ma3x(varpij,1,nlstate,1,nlstate+ndeath,(int) bage, (int)fage); | free_ma3x(varpij,1,nlstate,1,nlstate+ndeath,(int) bage, (int)fage); |
| free_matrix(mu,1,(nlstate+ndeath)*(nlstate+ndeath),(int) bage, (int)fage); | free_matrix(mu,1,(nlstate+ndeath)*(nlstate+ndeath),(int) bage, (int)fage); |
| Line 3711 void printinghtml(char fileres[], char t | Line 3853 void printinghtml(char fileres[], char t |
| fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>"); | fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>"); |
| m=cptcoveff; | m=pow(2,cptcoveff); |
| if (cptcovn < 1) {m=1;ncodemax[1]=1;} | if (cptcovn < 1) {m=1;ncodemax[1]=1;} |
| jj1=0; | jj1=0; |
| Line 3725 fprintf(fichtm," \n<ul><li><b>Graphs</b> | Line 3867 fprintf(fichtm," \n<ul><li><b>Graphs</b> |
| fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); | fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); |
| } | } |
| /* Pij */ | /* Pij */ |
| fprintf(fichtm,"<br>- Pij or Conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s%d1.png\">%s%d1.png</a><br> \ | fprintf(fichtm,"<br>- Pij or Conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s%d_1.png\">%s%d_1.png</a><br> \ |
| <img src=\"%s%d1.png\">",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); | <img src=\"%s%d_1.png\">",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); |
| /* Quasi-incidences */ | /* Quasi-incidences */ |
| fprintf(fichtm,"<br>- Pij or Conditional probabilities to be observed in state j being in state i %d (stepm) months\ | fprintf(fichtm,"<br>- Pij or Conditional probabilities to be observed in state j being in state i %d (stepm) months\ |
| before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too: <a href=\"%s%d2.png\">%s%d2.png</a><br> \ | before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too: <a href=\"%s%d_2.png\">%s%d_2.png</a><br> \ |
| <img src=\"%s%d2.png\">",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); | <img src=\"%s%d_2.png\">",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); |
| /* 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>- Period (stable) prevalence in each health state : <a href=\"%s%d%d.png\">%s%d%d.png</a><br> \ | fprintf(fichtm,"<br>- Period (stable) prevalence in each health state : <a href=\"%s%d_%d.png\">%s%d_%d.png</a><br> \ |
| <img src=\"%s%d%d.png\">",subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1); | <img src=\"%s%d_%d.png\">",subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1); |
| } | } |
| 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 : <a href=\"%s%d%d.png\">%s%d%d.png</a> <br> \ | fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies : <a href=\"%s%d%d.png\">%s%d%d.png</a> <br> \ |
| Line 3785 fprintf(fichtm," \n<ul><li><b>Graphs</b> | Line 3927 fprintf(fichtm," \n<ul><li><b>Graphs</b> |
| fflush(fichtm); | fflush(fichtm); |
| fprintf(fichtm," <ul><li><b>Graphs</b></li><p>"); | fprintf(fichtm," <ul><li><b>Graphs</b></li><p>"); |
| m=cptcoveff; | m=pow(2,cptcoveff); |
| if (cptcovn < 1) {m=1;ncodemax[1]=1;} | if (cptcovn < 1) {m=1;ncodemax[1]=1;} |
| jj1=0; | jj1=0; |
| Line 3800 fprintf(fichtm," \n<ul><li><b>Graphs</b> | Line 3942 fprintf(fichtm," \n<ul><li><b>Graphs</b> |
| } | } |
| for(cpt=1; cpt<=nlstate;cpt++) { | for(cpt=1; cpt<=nlstate;cpt++) { |
| fprintf(fichtm,"<br>- Observed (cross-sectional) and period (incidence based) \ | fprintf(fichtm,"<br>- Observed (cross-sectional) and period (incidence based) \ |
| prevalence (with 95%% confidence interval) in state (%d): %s%d%d.png <br>\ | prevalence (with 95%% confidence interval) in state (%d): %s%d_%d.png <br>\ |
| <img src=\"%s%d%d.png\">",cpt,subdirf2(optionfilefiname,"v"),cpt,jj1,subdirf2(optionfilefiname,"v"),cpt,jj1); | <img src=\"%s%d_%d.png\">",cpt,subdirf2(optionfilefiname,"v"),cpt,jj1,subdirf2(optionfilefiname,"v"),cpt,jj1); |
| } | } |
| 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) \ |
| Line 3835 void printinggnuplot(char fileres[], cha | Line 3977 void printinggnuplot(char fileres[], cha |
| strcpy(optfileres,"vpl"); | strcpy(optfileres,"vpl"); |
| /* 1eme*/ | /* 1eme*/ |
| for (cpt=1; cpt<= nlstate ; cpt ++) { | for (cpt=1; cpt<= nlstate ; cpt ++) { |
| for (k1=1; k1<= m ; k1 ++) { | for (k1=1; k1<= m ; k1 ++) { /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */ |
| fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"v"),cpt,k1); | fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"v"),cpt,k1); |
| fprintf(ficgp,"\n#set out \"v%s%d%d.png\" \n",optionfilefiname,cpt,k1); | fprintf(ficgp,"\n#set out \"v%s%d_%d.png\" \n",optionfilefiname,cpt,k1); |
| fprintf(ficgp,"set xlabel \"Age\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \n\ |
| set ylabel \"Probability\" \n\ | set ylabel \"Probability\" \n\ |
| set ter png small\n\ | set ter png small size 320, 240\n\ |
| set size 0.65,0.65\n\ | |
| plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"\%%lf",ageminpar,fage,subdirf2(fileres,"vpl"),k1-1,k1-1); | plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"\%%lf",ageminpar,fage,subdirf2(fileres,"vpl"),k1-1,k1-1); |
| for (i=1; i<= nlstate ; i ++) { | for (i=1; i<= nlstate ; i ++) { |
| if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); | if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); |
| else fprintf(ficgp," \%%*lf (\%%*lf)"); | else fprintf(ficgp," \%%*lf (\%%*lf)"); |
| } | } |
| fprintf(ficgp,"\" t\"Period (stable) prevalence\" w l lt 1,\"%s\" every :::%d::%d u 1:($2+1.96*$3) \"\%%lf",subdirf2(fileres,"vpl"),k1-1,k1-1); | fprintf(ficgp,"\" t\"Period (stable) prevalence\" w l lt 0,\"%s\" every :::%d::%d u 1:($2+1.96*$3) \"\%%lf",subdirf2(fileres,"vpl"),k1-1,k1-1); |
| for (i=1; i<= nlstate ; i ++) { | for (i=1; i<= nlstate ; i ++) { |
| if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); | if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); |
| else fprintf(ficgp," \%%*lf (\%%*lf)"); | else fprintf(ficgp," \%%*lf (\%%*lf)"); |
| } | } |
| fprintf(ficgp,"\" t\"95\%% CI\" w l lt 2,\"%s\" every :::%d::%d u 1:($2-1.96*$3) \"\%%lf",subdirf2(fileres,"vpl"),k1-1,k1-1); | fprintf(ficgp,"\" t\"95\%% CI\" w l lt 1,\"%s\" every :::%d::%d u 1:($2-1.96*$3) \"\%%lf",subdirf2(fileres,"vpl"),k1-1,k1-1); |
| for (i=1; i<= nlstate ; i ++) { | for (i=1; i<= nlstate ; i ++) { |
| if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); | if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); |
| else fprintf(ficgp," \%%*lf (\%%*lf)"); | else fprintf(ficgp," \%%*lf (\%%*lf)"); |
| } | } |
| fprintf(ficgp,"\" t\"\" w l lt 2,\"%s\" every :::%d::%d u 1:($%d) t\"Observed prevalence \" w l lt 3",subdirf2(fileres,"p"),k1-1,k1-1,2+4*(cpt-1)); | fprintf(ficgp,"\" t\"\" w l lt 1,\"%s\" every :::%d::%d u 1:($%d) t\"Observed prevalence \" w l lt 2",subdirf2(fileres,"p"),k1-1,k1-1,2+4*(cpt-1)); |
| } | } |
| } | } |
| /*2 eme*/ | /*2 eme*/ |
| for (k1=1; k1<= m ; k1 ++) { | for (k1=1; k1<= m ; k1 ++) { |
| fprintf(ficgp,"\nset out \"%s%d.png\" \n",subdirf2(optionfilefiname,"e"),k1); | fprintf(ficgp,"\nset out \"%s%d.png\" \n",subdirf2(optionfilefiname,"e"),k1); |
| fprintf(ficgp,"set ylabel \"Years\" \nset ter png small\nset size 0.65,0.65\nplot [%.f:%.f] ",ageminpar,fage); | fprintf(ficgp,"set ylabel \"Years\" \nset ter png small size 320, 240\nplot [%.f:%.f] ",ageminpar,fage); |
| for (i=1; i<= nlstate+1 ; i ++) { | for (i=1; i<= nlstate+1 ; i ++) { |
| k=2*i; | k=2*i; |
| Line 3881 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 4022 plot [%.f:%.f] \"%s\" every :::%d::%d u |
| if (j==i) fprintf(ficgp," \%%lf (\%%lf)"); | if (j==i) fprintf(ficgp," \%%lf (\%%lf)"); |
| else fprintf(ficgp," \%%*lf (\%%*lf)"); | else fprintf(ficgp," \%%*lf (\%%*lf)"); |
| } | } |
| fprintf(ficgp,"\" t\"\" w l lt 1,"); | fprintf(ficgp,"\" t\"\" w l lt 0,"); |
| fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2+$3*2) \"\%%lf",subdirf2(fileres,"t"),k1-1,k1-1); | fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2+$3*2) \"\%%lf",subdirf2(fileres,"t"),k1-1,k1-1); |
| for (j=1; j<= nlstate+1 ; j ++) { | for (j=1; j<= nlstate+1 ; j ++) { |
| if (j==i) fprintf(ficgp," \%%lf (\%%lf)"); | if (j==i) fprintf(ficgp," \%%lf (\%%lf)"); |
| else fprintf(ficgp," \%%*lf (\%%*lf)"); | else fprintf(ficgp," \%%*lf (\%%*lf)"); |
| } | } |
| if (i== (nlstate+1)) fprintf(ficgp,"\" t\"\" w l lt 1"); | if (i== (nlstate+1)) fprintf(ficgp,"\" t\"\" w l lt 0"); |
| else fprintf(ficgp,"\" t\"\" w l lt 1,"); | else fprintf(ficgp,"\" t\"\" w l lt 0,"); |
| } | } |
| } | } |
| Line 3899 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 4040 plot [%.f:%.f] \"%s\" every :::%d::%d u |
| /* k=2+nlstate*(2*cpt-2); */ | /* k=2+nlstate*(2*cpt-2); */ |
| k=2+(nlstate+1)*(cpt-1); | k=2+(nlstate+1)*(cpt-1); |
| fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"exp"),cpt,k1); | fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"exp"),cpt,k1); |
| fprintf(ficgp,"set ter png small\n\ | fprintf(ficgp,"set ter png small size 320, 240\n\ |
| set size 0.65,0.65\n\ | |
| plot [%.f:%.f] \"%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",ageminpar,fage,subdirf2(fileres,"e"),k1-1,k1-1,k,cpt); | plot [%.f:%.f] \"%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",ageminpar,fage,subdirf2(fileres,"e"),k1-1,k1-1,k,cpt); |
| /*fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d-2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1); | /*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) "); | for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) "); |
| Line 3923 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 4063 plot [%.f:%.f] \"%s\" every :::%d::%d u |
| for (k1=1; k1<= m ; k1 ++) { | for (k1=1; k1<= m ; k1 ++) { |
| for (cpt=1; cpt<=nlstate ; cpt ++) { | for (cpt=1; cpt<=nlstate ; cpt ++) { |
| k=3; | k=3; |
| fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"p"),cpt,k1); | fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"p"),cpt,k1); |
| fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ |
| set ter png small\nset size 0.65,0.65\n\ | set ter png small size 320, 240\n\ |
| unset log y\n\ | unset log y\n\ |
| plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1/0):($%d/($%d",ageminpar,agemaxpar,subdirf2(fileres,"pij"),k1,k+cpt+1,k+1); | plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1/0):($%d/($%d",ageminpar,agemaxpar,subdirf2(fileres,"pij"),k1,k+cpt+1,k+1); |
| Line 3955 plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | Line 4095 plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 |
| } | } |
| } | } |
| } | } |
| /*goto avoid;*/ | |
| for(ng=1; ng<=2;ng++){ /* Number of graphics: first is probabilities second is incidence per year*/ | for(ng=1; ng<=2;ng++){ /* Number of graphics: first is probabilities second is incidence per year*/ |
| for(jk=1; jk <=m; jk++) { | for(jk=1; jk <=m; jk++) { |
| fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"pe"),jk,ng); | fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"pe"),jk,ng); |
| if (ng==2) | if (ng==2) |
| fprintf(ficgp,"\nset ylabel \"Quasi-incidence per year\"\n"); | fprintf(ficgp,"\nset ylabel \"Quasi-incidence per year\"\n"); |
| else | else |
| fprintf(ficgp,"\nset title \"Probability\"\n"); | fprintf(ficgp,"\nset title \"Probability\"\n"); |
| fprintf(ficgp,"\nset ter png small\nset size 0.65,0.65\nset log y\nplot [%.f:%.f] ",ageminpar,agemaxpar); | fprintf(ficgp,"\nset ter png small size 320, 240\nset log y\nplot [%.f:%.f] ",ageminpar,agemaxpar); |
| i=1; | i=1; |
| for(k2=1; k2<=nlstate; k2++) { | for(k2=1; k2<=nlstate; k2++) { |
| k3=i; | k3=i; |
| Line 3975 plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | Line 4115 plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 |
| fprintf(ficgp," exp(p%d+p%d*x",i,i+1); | fprintf(ficgp," exp(p%d+p%d*x",i,i+1); |
| 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; j++) { | for(j=3; j <=ncovmodel; j++) { |
| if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) { /* Bug valgrind */ | /* if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) { /\* Bug valgrind *\/ */ |
| fprintf(ficgp,"+p%d*%d*x",i+j-1,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]); | /* /\*fprintf(ficgp,"+p%d*%d*x",i+j-1,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]);*\/ */ |
| ij++; | /* ij++; */ |
| } | /* } */ |
| else | /* else */ |
| fprintf(ficgp,"+p%d*%d",i+j-1,nbcode[Tvar[j-2]][codtab[jk][j-2]]); | fprintf(ficgp,"+p%d*%d",i+j-1,nbcode[Tvar[j-2]][codtab[jk][j-2]]); |
| } | } |
| fprintf(ficgp,")/(1"); | fprintf(ficgp,")/(1"); |
| Line 3988 plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | Line 4128 plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 |
| 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+(k1-1)*ncovmodel,k3+(k1-1)*ncovmodel+1); |
| ij=1; | ij=1; |
| for(j=3; j <=ncovmodel; j++){ | for(j=3; j <=ncovmodel; j++){ |
| if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) { | /* if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) { */ |
| fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]); | /* fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]); */ |
| ij++; | /* ij++; */ |
| } | /* } */ |
| else | /* else */ |
| fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][j-2]]); | fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][j-2]]); |
| } | } |
| fprintf(ficgp,")"); | fprintf(ficgp,")"); |
| Line 4005 plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | Line 4145 plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 |
| } /* end k2 */ | } /* end k2 */ |
| } /* end jk */ | } /* end jk */ |
| } /* end ng */ | } /* end ng */ |
| avoid: | |
| fflush(ficgp); | fflush(ficgp); |
| } /* end gnuplot */ | } /* end gnuplot */ |
| Line 4588 void printinggnuplotmort(char fileres[], | Line 4729 void printinggnuplotmort(char fileres[], |
| strcpy(optfileres,"vpl"); | strcpy(optfileres,"vpl"); |
| fprintf(ficgp,"set out \"graphmort.png\"\n "); | fprintf(ficgp,"set out \"graphmort.png\"\n "); |
| fprintf(ficgp,"set xlabel \"Age\"\n set ylabel \"Force of mortality (per year)\" \n "); | fprintf(ficgp,"set xlabel \"Age\"\n set ylabel \"Force of mortality (per year)\" \n "); |
| fprintf(ficgp, "set ter png small\n set log y\n"); | fprintf(ficgp, "set ter png small size 320, 240\n set log y\n"); |
| fprintf(ficgp, "set size 0.65,0.65\n"); | /* fprintf(ficgp, "set size 0.65,0.65\n"); */ |
| fprintf(ficgp,"plot [%d:100] %lf*exp(%lf*(x-%d))",agegomp,p[1],p[2],agegomp); | fprintf(ficgp,"plot [%d:100] %lf*exp(%lf*(x-%d))",agegomp,p[1],p[2],agegomp); |
| } | } |
| Line 4656 int readdata(char datafile[], int firsto | Line 4797 int readdata(char datafile[], int firsto |
| cutv(stra, strb,line,' '); | cutv(stra, strb,line,' '); |
| if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ | if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ |
| } | } |
| else if(iout=sscanf(strb,"%s.") != 0){ | else if(iout=sscanf(strb,"%s.",dummy) != 0){ |
| month=99; | month=99; |
| year=9999; | year=9999; |
| }else{ | }else{ |
| Line 4687 int readdata(char datafile[], int firsto | Line 4828 int readdata(char datafile[], int firsto |
| cutv(stra, strb,line,' '); | cutv(stra, strb,line,' '); |
| if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ | if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ |
| } | } |
| else if(iout=sscanf(strb,"%s.") != 0){ | else if(iout=sscanf(strb,"%s.", dummy) != 0){ |
| month=99; | month=99; |
| year=9999; | year=9999; |
| }else{ | }else{ |
| Line 4780 int readdata(char datafile[], int firsto | Line 4921 int readdata(char datafile[], int firsto |
| } | } |
| void removespace(char *str) { | |
| int decodemodel ( char model[], int lastobs) | char *p1 = str, *p2 = str; |
| do | |
| while (*p2 == ' ') | |
| p2++; | |
| while (*p1++ = *p2++); | |
| } | |
| int decodemodel ( char model[], int lastobs) /**< This routine decode the model and returns: | |
| * Model V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age | |
| * - cptcovt total number of covariates of the model nbocc(+)+1 = 8 | |
| * - cptcovn or number of covariates k of the models excluding age*products =6 | |
| * - cptcovage number of covariates with age*products =2 | |
| * - cptcovs number of simple covariates | |
| * - Tvar[k] is the id of the kth covariate Tvar[1]@12 {1, 2, 3, 8, 10, 11, 8, 3, 7, 8, 5, 6}, thus Tvar[5=V7*V8]=10 | |
| * which is a new column after the 9 (ncovcol) variables. | |
| * - if k is a product Vn*Vm covar[k][i] is filled with correct values for each individual | |
| * - Tprod[l] gives the kth covariates of the product Vn*Vm l=1 to cptcovprod-cptcovage | |
| * Tprod[1]@2 {5, 6}: position of first product V7*V8 is 5, and second V5*V6 is 6. | |
| * - Tvard[k] p Tvard[1][1]@4 {7, 8, 5, 6} for V7*V8 and V5*V6 . | |
| */ | |
| { | { |
| int i, j, k; | int i, j, k, ks; |
| int i1, j1, k1, k2; | int i1, j1, k1, k2; |
| 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]; |
| /*removespace(model);*/ | |
| if (strlen(model) >1){ /* If there is at least 1 covariate */ | if (strlen(model) >1){ /* If there is at least 1 covariate */ |
| j=0, j1=0, k1=1, k2=1; | j=0, j1=0, k1=0, k2=-1, ks=0, cptcovn=0; |
| j=nbocc(model,'+'); /* j=Number of '+' */ | j=nbocc(model,'+'); /**< j=Number of '+' */ |
| j1=nbocc(model,'*'); /* j1=Number of '*' */ | j1=nbocc(model,'*'); /**< j1=Number of '*' */ |
| cptcovn=j+1; /* Number of covariates V1+V2*age+V3 =>(2 plus signs) + 1=3 | cptcovs=j+1-j1; /**< Number of simple covariates V1+V2*age+V3 +V3*V4=> V1 + V3 =2 */ |
| but the covariates which are product must be computed and stored. */ | cptcovt= j+1; /* Number of total covariates in the model V1 + V2*age+ V3 + V3*V4=> 4*/ |
| cptcovprod=j1; /*Number of products V1*V2 +v3*age = 2 */ | /* including age products which are counted in cptcovage. |
| /* but the covariates which are products must be treated separately: ncovn=4- 2=2 (V1+V3). */ | |
| cptcovprod=j1; /**< Number of products V1*V2 +v3*age = 2 */ | |
| cptcovprodnoage=0; /**< Number of covariate products without age: V3*V4 =1 */ | |
| strcpy(modelsav,model); | strcpy(modelsav,model); |
| if (strstr(model,"AGE") !=0){ | if (strstr(model,"AGE") !=0){ |
| printf("Error. AGE must be in lower case 'age' model=%s ",model); | printf("Error. AGE must be in lower case 'age' model=%s ",model); |
| Line 4808 int decodemodel ( char model[], int last | Line 4971 int decodemodel ( char model[], int last |
| return 1; | return 1; |
| } | } |
| /* Design | |
| * V1 V2 V3 V4 V5 V6 V7 V8 V9 Weight | |
| * < ncovcol=8 > | |
| * Model V2 + V1 + V3*age + V3 + V5*V6 + V7*V8 + V8*age + V8 | |
| * k= 1 2 3 4 5 6 7 8 | |
| * cptcovn number of covariates (not including constant and age ) = # of + plus 1 = 7+1=8 | |
| * covar[k,i], value of kth covariate if not including age for individual i: | |
| * covar[1][i]= (V2), covar[4][i]=(V3), covar[8][i]=(V8) | |
| * Tvar[k] # of the kth covariate: Tvar[1]=2 Tvar[4]=3 Tvar[8]=8 | |
| * if multiplied by age: V3*age Tvar[3=V3*age]=3 (V3) Tvar[7]=8 and | |
| * Tage[++cptcovage]=k | |
| * if products, new covar are created after ncovcol with k1 | |
| * Tvar[k]=ncovcol+k1; # of the kth covariate product: Tvar[5]=ncovcol+1=10 Tvar[6]=ncovcol+1=11 | |
| * Tprod[k1]=k; Tprod[1]=5 Tprod[2]= 6; gives the position of the k1th product | |
| * Tvard[k1][1]=m Tvard[k1][2]=m; Tvard[1][1]=5 (V5) Tvard[1][2]=6 Tvard[2][1]=7 (V7) Tvard[2][2]=8 | |
| * Tvar[cptcovn+k2]=Tvard[k1][1];Tvar[cptcovn+k2+1]=Tvard[k1][2]; | |
| * Tvar[8+1]=5;Tvar[8+2]=6;Tvar[8+3]=7;Tvar[8+4]=8 inverted | |
| * V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 | |
| * < ncovcol=8 > | |
| * Model V2 + V1 + V3*age + V3 + V5*V6 + V7*V8 + V8*age + V8 d1 d1 d2 d2 | |
| * k= 1 2 3 4 5 6 7 8 9 10 11 12 | |
| * Tvar[k]= 2 1 3 3 10 11 8 8 5 6 7 8 | |
| * p Tvar[1]@12={2, 1, 3, 3, 11, 10, 8, 8, 7, 8, 5, 6} | |
| * p Tprod[1]@2={ 6, 5} | |
| *p Tvard[1][1]@4= {7, 8, 5, 6} | |
| * covar[k][i]= V2 V1 ? V3 V5*V6? V7*V8? ? V8 | |
| * cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; | |
| *How to reorganize? | |
| * Model V1 + V2 + V3 + V8 + V5*V6 + V7*V8 + V3*age + V8*age | |
| * Tvars {2, 1, 3, 3, 11, 10, 8, 8, 7, 8, 5, 6} | |
| * {2, 1, 4, 8, 5, 6, 3, 7} | |
| * Struct [] | |
| */ | |
| /* This loop fills the array Tvar from the string 'model'.*/ | /* This loop fills the array Tvar from the string 'model'.*/ |
| /* j is the number of + signs in the model V1+V2+V3 j=2 i=3 to 1 */ | /* j is the number of + signs in the model V1+V2+V3 j=2 i=3 to 1 */ |
| /* modelsav=V2+V1+V4+age*V3 strb=age*V3 stra=V2+V1+V4 */ | /* modelsav=V2+V1+V4+age*V3 strb=age*V3 stra=V2+V1+V4 */ |
| Line 4820 int decodemodel ( char model[], int last | Line 5017 int decodemodel ( char model[], int last |
| /* cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; */ | /* cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; */ |
| /* } */ | /* } */ |
| /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ |
| for(k=cptcovn; k>=1;k--){ | /* |
| cutv(stra,strb,modelsav,'+'); /* keeps in strb after the first '+' | * Treating invertedly V2+V1+V3*age+V2*V4 is as if written V2*V4 +V3*age + V1 + V2 */ |
| modelsav==V2+V1+V4+V3*age strb=V3*age stra=V2+V1+V4 | for(k=cptcovt; k>=1;k--) /**< Number of covariates */ |
| */ | Tvar[k]=0; |
| cptcovage=0; | |
| for(k=1; k<=cptcovt;k++){ /* Loop on total covariates of the model */ | |
| cutl(stra,strb,modelsav,'+'); /* keeps in strb after the first '+' | |
| modelsav==V2+V1+V4+V3*age strb=V3*age stra=V2+V1+V4 */ | |
| if (nbocc(modelsav,'+')==0) strcpy(strb,modelsav); /* and analyzes it */ | if (nbocc(modelsav,'+')==0) strcpy(strb,modelsav); /* and analyzes it */ |
| /* printf("i=%d a=%s b=%s sav=%s\n",i, stra,strb,modelsav);*/ | /* printf("i=%d a=%s b=%s sav=%s\n",i, stra,strb,modelsav);*/ |
| /*scanf("%d",i);*/ | /*scanf("%d",i);*/ |
| if (strchr(strb,'*')) { /* Model includes a product V2+V1+V4+V3*age strb=V3*age */ | if (strchr(strb,'*')) { /**< Model includes a product V2+V1+V4+V3*age strb=V3*age */ |
| cutv(strd,strc,strb,'*'); /* strd*strc Vm*Vn: strb=V3*age strc=age strd=V3 ; V3*V2 strc=V2, strd=V3 */ | cutl(strc,strd,strb,'*'); /**< strd*strc Vm*Vn: strb=V3*age(input) strc=age strd=V3 ; V3*V2 strc=V2, strd=V3 */ |
| if (strcmp(strc,"age")==0) { /* Vn*age */ | if (strcmp(strc,"age")==0) { /**< Model includes age: Vn*age */ |
| /* covar is not filled and then is empty */ | |
| cptcovprod--; | cptcovprod--; |
| cutv(strb,stre,strd,'V'); /* stre="V3" */ | cutl(stre,strb,strd,'V'); /* strd=V3(input): stre="3" */ |
| Tvar[k]=atoi(stre); /* V2+V1+V4+V3*age Tvar[4]=2 ; V1+V2*age Tvar[2]=2 */ | Tvar[k]=atoi(stre); /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2 */ |
| cptcovage++; /* Sums the number of covariates which include age as a product */ | cptcovage++; /* Sums the number of covariates which include age as a product */ |
| Tage[cptcovage]=k; /* Tage[1] = 4 */ | Tage[cptcovage]=k; /* Tage[1] = 4 */ |
| /*printf("stre=%s ", stre);*/ | /*printf("stre=%s ", stre);*/ |
| } else if (strcmp(strd,"age")==0) { /* or age*Vn */ | } else if (strcmp(strd,"age")==0) { /* or age*Vn */ |
| cptcovprod--; | cptcovprod--; |
| cutv(strb,stre,strc,'V'); | cutl(stre,strb,strc,'V'); |
| Tvar[k]=atoi(stre); | Tvar[k]=atoi(stre); |
| cptcovage++; | cptcovage++; |
| Tage[cptcovage]=k; | Tage[cptcovage]=k; |
| } else { /* Age is not in the model product V2+V1+V1*V4+V3*age+V3*V2 strb=V3*V2*/ | } else { /* Age is not in the model product V2+V1+V1*V4+V3*age+V3*V2 strb=V3*V2*/ |
| /* loops on k1=1 (V3*V2) and k1=2 V4*V3 */ | /* loops on k1=1 (V3*V2) and k1=2 V4*V3 */ |
| cutv(strb,stre,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/ | cptcovn++; |
| Tvar[k]=ncovcol+k1; /* For model-covariate k tells which data-covariate to use but | cptcovprodnoage++;k1++; |
| cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/ | |
| Tvar[k]=ncovcol+k1; /* For model-covariate k tells which data-covariate to use but | |
| because this model-covariate is a construction we invent a new column | because this model-covariate is a construction we invent a new column |
| ncovcol + k1 | ncovcol + k1 |
| If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2 | If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2 |
| Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */ | Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */ |
| cutv(strb,strc,strd,'V'); /* strd was Vm, strc is m */ | cutl(strc,strb,strd,'V'); /* strd was Vm, strc is m */ |
| Tprod[k1]=k; /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2 */ | Tprod[k1]=k; /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2 */ |
| Tvard[k1][1]=atoi(strc); /* m 1 for V1*/ | Tvard[k1][1] =atoi(strc); /* m 1 for V1*/ |
| Tvard[k1][2]=atoi(stre); /* n 4 for V4*/ | Tvard[k1][2] =atoi(stre); /* n 4 for V4*/ |
| Tvar[cptcovn+k2]=Tvard[k1][1]; /* Tvar[(cptcovn=4+k2=1)=5]= 1 (V1) */ | k2=k2+2; |
| Tvar[cptcovn+k2+1]=Tvard[k1][2]; /* Tvar[(cptcovn=4+(k2=1)+1)=6]= 4 (V4) */ | Tvar[cptcovt+k2]=Tvard[k1][1]; /* Tvar[(cptcovt=4+k2=1)=5]= 1 (V1) */ |
| Tvar[cptcovt+k2+1]=Tvard[k1][2]; /* Tvar[(cptcovt=4+(k2=1)+1)=6]= 4 (V4) */ | |
| for (i=1; i<=lastobs;i++){ | for (i=1; i<=lastobs;i++){ |
| /* Computes the new covariate which is a product of | /* Computes the new covariate which is a product of |
| covar[n][i]* covar[m][i] and stores it at ncovol+k1 */ | covar[n][i]* covar[m][i] and stores it at ncovol+k1 May not be defined */ |
| covar[ncovcol+k1][i]=covar[atoi(stre)][i]*covar[atoi(strc)][i]; | covar[ncovcol+k1][i]=covar[atoi(stre)][i]*covar[atoi(strc)][i]; |
| } | } |
| k1++; | |
| k2=k2+2; | |
| } /* End age is not in the model */ | } /* End age is not in the model */ |
| } /* End if model includes a product */ | } /* End if model includes a product */ |
| else { /* no more sum */ | else { /* no more sum */ |
| /*printf("d=%s c=%s b=%s\n", strd,strc,strb);*/ | /*printf("d=%s c=%s b=%s\n", strd,strc,strb);*/ |
| /* scanf("%d",i);*/ | /* scanf("%d",i);*/ |
| cutv(strd,strc,strb,'V'); | cutl(strd,strc,strb,'V'); |
| Tvar[k]=atoi(strc); | ks++; /**< Number of simple covariates */ |
| cptcovn++; | |
| Tvar[k]=atoi(strd); | |
| } | } |
| strcpy(modelsav,stra); /* modelsav=V2+V1+V4 stra=V2+V1+V4 */ | strcpy(modelsav,stra); /* modelsav=V2+V1+V4 stra=V2+V1+V4 */ |
| /*printf("a=%s b=%s sav=%s\n", stra,strb,modelsav); | /*printf("a=%s b=%s sav=%s\n", stra,strb,modelsav); |
| Line 5059 int main(int argc, char *argv[]) | Line 5264 int main(int argc, char *argv[]) |
| double kk1, kk2; | double kk1, kk2; |
| double dateprev1, dateprev2,jproj1=1,mproj1=1,anproj1=2000,jproj2=1,mproj2=1,anproj2=2000; | double dateprev1, dateprev2,jproj1=1,mproj1=1,anproj1=2000,jproj2=1,mproj2=1,anproj2=2000; |
| double **ximort; | double **ximort; |
| char *alph[]={"a","a","b","c","d","e"}, str[4]; | char *alph[]={"a","a","b","c","d","e"}, str[4]="1234"; |
| int *dcwave; | int *dcwave; |
| char z[1]="c", occ; | char z[1]="c", occ; |
| Line 5227 int main(int argc, char *argv[]) | Line 5432 int main(int argc, char *argv[]) |
| ungetc(c,ficpar); | ungetc(c,ficpar); |
| covar=matrix(0,NCOVMAX,1,n); | covar=matrix(0,NCOVMAX,1,n); /**< used in readdata */ |
| cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/ | cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/ |
| /* v1+v2+v3+v2*v4+v5*age makes cptcovn = 5 | /* v1+v2+v3+v2*v4+v5*age makes cptcovn = 5 |
| v1+v2*age+v2*v3 makes cptcovn = 3 | v1+v2*age+v2*v3 makes cptcovn = 3 |
| */ | */ |
| if (strlen(model)>1) | if (strlen(model)>1) |
| cptcovn=nbocc(model,'+')+1; | ncovmodel=2+nbocc(model,'+')+1; /*Number of variables including intercept and age = cptcovn + intercept + age : v1+v2+v3+v2*v4+v5*age makes 5+2=7*/ |
| /* ncovprod */ | else |
| ncovmodel=2+cptcovn; /*Number of variables including intercept and age = cptcovn + intercept + age : v1+v2+v3+v2*v4+v5*age makes 5+2=7*/ | ncovmodel=2; |
| nvar=ncovmodel-1; /* Suppressing age as a basic covariate */ | nvar=ncovmodel-1; /* Suppressing age as a basic covariate */ |
| nforce= (nlstate+ndeath-1)*nlstate; /* Number of forces ij from state i to j */ | nforce= (nlstate+ndeath-1)*nlstate; /* Number of forces ij from state i to j */ |
| npar= nforce*ncovmodel; /* Number of parameters like aij*/ | npar= nforce*ncovmodel; /* Number of parameters like aij*/ |
| Line 5267 int main(int argc, char *argv[]) | Line 5472 int main(int argc, char *argv[]) |
| matcov=matrix(1,npar,1,npar); | matcov=matrix(1,npar,1,npar); |
| } | } |
| else{ | else{ |
| /* Read guess parameters */ | /* Read guessed parameters */ |
| /* Reads comments: lines beginning with '#' */ | /* Reads comments: lines beginning with '#' */ |
| while((c=getc(ficpar))=='#' && c!= EOF){ | while((c=getc(ficpar))=='#' && c!= EOF){ |
| ungetc(c,ficpar); | ungetc(c,ficpar); |
| Line 5316 run imach with mle=-1 to get a correct t | Line 5521 run imach with mle=-1 to get a correct t |
| } | } |
| fflush(ficlog); | fflush(ficlog); |
| /* Reads scales values */ | |
| p=param[1][1]; | p=param[1][1]; |
| /* Reads comments: lines beginning with '#' */ | /* Reads comments: lines beginning with '#' */ |
| Line 5354 run imach with mle=-1 to get a correct t | Line 5560 run imach with mle=-1 to get a correct t |
| } | } |
| fflush(ficlog); | fflush(ficlog); |
| /* Reads covariance matrix */ | |
| delti=delti3[1][1]; | delti=delti3[1][1]; |
| Line 5375 run imach with mle=-1 to get a correct t | Line 5582 run imach with mle=-1 to get a correct t |
| for(j=1; j <=npar; j++) matcov[i][j]=0.; | for(j=1; j <=npar; j++) matcov[i][j]=0.; |
| for(i=1; i <=npar; i++){ | for(i=1; i <=npar; i++){ |
| fscanf(ficpar,"%s",&str); | fscanf(ficpar,"%s",str); |
| if(mle==1) | if(mle==1) |
| printf("%s",str); | printf("%s",str); |
| fprintf(ficlog,"%s",str); | fprintf(ficlog,"%s",str); |
| Line 5455 run imach with mle=-1 to get a correct t | Line 5662 run imach with mle=-1 to get a correct t |
| ncovcol + k1 | ncovcol + k1 |
| If already ncovcol=4 and model=V2+V1+V1*V4+age*V3 | If already ncovcol=4 and model=V2+V1+V1*V4+age*V3 |
| Tvar[3=V1*V4]=4+1 etc */ | Tvar[3=V1*V4]=4+1 etc */ |
| Tprod=ivector(1,15); /* Gives the position of a product */ | Tprod=ivector(1,NCOVMAX); /* Gives the position of a product */ |
| /* Tprod[k1=1]=3(=V1*V4) for V2+V1+V1*V4+age*V3 | /* 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) |
| */ | */ |
| Tvaraff=ivector(1,15); | Tvaraff=ivector(1,NCOVMAX); /* Unclear */ |
| Tvard=imatrix(1,15,1,2); /* n=Tvard[k1][1] and m=Tvard[k1][2] gives the couple n,m of the k1 th product Vn*Vm | Tvard=imatrix(1,NCOVMAX,1,2); /* n=Tvard[k1][1] and m=Tvard[k1][2] gives the couple n,m of the k1 th product Vn*Vm |
| * For V3*V2 (in V2+V1+V1*V4+age*V3+V3*V2), V3*V2 position is 2nd. | * For V3*V2 (in V2+V1+V1*V4+age*V3+V3*V2), V3*V2 position is 2nd. |
| * Tvard[k1=2][1]=3 (V3) Tvard[k1=2][2]=2(V2) */ | * Tvard[k1=2][1]=3 (V3) Tvard[k1=2][2]=2(V2) */ |
| Tage=ivector(1,15); /* Gives the covariate id of covariates associated with age: V2 + V1 + age*V4 + V3*age | Tage=ivector(1,NCOVMAX); /* Gives the covariate id of covariates associated with age: V2 + V1 + age*V4 + V3*age |
| 4 covariates (3 plus signs) | 4 covariates (3 plus signs) |
| Tage[1=V3*age]= 4; Tage[2=age*V4] = 3 | Tage[1=V3*age]= 4; Tage[2=age*V4] = 3 |
| */ | */ |
| Line 5495 run imach with mle=-1 to get a correct t | Line 5702 run imach with mle=-1 to get a correct t |
| free_matrix(anint,1,maxwav,1,n);*/ | free_matrix(anint,1,maxwav,1,n);*/ |
| free_vector(moisdc,1,n); | free_vector(moisdc,1,n); |
| free_vector(andc,1,n); | free_vector(andc,1,n); |
| /* */ | |
| wav=ivector(1,imx); | wav=ivector(1,imx); |
| dh=imatrix(1,lastpass-firstpass+1,1,imx); | dh=imatrix(1,lastpass-firstpass+1,1,imx); |
| bh=imatrix(1,lastpass-firstpass+1,1,imx); | bh=imatrix(1,lastpass-firstpass+1,1,imx); |
| Line 5504 run imach with mle=-1 to get a correct t | Line 5711 run imach with mle=-1 to get a correct t |
| /* Concatenates waves */ | /* Concatenates waves */ |
| 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); |
| /* */ | |
| /* Routine tricode is to calculate cptcoveff (real number of unique covariates) and to associate covariable number and modality */ | /* Routine tricode is to calculate cptcoveff (real number of unique covariates) and to associate covariable number and modality */ |
| nbcode=imatrix(0,NCOVMAX,0,NCOVMAX); | nbcode=imatrix(0,NCOVMAX,0,NCOVMAX); |
| ncodemax[1]=1; | ncodemax[1]=1; |
| if (cptcovn > 0) tricode(Tvar,nbcode,imx); | Ndum =ivector(-1,NCOVMAX); |
| if (ncovmodel > 2) | |
| codtab=imatrix(1,100,1,10); /**< codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) | tricode(Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */ |
| */ | |
| codtab=imatrix(1,100,1,10); /* codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) */ | |
| /*printf(" codtab[1,1],codtab[100,10]=%d,%d\n", codtab[1][1],codtab[100][10]);*/ | |
| h=0; | h=0; |
| /*if (cptcovn > 0) */ | |
| m=pow(2,cptcoveff); | m=pow(2,cptcoveff); |
| for(k=1;k<=cptcoveff; k++){ /* scans any effective covariate */ | for(k=1;k<=cptcoveff; k++){ /* scans any effective covariate */ |
| Line 5544 run imach with mle=-1 to get a correct t | Line 5759 run imach with mle=-1 to get a correct t |
| * 16 2 2 2 1 | * 16 2 2 2 1 |
| */ | */ |
| codtab[h][k]=j; | codtab[h][k]=j; |
| codtab[h][Tvar[k]]=j; | /*codtab[h][Tvar[k]]=j;*/ |
| printf("h=%d k=%d j=%d codtab[h][k]=%d Tvar[k]=%d codtab[h][Tvar[k]]=%d \n",h, k,j,codtab[h][k],Tvar[k],codtab[h][Tvar[k]]); | printf("h=%d k=%d j=%d codtab[h][k]=%d Tvar[k]=%d codtab[h][Tvar[k]]=%d \n",h, k,j,codtab[h][k],Tvar[k],codtab[h][Tvar[k]]); |
| } | } |
| } | } |
| Line 5559 run imach with mle=-1 to get a correct t | Line 5774 run imach with mle=-1 to get a correct t |
| printf("\n"); | printf("\n"); |
| } | } |
| scanf("%d",i);*/ | scanf("%d",i);*/ |
| free_ivector(Ndum,-1,NCOVMAX); | |
| /*------------ gnuplot -------------*/ | /*------------ gnuplot -------------*/ |
| strcpy(optionfilegnuplot,optionfilefiname); | strcpy(optionfilegnuplot,optionfilefiname); |
| Line 5682 Interval (in months) between two waves: | Line 5901 Interval (in months) between two waves: |
| ximort[i][j]=(i == j ? 1.0 : 0.0); | ximort[i][j]=(i == j ? 1.0 : 0.0); |
| } | } |
| p[1]=0.0268; p[NDIM]=0.083; | /*p[1]=0.0268; p[NDIM]=0.083;*/ |
| /*printf("%lf %lf", p[1], p[2]);*/ | /*printf("%lf %lf", p[1], p[2]);*/ |
| Line 6076 Interval (in months) between two waves: | Line 6295 Interval (in months) between two waves: |
| /* 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); */ |
| replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */ | replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */ |
| printinggnuplot(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p); | printinggnuplot(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p); |
| Line 6102 Interval (in months) between two waves: | Line 6321 Interval (in months) between two waves: |
| /*--------------- Prevalence limit (period or stable prevalence) --------------*/ | /*--------------- Prevalence limit (period or stable prevalence) --------------*/ |
| #include "prevlim.h" /* Use ficrespl, ficlog */ | |
| strcpy(filerespl,"pl"); | |
| strcat(filerespl,fileres); | |
| if((ficrespl=fopen(filerespl,"w"))==NULL) { | |
| printf("Problem with period (stable) prevalence resultfile: %s\n", filerespl);goto end; | |
| fprintf(ficlog,"Problem with period (stable) prevalence resultfile: %s\n", filerespl);goto end; | |
| } | |
| printf("Computing period (stable) prevalence: result on file '%s' \n", filerespl); | |
| fprintf(ficlog,"Computing period (stable) prevalence: result on file '%s' \n", filerespl); | |
| pstamp(ficrespl); | |
| fprintf(ficrespl,"# Period (stable) prevalence \n"); | |
| fprintf(ficrespl,"#Age "); | |
| for(i=1; i<=nlstate;i++) fprintf(ficrespl,"%d-%d ",i,i); | |
| fprintf(ficrespl,"\n"); | |
| prlim=matrix(1,nlstate,1,nlstate); | |
| agebase=ageminpar; | |
| agelim=agemaxpar; | |
| ftolpl=1.e-10; | |
| i1=pow(2,cptcoveff); | |
| if (cptcovn < 1){i1=1;} | |
| for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | |
| //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ | |
| k=k+1; | |
| /* to clean */ | |
| //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtab[cptcod][cptcov]); | |
| fprintf(ficrespl,"\n#******"); | |
| printf("\n#******"); | |
| fprintf(ficlog,"\n#******"); | |
| for(j=1;j<=cptcoveff;j++) { | |
| fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | |
| printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | |
| fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | |
| } | |
| fprintf(ficrespl,"******\n"); | |
| printf("******\n"); | |
| fprintf(ficlog,"******\n"); | |
| for (age=agebase; age<=agelim; age++){ | |
| prevalim(prlim, nlstate, p, age, oldm, savm,ftolpl,k); | |
| fprintf(ficrespl,"%.0f ",age ); | |
| for(j=1;j<=cptcoveff;j++) | |
| fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | |
| for(i=1; i<=nlstate;i++) | |
| fprintf(ficrespl," %.5f", prlim[i][i]); | |
| fprintf(ficrespl,"\n"); | |
| } /* Age */ | |
| /* was end of cptcod */ | |
| } /* cptcov */ | |
| fclose(ficrespl); | fclose(ficrespl); |
| /*------------- h Pij x at various ages ------------*/ | #ifdef FREEEXIT2 |
| #include "freeexit2.h" | |
| strcpy(filerespij,"pij"); strcat(filerespij,fileres); | #endif |
| if((ficrespij=fopen(filerespij,"w"))==NULL) { | |
| printf("Problem with Pij resultfile: %s\n", filerespij);goto end; | |
| fprintf(ficlog,"Problem with Pij resultfile: %s\n", filerespij);goto end; | |
| } | |
| printf("Computing pij: result on file '%s' \n", filerespij); | |
| fprintf(ficlog,"Computing pij: result on file '%s' \n", filerespij); | |
| stepsize=(int) (stepm+YEARM-1)/YEARM; | |
| /*if (stepm<=24) stepsize=2;*/ | |
| agelim=AGESUP; | |
| hstepm=stepsize*YEARM; /* Every year of age */ | |
| hstepm=hstepm/stepm; /* Typically 2 years, = 2/6 months = 4 */ | |
| /* hstepm=1; aff par mois*/ | |
| pstamp(ficrespij); | |
| fprintf(ficrespij,"#****** h Pij x Probability to be in state j at age x+h being in i at x "); | |
| for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | |
| for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ | |
| k=k+1; | |
| fprintf(ficrespij,"\n#****** "); | |
| for(j=1;j<=cptcoveff;j++) | |
| fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | |
| fprintf(ficrespij,"******\n"); | |
| for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */ | |
| nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */ | |
| nhstepm = nhstepm/hstepm; /* Typically 40/4=10 */ | |
| /* nhstepm=nhstepm*YEARM; aff par mois*/ | |
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | /*------------- h Pij x at various ages ------------*/ |
| oldm=oldms;savm=savms; | #include "hpijx.h" |
| hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); | fclose(ficrespij); |
| fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j="); | |
| for(i=1; i<=nlstate;i++) | |
| for(j=1; j<=nlstate+ndeath;j++) | |
| fprintf(ficrespij," %1d-%1d",i,j); | |
| fprintf(ficrespij,"\n"); | |
| for (h=0; h<=nhstepm; h++){ | |
| fprintf(ficrespij,"%d %3.f %3.f",k,agedeb, agedeb+ h*hstepm/YEARM*stepm ); | |
| for(i=1; i<=nlstate;i++) | |
| for(j=1; j<=nlstate+ndeath;j++) | |
| fprintf(ficrespij," %.5f", p3mat[i][j][h]); | |
| fprintf(ficrespij,"\n"); | |
| } | |
| free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | |
| fprintf(ficrespij,"\n"); | |
| } | |
| } | |
| } | |
| /*-------------- Variance of one-step probabilities---*/ | |
| k=1; | |
| varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax,strstart); | varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax,strstart); |
| fclose(ficrespij); | |
| probs= ma3x(1,AGESUP,1,NCOVMAX, 1,NCOVMAX); | probs= ma3x(1,AGESUP,1,NCOVMAX, 1,NCOVMAX); |
| for(i=1;i<=AGESUP;i++) | for(i=1;i<=AGESUP;i++) |
| Line 6261 Interval (in months) between two waves: | Line 6384 Interval (in months) between two waves: |
| } | } |
| printf("Computing Health Expectancies: result on file '%s' \n", filerese); | printf("Computing Health Expectancies: result on file '%s' \n", filerese); |
| fprintf(ficlog,"Computing Health Expectancies: result on file '%s' \n", filerese); | fprintf(ficlog,"Computing Health Expectancies: result on file '%s' \n", filerese); |
| 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; | |
| for (k=1; k <= (int) pow(2,cptcoveff); k++){ | |
| fprintf(ficreseij,"\n#****** "); | fprintf(ficreseij,"\n#****** "); |
| for(j=1;j<=cptcoveff;j++) { | for(j=1;j<=cptcoveff;j++) { |
| fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); |
| Line 6275 Interval (in months) between two waves: | Line 6399 Interval (in months) between two waves: |
| 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); |
| free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); |
| } | /*}*/ |
| } | } |
| fclose(ficreseij); | fclose(ficreseij); |
| Line 6320 Interval (in months) between two waves: | Line 6444 Interval (in months) between two waves: |
| printf("Computing Variance-covariance of DFLEs: file '%s' \n", fileresv); | printf("Computing Variance-covariance of DFLEs: file '%s' \n", fileresv); |
| fprintf(ficlog,"Computing Variance-covariance of DFLEs: file '%s' \n", fileresv); | fprintf(ficlog,"Computing Variance-covariance of DFLEs: file '%s' \n", fileresv); |
| 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; | |
| fprintf(ficrest,"\n#****** "); | for (k=1; k <= (int) pow(2,cptcoveff); k++){ |
| fprintf(ficrest,"\n#****** "); | |
| for(j=1;j<=cptcoveff;j++) | for(j=1;j<=cptcoveff;j++) |
| fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); |
| fprintf(ficrest,"******\n"); | fprintf(ficrest,"******\n"); |
| Line 6345 Interval (in months) between two waves: | Line 6470 Interval (in months) between two waves: |
| 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; |
| 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); |
| /* | |
| */ | |
| /* goto endfree; */ | |
| vareij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | vareij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); |
| pstamp(ficrest); | pstamp(ficrest); |
| for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/ | for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/ |
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; /* Segmentation fault */ |
| varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); 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 "); | varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); |
| 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); |
| else | else |
| Line 6394 Interval (in months) between two waves: | Line 6525 Interval (in months) between two waves: |
| 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); |
| } | /*}*/ |
| } | } |
| free_vector(weight,1,n); | free_vector(weight,1,n); |
| free_imatrix(Tvard,1,15,1,2); | free_imatrix(Tvard,1,NCOVMAX,1,2); |
| free_imatrix(s,1,maxwav+1,1,n); | free_imatrix(s,1,maxwav+1,1,n); |
| free_matrix(anint,1,maxwav,1,n); | free_matrix(anint,1,maxwav,1,n); |
| free_matrix(mint,1,maxwav,1,n); | free_matrix(mint,1,maxwav,1,n); |
| Line 6419 Interval (in months) between two waves: | Line 6550 Interval (in months) between two waves: |
| } | } |
| printf("Computing Variance-covariance of period (stable) prevalence: file '%s' \n", fileresvpl); | printf("Computing Variance-covariance of period (stable) prevalence: file '%s' \n", fileresvpl); |
| 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; | |
| fprintf(ficresvpl,"\n#****** "); | for (k=1; k <= (int) pow(2,cptcoveff); k++){ |
| fprintf(ficresvpl,"\n#****** "); | |
| for(j=1;j<=cptcoveff;j++) | for(j=1;j<=cptcoveff;j++) |
| fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); |
| fprintf(ficresvpl,"******\n"); | fprintf(ficresvpl,"******\n"); |
| Line 6431 Interval (in months) between two waves: | Line 6563 Interval (in months) between two waves: |
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; |
| varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k,strstart); | varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k,strstart); |
| free_matrix(varpl,1,nlstate,(int) bage, (int)fage); | free_matrix(varpl,1,nlstate,(int) bage, (int)fage); |
| } | /*}*/ |
| } | } |
| fclose(ficresvpl); | fclose(ficresvpl); |
| Line 6453 Interval (in months) between two waves: | Line 6585 Interval (in months) between two waves: |
| free_matrix(agev,1,maxwav,1,imx); | free_matrix(agev,1,maxwav,1,imx); |
| free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); | free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); |
| free_ivector(ncodemax,1,8); | free_ivector(ncodemax,1,NCOVMAX); |
| free_ivector(Tvar,1,15); | free_ivector(Tvar,1,NCOVMAX); |
| free_ivector(Tprod,1,15); | free_ivector(Tprod,1,NCOVMAX); |
| free_ivector(Tvaraff,1,15); | free_ivector(Tvaraff,1,NCOVMAX); |
| free_ivector(Tage,1,15); | free_ivector(Tage,1,NCOVMAX); |
| free_imatrix(nbcode,0,NCOVMAX,0,NCOVMAX); | free_imatrix(nbcode,0,NCOVMAX,0,NCOVMAX); |
| free_imatrix(codtab,1,100,1,10); | free_imatrix(codtab,1,100,1,10); |