| 
 |   
| version 1.225, 2016/07/12 08:40:03 | version 1.236, 2016/08/25 10:50:18 | 
|---|---|
| Line 1 | Line 1 | 
| /* $Id$ | /* $Id$ | 
| $State$ | $State$ | 
| $Log$ | $Log$ | 
| Revision 1.236 2016/08/25 10:50:18 brouard | |
| *** empty log message *** | |
| Revision 1.235 2016/08/25 06:59:23 brouard | |
| *** empty log message *** | |
| Revision 1.234 2016/08/23 16:51:20 brouard | |
| *** empty log message *** | |
| Revision 1.233 2016/08/23 07:40:50 brouard | |
| Summary: not working | |
| Revision 1.232 2016/08/22 14:20:21 brouard | |
| Summary: not working | |
| Revision 1.231 2016/08/22 07:17:15 brouard | |
| Summary: not working | |
| Revision 1.230 2016/08/22 06:55:53 brouard | |
| Summary: Not working | |
| Revision 1.229 2016/07/23 09:45:53 brouard | |
| Summary: Completing for func too | |
| Revision 1.228 2016/07/22 17:45:30 brouard | |
| Summary: Fixing some arrays, still debugging | |
| Revision 1.226 2016/07/12 18:42:34 brouard | |
| Summary: temp | |
| Revision 1.225 2016/07/12 08:40:03 brouard | Revision 1.225 2016/07/12 08:40:03 brouard | 
| Summary: saving but not running | Summary: saving but not running | 
| Line 636 | Line 666 | 
| Short summary of the programme: | Short summary of the programme: | 
| This program computes Healthy Life Expectancies from | This program computes Healthy Life Expectancies or State-specific | 
| cross-longitudinal data. Cross-longitudinal data consist in: -1- a | (if states aren't health statuses) Expectancies from | 
| first survey ("cross") where individuals from different ages are | cross-longitudinal data. Cross-longitudinal data consist in: | 
| interviewed on their health status or degree of disability (in the | |
| case of a health survey which is our main interest) -2- at least a | -1- a first survey ("cross") where individuals from different ages | 
| second wave of interviews ("longitudinal") which measure each change | are interviewed on their health status or degree of disability (in | 
| (if any) in individual health status. Health expectancies are | the case of a health survey which is our main interest) | 
| computed from the time spent in each health state according to a | |
| model. More health states you consider, more time is necessary to reach the | -2- at least a second wave of interviews ("longitudinal") which | 
| Maximum Likelihood of the parameters involved in the model. The | measure each change (if any) in individual health status. Health | 
| simplest model is the multinomial logistic model where pij is the | expectancies are computed from the time spent in each health state | 
| probability to be observed in state j at the second wave | according to a model. More health states you consider, more time is | 
| conditional to be observed in state i at the first wave. Therefore | necessary to reach the Maximum Likelihood of the parameters involved | 
| the model is: log(pij/pii)= aij + bij*age+ cij*sex + etc , where | in the model. The simplest model is the multinomial logistic model | 
| 'age' is age and 'sex' is a covariate. If you want to have a more | where pij is the probability to be observed in state j at the second | 
| complex model than "constant and age", you should modify the program | wave conditional to be observed in state i at the first | 
| where the markup *Covariates have to be included here again* invites | wave. Therefore the model is: log(pij/pii)= aij + bij*age+ cij*sex + | 
| you to do it. More covariates you add, slower the | etc , where 'age' is age and 'sex' is a covariate. If you want to | 
| have a more complex model than "constant and age", you should modify | |
| the program where the markup *Covariates have to be included here | |
| again* invites you to do it. More covariates you add, slower the | |
| convergence. | convergence. | 
| The advantage of this computer programme, compared to a simple | The advantage of this computer programme, compared to a simple | 
| Line 675 | Line 708 | 
| of the life expectancies. It also computes the period (stable) prevalence. | of the life expectancies. It also computes the period (stable) prevalence. | 
| Back prevalence and projections: | Back prevalence and projections: | 
| - back_prevalence_limit(double *p, double **bprlim, double ageminpar, double agemaxpar, double ftolpl, int *ncvyearp, double dateprev1,double dateprev2, int firstpass, int lastpass, int mobilavproj) | |
| Computes the back prevalence limit for any combination of covariate values k | - back_prevalence_limit(double *p, double **bprlim, double ageminpar, | 
| at any age between ageminpar and agemaxpar and returns it in **bprlim. In the loops, | double agemaxpar, double ftolpl, int *ncvyearp, double | 
| - **bprevalim(**bprlim, ***mobaverage, nlstate, *p, age, **oldm, **savm, **dnewm, **doldm, **dsavm, ftolpl, ncvyearp, k); | dateprev1,double dateprev2, int firstpass, int lastpass, int | 
| - hBijx Back Probability to be in state i at age x-h being in j at x | mobilavproj) | 
| Computes the back prevalence limit for any combination of | |
| covariate values k at any age between ageminpar and agemaxpar and | |
| returns it in **bprlim. In the loops, | |
| - **bprevalim(**bprlim, ***mobaverage, nlstate, *p, age, **oldm, | |
| **savm, **dnewm, **doldm, **dsavm, ftolpl, ncvyearp, k); | |
| - hBijx Back Probability to be in state i at age x-h being in j at x | |
| Computes for any combination of covariates k and any age between bage and fage | Computes for any combination of covariates k and any age between bage and fage | 
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | 
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; | 
| - hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); | |
| - hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); | |
| Computes the transition matrix starting at age 'age' over | Computes the transition matrix starting at age 'age' over | 
| 'nhstepm*hstepm*stepm' months (i.e. until | 'nhstepm*hstepm*stepm' months (i.e. until | 
| age (in years) age+nhstepm*hstepm*stepm/12) by multiplying | age (in years) age+nhstepm*hstepm*stepm/12) by multiplying | 
| nhstepm*hstepm matrices. Returns p3mat[i][j][h] after calling | nhstepm*hstepm matrices. | 
| p3mat[i][j][h]=matprod2(newm, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, dnewm, doldm, dsavm,ij),\ | |
| 1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); | Returns p3mat[i][j][h] after calling | 
| p3mat[i][j][h]=matprod2(newm, | |
| bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, dnewm, doldm, | |
| dsavm,ij),\ 1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, | |
| oldm); | |
| Important routines | |
| - func (or funcone), computes logit (pij) distinguishing | |
| o fixed variables (single or product dummies or quantitative); | |
| o varying variables by: | |
| (1) wave (single, product dummies, quantitative), | |
| (2) by age (can be month) age (done), age*age (done), age*Vn where Vn can be: | |
| % fixed dummy (treated) or quantitative (not done because time-consuming); | |
| % varying dummy (not done) or quantitative (not done); | |
| - Tricode which tests the modality of dummy variables (in order to warn with wrong or empty modalities) | |
| and returns the number of efficient covariates cptcoveff and modalities nbcode[Tvar[k]][1]= 0 and nbcode[Tvar[k]][2]= 1 usually. | |
| - printinghtml which outputs results like life expectancy in and from a state for a combination of modalities of dummy variables | |
| o There are 2*cptcoveff combinations of (0,1) for cptcoveff variables. Outputting only combinations with people, éliminating 1 1 if | |
| race White (0 0), Black vs White (1 0), Hispanic (0 1) and 1 1 being meaningless. | |
| Authors: Nicolas Brouard (brouard@ined.fr) and Agnès Lièvre (lievre@ined.fr). | Authors: Nicolas Brouard (brouard@ined.fr) and Agnès Lièvre (lievre@ined.fr). | 
| Institut national d'études démographiques, Paris. | Institut national d'études démographiques, Paris. | 
| This software have been partly granted by Euro-REVES, a concerted action | This software have been partly granted by Euro-REVES, a concerted action | 
| Line 761 Back prevalence and projections: | Line 825 Back prevalence and projections: | 
| #include <stdio.h> | #include <stdio.h> | 
| #include <stdlib.h> | #include <stdlib.h> | 
| #include <string.h> | #include <string.h> | 
| #include <ctype.h> | |
| #ifdef _WIN32 | #ifdef _WIN32 | 
| #include <io.h> | #include <io.h> | 
| Line 861 int cptcovsnq=0; /**< cptcovsnq number o | Line 926 int cptcovsnq=0; /**< cptcovsnq number o | 
| int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */ | int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */ | 
| int cptcovprodnoage=0; /**< Number of covariate products without age */ | int cptcovprodnoage=0; /**< Number of covariate products without age */ | 
| int cptcoveff=0; /* Total number of covariates to vary for printing results */ | int cptcoveff=0; /* Total number of covariates to vary for printing results */ | 
| int ncoveff=0; /* Total number of effective covariates in the model */ | int ncovf=0; /* Total number of effective fixed covariates (dummy or quantitative) in the model */ | 
| int ncovv=0; /* Total number of effective (wave) varying covariates (dummy or quantitative) in the model */ | |
| int ncova=0; /* Total number of effective (wave and stepm) varying with age covariates (dummy of quantitative) in the model */ | |
| int nsd=0; /**< Total number of single dummy variables (output) */ | |
| int nsq=0; /**< Total number of single quantitative variables (output) */ | |
| int ncoveff=0; /* Total number of effective fixed dummy covariates in the model */ | |
| int nqfveff=0; /**< nqfveff Number of Quantitative Fixed Variables Effective */ | int nqfveff=0; /**< nqfveff Number of Quantitative Fixed Variables Effective */ | 
| int ntveff=0; /**< ntveff number of effective time varying variables */ | int ntveff=0; /**< ntveff number of effective time varying variables */ | 
| int nqtveff=0; /**< ntqveff number of effective time varying quantitative variables */ | int nqtveff=0; /**< ntqveff number of effective time varying quantitative variables */ | 
| Line 886 int **dh; /* dh[mi][i] is number of step | Line 956 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. */ | 
| int countcallfunc=0; /* Count the number of calls to func */ | int countcallfunc=0; /* Count the number of calls to func */ | 
| int selected(int kvar); /* Is covariate kvar selected for printing results */ | |
| double jmean=1; /* Mean space between 2 waves */ | double jmean=1; /* Mean space between 2 waves */ | 
| double **matprod2(); /* test */ | double **matprod2(); /* test */ | 
| double **oldm, **newm, **savm; /* Working pointers to matrices */ | double **oldm, **newm, **savm; /* Working pointers to matrices */ | 
| Line 916 char fileresv[FILENAMELENGTH]; | Line 988 char fileresv[FILENAMELENGTH]; | 
| FILE *ficresvpl; | FILE *ficresvpl; | 
| char fileresvpl[FILENAMELENGTH]; | char fileresvpl[FILENAMELENGTH]; | 
| char title[MAXLINE]; | char title[MAXLINE]; | 
| char model[MAXLINE]; /**< The model line */ | |
| char optionfile[FILENAMELENGTH], datafile[FILENAMELENGTH], filerespl[FILENAMELENGTH], fileresplb[FILENAMELENGTH]; | char optionfile[FILENAMELENGTH], datafile[FILENAMELENGTH], filerespl[FILENAMELENGTH], fileresplb[FILENAMELENGTH]; | 
| char plotcmd[FILENAMELENGTH], pplotcmd[FILENAMELENGTH]; | char plotcmd[FILENAMELENGTH], pplotcmd[FILENAMELENGTH]; | 
| char tmpout[FILENAMELENGTH], tmpout2[FILENAMELENGTH]; | char tmpout[FILENAMELENGTH], tmpout2[FILENAMELENGTH]; | 
| Line 1015 double ***cotvar; /* Time varying covari | Line 1088 double ***cotvar; /* Time varying covari | 
| double ***cotqvar; /* Time varying quantitative covariate itqv */ | double ***cotqvar; /* Time varying quantitative covariate itqv */ | 
| double idx; | double idx; | 
| int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */ | int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */ | 
| int *Typevar; /**< 1 for qualitative fixed, 2 for quantitative fixed, 3 for qualitive varying, 4 for quanti varying*/ | /* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | 
| /*k 1 2 3 4 5 6 7 8 9 */ | |
| /*Tvar[k]= 5 4 3 6 5 2 7 1 1 */ | |
| /* Tndvar[k] 1 2 3 4 5 */ | |
| /*TDvar 4 3 6 7 1 */ /* For outputs only; combination of dummies fixed or varying */ | |
| /* Tns[k] 1 2 2 4 5 */ /* Number of single cova */ | |
| /* TvarsD[k] 1 2 3 */ /* Number of single dummy cova */ | |
| /* TvarsDind 2 3 9 */ /* position K of single dummy cova */ | |
| /* TvarsQ[k] 1 2 */ /* Number of single quantitative cova */ | |
| /* TvarsQind 1 6 */ /* position K of single quantitative cova */ | |
| /* Tprod[i]=k 4 7 */ | |
| /* Tage[i]=k 5 8 */ | |
| /* */ | |
| /* Type */ | |
| /* V 1 2 3 4 5 */ | |
| /* F F V V V */ | |
| /* D Q D D Q */ | |
| /* */ | |
| int *TvarsD; | |
| int *TvarsDind; | |
| int *TvarsQ; | |
| int *TvarsQind; | |
| #define MAXRESULTLINES 10 | |
| int nresult=0; | |
| int TKresult[MAXRESULTLINES]; | |
| double Tresult[MAXRESULTLINES][NCOVMAX];/* For dummy variable , value (output) */ | |
| int Tvresult[MAXRESULTLINES][NCOVMAX]; /* For dummy variable , variable # (output) */ | |
| double Tqresult[MAXRESULTLINES][NCOVMAX]; /* For quantitative variable , value (output) */ | |
| int Tvqresult[MAXRESULTLINES][NCOVMAX]; /* For quantitative variable , variable # (output) */ | |
| /* int *TDvar; /\**< TDvar[1]=4, TDvarF[2]=3, TDvar[3]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 *\/ */ | |
| int *TvarF; /**< TvarF[1]=Tvar[6]=2, TvarF[2]=Tvar[7]=7, TvarF[3]=Tvar[9]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| int *TvarFind; /**< TvarFind[1]=6, TvarFind[2]=7, Tvarind[3]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| int *TvarV; /**< TvarV[1]=Tvar[1]=5, TvarV[2]=Tvar[2]=4 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| int *TvarVind; /**< TvarVind[1]=1, TvarVind[2]=2 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| int *TvarA; /**< TvarA[1]=Tvar[5]=5, TvarA[2]=Tvar[8]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| int *TvarAind; /**< TvarindA[1]=5, TvarAind[2]=8 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| int *TvarFD; /**< TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| int *TvarFDind; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| int *TvarFQ; /* TvarFQ[1]=V2 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */ | |
| int *TvarFQind; /* TvarFQind[1]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */ | |
| int *TvarVD; /* TvarVD[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */ | |
| int *TvarVDind; /* TvarVDind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */ | |
| int *TvarVQ; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ | |
| int *TvarVQind; /* TvarVQind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ | |
| int *Tvarsel; /**< Selected covariates for output */ | |
| double *Tvalsel; /**< Selected modality value of covariate for output */ | |
| int *Typevar; /**< 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product */ | |
| int *Fixed; /** Fixed[k] 0=fixed, 1 varying, 2 fixed with age product, 3 varying with age product */ | |
| int *Dummy; /** Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product */ | |
| int *Tage; | int *Tage; | 
| int anyvaryingduminmodel=0; /**< Any varying dummy in Model=1 yes, 0 no, to avoid a loop on waves in freq */ | |
| int *Tmodelind; /** Tmodelind[Tvaraff[3]]=9 for V1 position,Tvaraff[1]@9={4, 3, 1, 0, 0, 0, 0, 0, 0}, model=V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1*/ | |
| int *TmodelInvind; /** Tmodelind[Tvaraff[3]]=9 for V1 position,Tvaraff[1]@9={4, 3, 1, 0, 0, 0, 0, 0, 0}, model=V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1*/ | |
| int *TmodelInvQind; /** Tmodelqind[1]=1 for V5(quantitative varying) position,Tvaraff[1]@9={4, 3, 1, 0, 0, 0, 0, 0, 0}, model=V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| int *Ndum; /** Freq of modality (tricode */ | 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, *invalidvarcomb; | int **Tvard; | 
| int *Tprod;/**< Gives the k position of the k1 product */ | |
| int *Tposprod; /**< Gives the k1 product from the k position */ | |
| /* Tprod[k1=1]=3(=V1*V4) for V2+V1+V1*V4+age*V3 | |
| if V2+V1+V1*V4+age*V3+V3*V2 TProd[k1=2]=5 (V3*V2) | |
| Tposprod[k]=k1 , Tposprod[3]=1, Tposprod[5]=2 | |
| */ | |
| int cptcovprod, *Tvaraff, *invalidvarcomb; | |
| double *lsurv, *lpop, *tpop; | double *lsurv, *lpop, *tpop; | 
| #define FD 1; /* Fixed dummy covariate */ | |
| #define FQ 2; /* Fixed quantitative covariate */ | |
| #define FP 3; /* Fixed product covariate */ | |
| #define FPDD 7; /* Fixed product dummy*dummy covariate */ | |
| #define FPDQ 8; /* Fixed product dummy*quantitative covariate */ | |
| #define FPQQ 9; /* Fixed product quantitative*quantitative covariate */ | |
| #define VD 10; /* Varying dummy covariate */ | |
| #define VQ 11; /* Varying quantitative covariate */ | |
| #define VP 12; /* Varying product covariate */ | |
| #define VPDD 13; /* Varying product dummy*dummy covariate */ | |
| #define VPDQ 14; /* Varying product dummy*quantitative covariate */ | |
| #define VPQQ 15; /* Varying product quantitative*quantitative covariate */ | |
| #define APFD 16; /* Age product * fixed dummy covariate */ | |
| #define APFQ 17; /* Age product * fixed quantitative covariate */ | |
| #define APVD 18; /* Age product * varying dummy covariate */ | |
| #define APVQ 19; /* Age product * varying quantitative covariate */ | |
| #define FTYPE 1; /* Fixed covariate */ | |
| #define VTYPE 2; /* Varying covariate (loop in wave) */ | |
| #define ATYPE 2; /* Age product covariate (loop in dh within wave)*/ | |
| struct kmodel{ | |
| int maintype; /* main type */ | |
| int subtype; /* subtype */ | |
| }; | |
| struct kmodel modell[NCOVMAX]; | |
| double ftol=FTOL; /**< Tolerance for computing Max Likelihood */ | double ftol=FTOL; /**< Tolerance for computing Max Likelihood */ | 
| double ftolhess; /**< Tolerance for computing hessian */ | double ftolhess; /**< Tolerance for computing hessian */ | 
| Line 1217 int nbocc(char *s, char occ) | Line 1379 int nbocc(char *s, char occ) | 
| i=0; | i=0; | 
| lg=strlen(s); | lg=strlen(s); | 
| for(i=0; i<= lg; i++) { | for(i=0; i<= lg; i++) { | 
| if (s[i] == occ ) j++; | if (s[i] == occ ) j++; | 
| } | } | 
| return j; | return j; | 
| } | } | 
| Line 2108 void powell(double p[], double **xi, int | Line 2270 void powell(double p[], double **xi, int | 
| if (directest < 0.0) { /* Then we use it for new direction */ | if (directest < 0.0) { /* Then we use it for new direction */ | 
| #endif | #endif | 
| #ifdef DEBUGLINMIN | #ifdef DEBUGLINMIN | 
| printf("Before linmin in direction P%d-P0\n",n); | printf("Before linmin in direction P%d-P0\n",n); | 
| for (j=1;j<=n;j++) { | for (j=1;j<=n;j++) { | 
| printf(" Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | printf(" Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | 
| fprintf(ficlog," Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | fprintf(ficlog," Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | 
| if(j % ncovmodel == 0){ | if(j % ncovmodel == 0){ | 
| printf("\n"); | printf("\n"); | 
| fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); | 
| } | } | 
| } | } | 
| #endif | #endif | 
| #ifdef LINMINORIGINAL | #ifdef LINMINORIGINAL | 
| linmin(p,xit,n,fret,func); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/ | linmin(p,xit,n,fret,func); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/ | 
| #else | #else | 
| linmin(p,xit,n,fret,func,&flat); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/ | linmin(p,xit,n,fret,func,&flat); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/ | 
| flatdir[i]=flat; /* Function is vanishing in that direction i */ | flatdir[i]=flat; /* Function is vanishing in that direction i */ | 
| #endif | #endif | 
| #ifdef DEBUGLINMIN | #ifdef DEBUGLINMIN | 
| for (j=1;j<=n;j++) { | for (j=1;j<=n;j++) { | 
| printf("After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | printf("After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | 
| fprintf(ficlog,"After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | fprintf(ficlog,"After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); | 
| if(j % ncovmodel == 0){ | if(j % ncovmodel == 0){ | 
| printf("\n"); | printf("\n"); | 
| fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); | 
| } | } | 
| } | } | 
| #endif | #endif | 
| for (j=1;j<=n;j++) { | for (j=1;j<=n;j++) { | 
| xi[j][ibig]=xi[j][n]; /* Replace direction with biggest decrease by last direction n */ | xi[j][ibig]=xi[j][n]; /* Replace direction with biggest decrease by last direction n */ | 
| xi[j][n]=xit[j]; /* and this nth direction by the by the average p_0 p_n */ | xi[j][n]=xit[j]; /* and this nth direction by the by the average p_0 p_n */ | 
| } | } | 
| #ifdef LINMINORIGINAL | #ifdef LINMINORIGINAL | 
| #else | #else | 
| for (j=1, flatd=0;j<=n;j++) { | for (j=1, flatd=0;j<=n;j++) { | 
| if(flatdir[j]>0) | if(flatdir[j]>0) | 
| flatd++; | flatd++; | 
| } | } | 
| if(flatd >0){ | if(flatd >0){ | 
| printf("%d flat directions\n",flatd); | printf("%d flat directions\n",flatd); | 
| fprintf(ficlog,"%d flat directions\n",flatd); | fprintf(ficlog,"%d flat directions\n",flatd); | 
| for (j=1;j<=n;j++) { | for (j=1;j<=n;j++) { | 
| if(flatdir[j]>0){ | if(flatdir[j]>0){ | 
| printf("%d ",j); | printf("%d ",j); | 
| fprintf(ficlog,"%d ",j); | fprintf(ficlog,"%d ",j); | 
| } | } | 
| } | } | 
| printf("\n"); | printf("\n"); | 
| fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); | 
| } | } | 
| #endif | #endif | 
| printf("Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig); | printf("Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig); | 
| fprintf(ficlog,"Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig); | fprintf(ficlog,"Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig); | 
| #ifdef DEBUG | #ifdef DEBUG | 
| printf("Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); | printf("Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); | 
| fprintf(ficlog,"Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); | fprintf(ficlog,"Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); | 
| for(j=1;j<=n;j++){ | for(j=1;j<=n;j++){ | 
| printf(" %lf",xit[j]); | printf(" %lf",xit[j]); | 
| fprintf(ficlog," %lf",xit[j]); | fprintf(ficlog," %lf",xit[j]); | 
| } | } | 
| printf("\n"); | printf("\n"); | 
| fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); | 
| #endif | #endif | 
| } /* end of t or directest negative */ | } /* end of t or directest negative */ | 
| #ifdef POWELLNOF3INFF1TEST | #ifdef POWELLNOF3INFF1TEST | 
| #else | #else | 
| } /* end if (fptt < fp) */ | } /* end if (fptt < fp) */ | 
| #endif | #endif | 
| #ifdef NODIRECTIONCHANGEDUNTILNITER /* No change in drections until some iterations are done */ | #ifdef NODIRECTIONCHANGEDUNTILNITER /* No change in drections until some iterations are done */ | 
| } /*NODIRECTIONCHANGEDUNTILNITER No change in drections until some iterations are done */ | } /*NODIRECTIONCHANGEDUNTILNITER No change in drections until some iterations are done */ | 
| #else | #else | 
| #endif | #endif | 
| } /* loop iteration */ | } /* loop iteration */ | 
| } | } | 
| /**** Prevalence limit (stable or period prevalence) ****************/ | /**** Prevalence limit (stable or period prevalence) ****************/ | 
| double **prevalim(double **prlim, int nlstate, double x[], double age, double **oldm, double **savm, double ftolpl, int *ncvyear, int ij) | double **prevalim(double **prlim, int nlstate, double x[], double age, double **oldm, double **savm, double ftolpl, int *ncvyear, int ij, int nres) | 
| { | { | 
| /* Computes the prevalence limit in each live state at age x and for covariate ij by left multiplying the unit | /* Computes the prevalence limit in each live state at age x and for covariate combination ij | 
| matrix by transitions matrix until convergence is reached with precision ftolpl */ | (and selected quantitative values in nres) | 
| by left multiplying the unit | |
| matrix by transitions matrix until convergence is reached with precision ftolpl */ | |
| /* Wx= Wx-1 Px-1= Wx-2 Px-2 Px-1 = Wx-n Px-n ... Px-2 Px-1 I */ | /* Wx= Wx-1 Px-1= Wx-2 Px-2 Px-1 = Wx-n Px-n ... Px-2 Px-1 I */ | 
| /* Wx is row vector: population in state 1, population in state 2, population dead */ | /* Wx is row vector: population in state 1, population in state 2, population dead */ | 
| /* or prevalence in state 1, prevalence in state 2, 0 */ | /* or prevalence in state 1, prevalence in state 2, 0 */ | 
| Line 2206 double **prevalim(double **prlim, int nl | Line 2370 double **prevalim(double **prlim, int nl | 
| /* {0.51571254859325999, 0.4842874514067399, */ | /* {0.51571254859325999, 0.4842874514067399, */ | 
| /* 0.51326036147820708, 0.48673963852179264} */ | /* 0.51326036147820708, 0.48673963852179264} */ | 
| /* If we start from prlim again, prlim tends to a constant matrix */ | /* If we start from prlim again, prlim tends to a constant matrix */ | 
| int i, ii,j,k; | int i, ii,j,k; | 
| double *min, *max, *meandiff, maxmax,sumnew=0.; | double *min, *max, *meandiff, maxmax,sumnew=0.; | 
| /* double **matprod2(); */ /* test */ | /* double **matprod2(); */ /* test */ | 
| Line 2236 double **prevalim(double **prlim, int nl | Line 2400 double **prevalim(double **prlim, int nl | 
| cov[2]=agefin; | cov[2]=agefin; | 
| if(nagesqr==1) | if(nagesqr==1) | 
| cov[3]= agefin*agefin;; | cov[3]= agefin*agefin;; | 
| for (k=1; k<=cptcovn;k++) { | for (k=1; k<=nsd;k++) { /* For single dummy covariates only */ | 
| /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; */ | /* Here comes the value of the covariate 'ij' after renumbering k with single dummy covariates */ | 
| /* Here comes the value of the covariate 'ij' */ | cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)]; | 
| cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; | /* printf("prevalim Dummy combi=%d k=%d TvarsD[%d]=V%d TvarsDind[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); */ | 
| /* printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtabm(ij,Tvar[k])],cov[2+k], ij, k, codtabm(ij,Tvar[k])]); */ | } | 
| for (k=1; k<=nsq;k++) { /* For single varying covariates only */ | |
| /* Here comes the value of quantitative after renumbering k with single quantitative covariates */ | |
| cov[2+nagesqr+TvarsQind[k]]=Tqresult[nres][k]; | |
| /* printf("prevalim Quantitative k=%d TvarsQind[%d]=%d, TvarsQ[%d]=V%d,Tqresult[%d][%d]=%f\n",k,k,TvarsQind[k],k,TvarsQ[k],nres,k,Tqresult[nres][k]); */ | |
| } | } | 
| /*wrong? for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | for (k=1; k<=cptcovage;k++){ | 
| /* for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]*cov[2]; */ | if(Dummy[Tvar[Tage[k]]]){ | 
| for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,k)]*cov[2]; | cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; | 
| for (k=1; k<=cptcovprod;k++) /* Useless */ | } else{ | 
| /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])] * nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */ | cov[2+nagesqr+Tage[k]]=Tqresult[nres][k]; | 
| } | |
| /* printf("prevalim Age combi=%d k=%d Tage[%d]=V%d Tqresult[%d][%d]=%f\n",ij,k,k,Tage[k],nres,k,Tqresult[nres][k]); */ | |
| } | |
| for (k=1; k<=cptcovprod;k++){ /* */ | |
| /* printf("prevalim Prod ij=%d k=%d Tprod[%d]=%d Tvard[%d][1]=V%d, Tvard[%d][2]=V%d\n",ij,k,k,Tprod[k], k,Tvard[k][1], k,Tvard[k][2]); */ | |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; | cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; | 
| } | |
| /*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]);*/ | 
| Line 2370 Earliest age to start was %d-%d=%d, ncvl | Line 2543 Earliest age to start was %d-%d=%d, ncvl | 
| cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; | cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; | 
| /* printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtabm(ij,Tvar[k])],cov[2+k], ij, k, codtabm(ij,Tvar[k])]); */ | /* printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtabm(ij,Tvar[k])],cov[2+k], ij, k, codtabm(ij,Tvar[k])]); */ | 
| } | } | 
| /*wrong? for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | |
| /* for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]*cov[2]; */ | |
| for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,k)]*cov[2]; | for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,k)]*cov[2]; | 
| for (k=1; k<=cptcovprod;k++) /* Useless */ | for (k=1; k<=cptcovprod;k++) /* Useless */ | 
| /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])] * nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */ | /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])] * nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */ | 
| Line 2398 Earliest age to start was %d-%d=%d, ncvl | Line 2569 Earliest age to start was %d-%d=%d, ncvl | 
| } | } | 
| for(j=1; j<=nlstate; j++){ | for(j=1; j<=nlstate; j++){ | 
| for(i=1;i<=nlstate;i++){ | for(i=1;i<=nlstate;i++){ | 
| /* bprlim[i][j]= newm[i][j]/(1-sumnew); */ | /* bprlim[i][j]= newm[i][j]/(1-sumnew); */ | 
| bprlim[i][j]= newm[i][j]; | bprlim[i][j]= newm[i][j]; | 
| max[i]=FMAX(max[i],bprlim[i][j]); /* Max in line */ | max[i]=FMAX(max[i],bprlim[i][j]); /* Max in line */ | 
| min[i]=FMIN(min[i],bprlim[i][j]); | min[i]=FMIN(min[i],bprlim[i][j]); | 
| } | } | 
| } | } | 
| Line 2596 double **bpmij(double **ps, double *cov, | Line 2767 double **bpmij(double **ps, double *cov, | 
| /*double t34;*/ | /*double t34;*/ | 
| int i,j, nc, ii, jj; | int i,j, nc, ii, jj; | 
| for(i=1; i<= nlstate; i++){ | for(i=1; i<= nlstate; i++){ | 
| for(j=1; j<i;j++){ | for(j=1; j<i;j++){ | 
| for (nc=1, lnpijopii=0.;nc <=ncovmodel; nc++){ | for (nc=1, lnpijopii=0.;nc <=ncovmodel; nc++){ | 
| /*lnpijopii += param[i][j][nc]*cov[nc];*/ | /*lnpijopii += param[i][j][nc]*cov[nc];*/ | 
| lnpijopii += x[nc+((i-1)*(nlstate+ndeath-1)+j-1)*ncovmodel]*cov[nc]; | lnpijopii += x[nc+((i-1)*(nlstate+ndeath-1)+j-1)*ncovmodel]*cov[nc]; | 
| /* printf("Int j<i s1=%.17e, lnpijopii=%.17e\n",s1,lnpijopii); */ | /* printf("Int j<i s1=%.17e, lnpijopii=%.17e\n",s1,lnpijopii); */ | 
| } | } | 
| ps[i][j]=lnpijopii; /* In fact ln(pij/pii) */ | ps[i][j]=lnpijopii; /* In fact ln(pij/pii) */ | 
| /* printf("s1=%.17e, lnpijopii=%.17e\n",s1,lnpijopii); */ | /* printf("s1=%.17e, lnpijopii=%.17e\n",s1,lnpijopii); */ | 
| } | } | 
| for(j=i+1; j<=nlstate+ndeath;j++){ | for(j=i+1; j<=nlstate+ndeath;j++){ | 
| for (nc=1, lnpijopii=0.;nc <=ncovmodel; nc++){ | for (nc=1, lnpijopii=0.;nc <=ncovmodel; nc++){ | 
| /*lnpijopii += x[(i-1)*nlstate*ncovmodel+(j-2)*ncovmodel+nc+(i-1)*(ndeath-1)*ncovmodel]*cov[nc];*/ | /*lnpijopii += x[(i-1)*nlstate*ncovmodel+(j-2)*ncovmodel+nc+(i-1)*(ndeath-1)*ncovmodel]*cov[nc];*/ | 
| lnpijopii += x[nc + ((i-1)*(nlstate+ndeath-1)+(j-2))*ncovmodel]*cov[nc]; | lnpijopii += x[nc + ((i-1)*(nlstate+ndeath-1)+(j-2))*ncovmodel]*cov[nc]; | 
| /* printf("Int j>i s1=%.17e, lnpijopii=%.17e %lx %lx\n",s1,lnpijopii,s1,lnpijopii); */ | /* printf("Int j>i s1=%.17e, lnpijopii=%.17e %lx %lx\n",s1,lnpijopii,s1,lnpijopii); */ | 
| } | } | 
| ps[i][j]=lnpijopii; /* In fact ln(pij/pii) */ | ps[i][j]=lnpijopii; /* In fact ln(pij/pii) */ | 
| } | } | 
| } | } | 
| for(i=1; i<= nlstate; i++){ | for(i=1; i<= nlstate; i++){ | 
| s1=0; | s1=0; | 
| for(j=1; j<i; j++){ | for(j=1; j<i; j++){ | 
| s1+=exp(ps[i][j]); /* In fact sums pij/pii */ | s1+=exp(ps[i][j]); /* In fact sums pij/pii */ | 
| /*printf("debug1 %d %d ps=%lf exp(ps)=%lf s1+=%lf\n",i,j,ps[i][j],exp(ps[i][j]),s1); */ | /*printf("debug1 %d %d ps=%lf exp(ps)=%lf s1+=%lf\n",i,j,ps[i][j],exp(ps[i][j]),s1); */ | 
| } | } | 
| for(j=i+1; j<=nlstate+ndeath; j++){ | for(j=i+1; j<=nlstate+ndeath; j++){ | 
| s1+=exp(ps[i][j]); /* In fact sums pij/pii */ | s1+=exp(ps[i][j]); /* In fact sums pij/pii */ | 
| /*printf("debug2 %d %d ps=%lf exp(ps)=%lf s1+=%lf\n",i,j,ps[i][j],exp(ps[i][j]),s1); */ | /*printf("debug2 %d %d ps=%lf exp(ps)=%lf s1+=%lf\n",i,j,ps[i][j],exp(ps[i][j]),s1); */ | 
| } | } | 
| /* s1= sum_{j<>i} pij/pii=(1-pii)/pii and thus pii is known from s1 */ | /* s1= sum_{j<>i} pij/pii=(1-pii)/pii and thus pii is known from s1 */ | 
| ps[i][i]=1./(s1+1.); | ps[i][i]=1./(s1+1.); | 
| /* Computing other pijs */ | /* Computing other pijs */ | 
| for(j=1; j<i; j++) | for(j=1; j<i; j++) | 
| ps[i][j]= exp(ps[i][j])*ps[i][i]; | ps[i][j]= exp(ps[i][j])*ps[i][i]; | 
| for(j=i+1; j<=nlstate+ndeath; j++) | for(j=i+1; j<=nlstate+ndeath; j++) | 
| ps[i][j]= exp(ps[i][j])*ps[i][i]; | ps[i][j]= exp(ps[i][j])*ps[i][i]; | 
| /* ps[i][nlstate+1]=1.-s1- ps[i][i];*/ /* Sum should be 1 */ | /* ps[i][nlstate+1]=1.-s1- ps[i][i];*/ /* Sum should be 1 */ | 
| } /* end i */ | } /* end i */ | 
| for(ii=nlstate+1; ii<= nlstate+ndeath; ii++){ | for(ii=nlstate+1; ii<= nlstate+ndeath; ii++){ | 
| for(jj=1; jj<= nlstate+ndeath; jj++){ | for(jj=1; jj<= nlstate+ndeath; jj++){ | 
| ps[ii][jj]=0; | ps[ii][jj]=0; | 
| ps[ii][ii]=1; | ps[ii][ii]=1; | 
| } | } | 
| } | } | 
| /* Added for backcast */ /* Transposed matrix too */ | /* Added for backcast */ /* Transposed matrix too */ | 
| for(jj=1; jj<= nlstate+ndeath; jj++){ | for(jj=1; jj<= nlstate+ndeath; jj++){ | 
| s1=0.; | s1=0.; | 
| for(ii=1; ii<= nlstate+ndeath; ii++){ | for(ii=1; ii<= nlstate+ndeath; ii++){ | 
| s1+=ps[ii][jj]; | s1+=ps[ii][jj]; | 
| } | } | 
| for(ii=1; ii<= nlstate; ii++){ | for(ii=1; ii<= nlstate; ii++){ | 
| ps[ii][jj]=ps[ii][jj]/s1; | ps[ii][jj]=ps[ii][jj]/s1; | 
| } | } | 
| } | } | 
| /* Transposition */ | /* Transposition */ | 
| for(jj=1; jj<= nlstate+ndeath; jj++){ | for(jj=1; jj<= nlstate+ndeath; jj++){ | 
| for(ii=jj; ii<= nlstate+ndeath; ii++){ | for(ii=jj; ii<= nlstate+ndeath; ii++){ | 
| s1=ps[ii][jj]; | s1=ps[ii][jj]; | 
| ps[ii][jj]=ps[jj][ii]; | ps[ii][jj]=ps[jj][ii]; | 
| ps[jj][ii]=s1; | ps[jj][ii]=s1; | 
| } | } | 
| } | } | 
| /* 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(" pmij ps[%d][%d]=%lf ",ii,jj,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 2696 double **matprod2(double **out, double * | Line 2867 double **matprod2(double **out, double * | 
| /************* Higher Matrix Product ***************/ | /************* Higher Matrix Product ***************/ | 
| double ***hpxij(double ***po, int nhstepm, double age, int hstepm, double *x, int nlstate, int stepm, double **oldm, double **savm, int ij ) | double ***hpxij(double ***po, int nhstepm, double age, int hstepm, double *x, int nlstate, int stepm, double **oldm, double **savm, int ij, int nres ) | 
| { | { | 
| /* Computes the transition matrix starting at age 'age' and combination of covariate values corresponding to ij over | /* Computes the transition matrix starting at age 'age' and combination of covariate values corresponding to ij over | 
| 'nhstepm*hstepm*stepm' months (i.e. until | 'nhstepm*hstepm*stepm' months (i.e. until | 
| Line 2731 double ***hpxij(double ***po, int nhstep | Line 2902 double ***hpxij(double ***po, int nhstep | 
| agexact=age+((h-1)*hstepm + (d-1))*stepm/YEARM; /* age just before transition */ | agexact=age+((h-1)*hstepm + (d-1))*stepm/YEARM; /* age just before transition */ | 
| cov[2]=agexact; | cov[2]=agexact; | 
| if(nagesqr==1) | if(nagesqr==1) | 
| cov[3]= agexact*agexact; | cov[3]= agexact*agexact; | 
| for (k=1; k<=cptcovn;k++) | for (k=1; k<=nsd;k++) { /* For single dummy covariates only */ | 
| cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; | /* Here comes the value of the covariate 'ij' after renumbering k with single dummy covariates */ | 
| /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; */ | cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)]; | 
| for (k=1; k<=cptcovage;k++) /* Should start at cptcovn+1 */ | /* printf("hpxij Dummy combi=%d k=%d TvarsD[%d]=V%d TvarsDind[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); */ | 
| /* cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | } | 
| cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; | for (k=1; k<=nsq;k++) { /* For single varying covariates only */ | 
| /* cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k]])]*cov[2]; */ | /* Here comes the value of quantitative after renumbering k with single quantitative covariates */ | 
| for (k=1; k<=cptcovprod;k++) /* Useless because included in cptcovn */ | cov[2+nagesqr+TvarsQind[k]]=Tqresult[nres][k]; | 
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; | /* printf("hPxij Quantitative k=%d TvarsQind[%d]=%d, TvarsQ[%d]=V%d,Tqresult[%d][%d]=%f\n",k,k,TvarsQind[k],k,TvarsQ[k],nres,k,Tqresult[nres][k]); */ | 
| /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])]*nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */ | } | 
| for (k=1; k<=cptcovage;k++){ | |
| if(Dummy[Tvar[Tage[k]]]){ | |
| cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; | |
| } else{ | |
| cov[2+nagesqr+Tage[k]]=Tqresult[nres][k]; | |
| } | |
| /* printf("hPxij Age combi=%d k=%d Tage[%d]=V%d Tqresult[%d][%d]=%f\n",ij,k,k,Tage[k],nres,k,Tqresult[nres][k]); */ | |
| } | |
| for (k=1; k<=cptcovprod;k++){ /* */ | |
| /* printf("hPxij Prod ij=%d k=%d Tprod[%d]=%d Tvard[%d][1]=V%d, Tvard[%d][2]=V%d\n",ij,k,k,Tprod[k], k,Tvard[k][1], k,Tvard[k][2]); */ | |
| cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; | |
| } | |
| /* for (k=1; k<=cptcovn;k++) */ | |
| /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; */ | |
| /* for (k=1; k<=cptcovage;k++) /\* Should start at cptcovn+1 *\/ */ | |
| /* cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; */ | |
| /* for (k=1; k<=cptcovprod;k++) /\* Useless because included in cptcovn *\/ */ | |
| /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; */ | |
| /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/ | /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/ | 
| /*printf("h=%d d=%d age=%f cov=%f\n",h,d,age,cov[2]);*/ | /*printf("h=%d d=%d age=%f cov=%f\n",h,d,age,cov[2]);*/ | 
| /* right multiplication of oldm by the current matrix */ | /* right multiplication of oldm by the current matrix */ | 
| Line 2890 double ***hbxij(double ***po, int nhstep | Line 3079 double ***hbxij(double ***po, int nhstep | 
| /*************** log-likelihood *************/ | /*************** log-likelihood *************/ | 
| double func( double *x) | double func( double *x) | 
| { | { | 
| int i, ii, j, k, mi, d, kk; | int i, ii, j, k, mi, d, kk; | 
| int ioffset=0; | int ioffset=0; | 
| double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; | double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; | 
| double **out; | double **out; | 
| double sw; /* Sum of weights */ | double lli; /* Individual log likelihood */ | 
| double lli; /* Individual log likelihood */ | int s1, s2; | 
| int s1, s2; | int iv=0, iqv=0, itv=0, iqtv=0 ; /* Index of varying covariate, fixed quantitative cov, time varying covariate, quantitative time varying covariate */ | 
| int iv=0, iqv=0, itv=0, iqtv=0 ; /* Index of varying covariate, fixed quantitative cov, time varying covariate, quatitative time varying covariate */ | double bbh, survp; | 
| double bbh, survp; | long ipmx; | 
| long ipmx; | double agexact; | 
| double agexact; | /*extern weight */ | 
| /*extern weight */ | /* We are differentiating ll according to initial status */ | 
| /* We are differentiating ll according to initial status */ | /* for (i=1;i<=npar;i++) printf("%f ", x[i]);*/ | 
| /* for (i=1;i<=npar;i++) printf("%f ", x[i]);*/ | /*for(i=1;i<imx;i++) | 
| /*for(i=1;i<imx;i++) | printf(" %d\n",s[4][i]); | 
| printf(" %d\n",s[4][i]); | */ | 
| */ | |
| ++countcallfunc; | ++countcallfunc; | 
| cov[1]=1.; | cov[1]=1.; | 
| for(k=1; k<=nlstate; k++) ll[k]=0.; | for(k=1; k<=nlstate; k++) ll[k]=0.; | 
| ioffset=0; | ioffset=0; | 
| if(mle==1){ | if(mle==1){ | 
| for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | 
| /* Computes the values of the ncovmodel covariates of the model | /* Computes the values of the ncovmodel covariates of the model | 
| depending if the covariates are fixed or varying (age dependent) and stores them in cov[] | depending if the covariates are fixed or varying (age dependent) and stores them in cov[] | 
| Then computes with function pmij which return a matrix p[i][j] giving the elementary probability | Then computes with function pmij which return a matrix p[i][j] giving the elementary probability | 
| to be observed in j being in i according to the model. | to be observed in j being in i according to the model. | 
| */ | */ | 
| ioffset=2+nagesqr+cptcovage; | ioffset=2+nagesqr+cptcovage; | 
| /* for (k=1; k<=cptcovn;k++){ /\* Simple and product covariates without age* products *\/ */ | /* Fixed */ | 
| for (k=1; k<=ncoveff;k++){ /* Simple and product covariates without age* products */ | for (k=1; k<=ncovf;k++){ /* Simple and product fixed covariates without age* products */ | 
| cov[++ioffset]=covar[Tvar[k]][i]; | cov[ioffset+TvarFind[k]]=covar[Tvar[TvarFind[k]]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (k=6)*/ | 
| } | } | 
| for(iqv=1; iqv <= nqfveff; iqv++){ /* Quantitatives and Fixed covariates */ | /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] | 
| cov[++ioffset]=coqvar[iqv][i]; | is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2] | 
| } | has been calculated etc */ | 
| /* For an individual i, wav[i] gives the number of effective waves */ | |
| /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] | /* We compute the contribution to Likelihood of each effective transition | 
| is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2] | mw[mi][i] is real wave of the mi th effectve wave */ | 
| has been calculated etc */ | /* Then statuses are computed at each begin and end of an effective wave s1=s[ mw[mi][i] ][i]; | 
| /* For an individual i, wav[i] gives the number of effective waves */ | s2=s[mw[mi+1][i]][i]; | 
| /* We compute the contribution to Likelihood of each effective transition | And the iv th varying covariate is the cotvar[mw[mi+1][i]][iv][i] | 
| mw[mi][i] is real wave of the mi th effectve wave */ | But if the variable is not in the model TTvar[iv] is the real variable effective in the model: | 
| /* Then statuses are computed at each begin and end of an effective wave s1=s[ mw[mi][i] ][i]; | meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i] | 
| s2=s[mw[mi+1][i]][i]; | */ | 
| And the iv th varying covariate is the cotvar[mw[mi+1][i]][iv][i] | for(mi=1; mi<= wav[i]-1; mi++){ | 
| But if the variable is not in the model TTvar[iv] is the real variable effective in the model: | for(k=1; k <= ncovv ; k++){ /* Varying covariates (single and product but no age )*/ | 
| meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i] | cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]][i]; | 
| */ | } | 
| for(mi=1; mi<= wav[i]-1; mi++){ | for (ii=1;ii<=nlstate+ndeath;ii++) | 
| for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */ | for (j=1;j<=nlstate+ndeath;j++){ | 
| cov[ioffset+itv]=cotvar[mw[mi][i]][itv][i]; | oldm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| } | savm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */ | } | 
| if(cotqvar[mw[mi][i]][iqtv][i] == -1){ | for(d=0; d<dh[mi][i]; d++){ | 
| printf("i=%d, mi=%d, iqtv=%d, cotqvar[mw[mi][i]][iqtv][i]=%f",i,mi,iqtv,cotqvar[mw[mi][i]][iqtv][i]); | newm=savm; | 
| } | agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | 
| cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i]; | cov[2]=agexact; | 
| } | if(nagesqr==1) | 
| /* ioffset=2+nagesqr+cptcovn+nqv+ntv+nqtv; */ | cov[3]= agexact*agexact; /* Should be changed here */ | 
| for (ii=1;ii<=nlstate+ndeath;ii++) | for (kk=1; kk<=cptcovage;kk++) { | 
| for (j=1;j<=nlstate+ndeath;j++){ | cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */ | 
| oldm[ii][j]=(ii==j ? 1.0 : 0.0); | } | 
| savm[ii][j]=(ii==j ? 1.0 : 0.0); | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | 
| } | 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 
| for(d=0; d<dh[mi][i]; d++){ | savm=oldm; | 
| newm=savm; | oldm=newm; | 
| agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | } /* end mult */ | 
| cov[2]=agexact; | |
| if(nagesqr==1) | /*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */ | 
| cov[3]= agexact*agexact; /* Should be changed here */ | /* But now since version 0.9 we anticipate for bias at large stepm. | 
| for (kk=1; kk<=cptcovage;kk++) { | * If stepm is larger than one month (smallest stepm) and if the exact delay | 
| cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */ | * (in months) between two waves is not a multiple of stepm, we rounded to | 
| } | * the nearest (and in case of equal distance, to the lowest) interval but now | 
| out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | * we keep into memory the bias bh[mi][i] and also the previous matrix product | 
| 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | * (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the | 
| savm=oldm; | * probability in order to take into account the bias as a fraction of the way | 
| oldm=newm; | |
| } /* end mult */ | |
| /*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */ | |
| /* But now since version 0.9 we anticipate for bias at large stepm. | |
| * If stepm is larger than one month (smallest stepm) and if the exact delay | |
| * (in months) between two waves is not a multiple of stepm, we rounded to | |
| * the nearest (and in case of equal distance, to the lowest) interval but now | |
| * we keep into memory the bias bh[mi][i] and also the previous matrix product | |
| * (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the | |
| * probability in order to take into account the bias as a fraction of the way | |
| * from savm to out if bh is negative or even beyond if bh is positive. bh varies | * from savm to out if bh is negative or even beyond if bh is positive. bh varies | 
| * -stepm/2 to stepm/2 . | * -stepm/2 to stepm/2 . | 
| * For stepm=1 the results are the same as for previous versions of Imach. | * For stepm=1 the results are the same as for previous versions of Imach. | 
| * For stepm > 1 the results are less biased than in previous versions. | * For stepm > 1 the results are less biased than in previous versions. | 
| */ | */ | 
| s1=s[mw[mi][i]][i]; | s1=s[mw[mi][i]][i]; | 
| s2=s[mw[mi+1][i]][i]; | s2=s[mw[mi+1][i]][i]; | 
| bbh=(double)bh[mi][i]/(double)stepm; | bbh=(double)bh[mi][i]/(double)stepm; | 
| /* bias bh is positive if real duration | /* bias bh is positive if real duration | 
| * is higher than the multiple of stepm and negative otherwise. | * is higher than the multiple of stepm and negative otherwise. | 
| */ | */ | 
| /* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/ | /* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/ | 
| if( s2 > nlstate){ | if( s2 > nlstate){ | 
| /* i.e. if s2 is a death state and if the date of death is known | /* i.e. if s2 is a death state and if the date of death is known | 
| then the contribution to the likelihood is the probability to | then the contribution to the likelihood is the probability to | 
| die between last step unit time and current step unit time, | die between last step unit time and current step unit time, | 
| which is also equal to probability to die before dh | which is also equal to probability to die before dh | 
| minus probability to die before dh-stepm . | minus probability to die before dh-stepm . | 
| In version up to 0.92 likelihood was computed | In version up to 0.92 likelihood was computed | 
| as if date of death was unknown. Death was treated as any other | as if date of death was unknown. Death was treated as any other | 
| health state: the date of the interview describes the actual state | health state: the date of the interview describes the actual state | 
| and not the date of a change in health state. The former idea was | and not the date of a change in health state. The former idea was | 
| to consider that at each interview the state was recorded | to consider that at each interview the state was recorded | 
| (healthy, disable or death) and IMaCh was corrected; but when we | (healthy, disable or death) and IMaCh was corrected; but when we | 
| introduced the exact date of death then we should have modified | introduced the exact date of death then we should have modified | 
| the contribution of an exact death to the likelihood. This new | the contribution of an exact death to the likelihood. This new | 
| contribution is smaller and very dependent of the step unit | contribution is smaller and very dependent of the step unit | 
| stepm. It is no more the probability to die between last interview | stepm. It is no more the probability to die between last interview | 
| and month of death but the probability to survive from last | and month of death but the probability to survive from last | 
| interview up to one month before death multiplied by the | interview up to one month before death multiplied by the | 
| probability to die within a month. Thanks to Chris | probability to die within a month. Thanks to Chris | 
| Jackson for correcting this bug. Former versions increased | Jackson for correcting this bug. Former versions increased | 
| mortality artificially. The bad side is that we add another loop | mortality artificially. The bad side is that we add another loop | 
| which slows down the processing. The difference can be up to 10% | which slows down the processing. The difference can be up to 10% | 
| lower mortality. | lower mortality. | 
| */ | */ | 
| /* If, at the beginning of the maximization mostly, the | /* If, at the beginning of the maximization mostly, the | 
| cumulative probability or probability to be dead is | cumulative probability or probability to be dead is | 
| constant (ie = 1) over time d, the difference is equal to | constant (ie = 1) over time d, the difference is equal to | 
| 0. out[s1][3] = savm[s1][3]: probability, being at state | 0. out[s1][3] = savm[s1][3]: probability, being at state | 
| s1 at precedent wave, to be dead a month before current | s1 at precedent wave, to be dead a month before current | 
| wave is equal to probability, being at state s1 at | wave is equal to probability, being at state s1 at | 
| precedent wave, to be dead at mont of the current | precedent wave, to be dead at mont of the current | 
| wave. Then the observed probability (that this person died) | wave. Then the observed probability (that this person died) | 
| is null according to current estimated parameter. In fact, | is null according to current estimated parameter. In fact, | 
| it should be very low but not zero otherwise the log go to | it should be very low but not zero otherwise the log go to | 
| infinity. | infinity. | 
| */ | */ | 
| /* #ifdef INFINITYORIGINAL */ | /* #ifdef INFINITYORIGINAL */ | 
| /* lli=log(out[s1][s2] - savm[s1][s2]); */ | /* lli=log(out[s1][s2] - savm[s1][s2]); */ | 
| /* #else */ | /* #else */ | 
| Line 3037 double func( double *x) | Line 3214 double func( double *x) | 
| /* else */ | /* else */ | 
| /* lli=log(out[s1][s2] - savm[s1][s2]); */ | /* lli=log(out[s1][s2] - savm[s1][s2]); */ | 
| /* #endif */ | /* #endif */ | 
| lli=log(out[s1][s2] - savm[s1][s2]); | lli=log(out[s1][s2] - savm[s1][s2]); | 
| } else if ( s2==-1 ) { /* alive */ | } else if ( s2==-1 ) { /* alive */ | 
| for (j=1,survp=0. ; j<=nlstate; j++) | for (j=1,survp=0. ; j<=nlstate; j++) | 
| survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; | survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; | 
| /*survp += out[s1][j]; */ | /*survp += out[s1][j]; */ | 
| lli= log(survp); | lli= log(survp); | 
| } | } | 
| else if (s2==-4) { | else if (s2==-4) { | 
| for (j=3,survp=0. ; j<=nlstate; j++) | for (j=3,survp=0. ; j<=nlstate; j++) | 
| survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; | survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; | 
| lli= log(survp); | lli= log(survp); | 
| } | } | 
| else if (s2==-5) { | else if (s2==-5) { | 
| for (j=1,survp=0. ; j<=2; j++) | for (j=1,survp=0. ; j<=2; j++) | 
| survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; | survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; | 
| lli= log(survp); | lli= log(survp); | 
| } | } | 
| else{ | else{ | 
| lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ | lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ | 
| /* lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2]));*/ /* linear interpolation */ | /* lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2]));*/ /* linear interpolation */ | 
| } | } | 
| /*lli=(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]);*/ | /*lli=(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]);*/ | 
| /*if(lli ==000.0)*/ | /*if(lli ==000.0)*/ | 
| /*printf("bbh= %f lli=%f savm=%f out=%f %d\n",bbh,lli,savm[s1][s2], out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]],i); */ | /*printf("bbh= %f lli=%f savm=%f out=%f %d\n",bbh,lli,savm[s1][s2], out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]],i); */ | 
| ipmx +=1; | ipmx +=1; | 
| sw += weight[i]; | sw += weight[i]; | 
| ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | 
| /* if (lli < log(mytinydouble)){ */ | /* if (lli < log(mytinydouble)){ */ | 
| /* printf("Close to inf lli = %.10lf < %.10lf i= %d mi= %d, s[%d][i]=%d s1=%d s2=%d\n", lli,log(mytinydouble), i, mi,mw[mi][i], s[mw[mi][i]][i], s1,s2); */ | /* printf("Close to inf lli = %.10lf < %.10lf i= %d mi= %d, s[%d][i]=%d s1=%d s2=%d\n", lli,log(mytinydouble), i, mi,mw[mi][i], s[mw[mi][i]][i], s1,s2); */ | 
| /* fprintf(ficlog,"Close to inf lli = %.10lf i= %d mi= %d, s[mw[mi][i]][i]=%d\n", lli, i, mi,s[mw[mi][i]][i]); */ | /* fprintf(ficlog,"Close to inf lli = %.10lf i= %d mi= %d, s[mw[mi][i]][i]=%d\n", lli, i, mi,s[mw[mi][i]][i]); */ | 
| /* } */ | /* } */ | 
| } /* end of wave */ | } /* end of wave */ | 
| } /* end of individual */ | } /* end of individual */ | 
| } else if(mle==2){ | } else if(mle==2){ | 
| for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | 
| for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; | for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; | 
| for(mi=1; mi<= wav[i]-1; mi++){ | for(mi=1; mi<= wav[i]-1; mi++){ | 
| for (ii=1;ii<=nlstate+ndeath;ii++) | for (ii=1;ii<=nlstate+ndeath;ii++) | 
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ | 
| oldm[ii][j]=(ii==j ? 1.0 : 0.0); | oldm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| savm[ii][j]=(ii==j ? 1.0 : 0.0); | savm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| } | } | 
| for(d=0; d<=dh[mi][i]; d++){ | for(d=0; d<=dh[mi][i]; d++){ | 
| newm=savm; | newm=savm; | 
| agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | 
| cov[2]=agexact; | cov[2]=agexact; | 
| if(nagesqr==1) | if(nagesqr==1) | 
| cov[3]= agexact*agexact; | cov[3]= agexact*agexact; | 
| for (kk=1; kk<=cptcovage;kk++) { | for (kk=1; kk<=cptcovage;kk++) { | 
| cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | 
| } | } | 
| out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | 
| 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 
| savm=oldm; | savm=oldm; | 
| oldm=newm; | oldm=newm; | 
| } /* end mult */ | } /* end mult */ | 
| s1=s[mw[mi][i]][i]; | s1=s[mw[mi][i]][i]; | 
| s2=s[mw[mi+1][i]][i]; | s2=s[mw[mi+1][i]][i]; | 
| bbh=(double)bh[mi][i]/(double)stepm; | bbh=(double)bh[mi][i]/(double)stepm; | 
| lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2])); /* linear interpolation */ | lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2])); /* linear interpolation */ | 
| ipmx +=1; | ipmx +=1; | 
| sw += weight[i]; | sw += weight[i]; | 
| ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | 
| } /* end of wave */ | } /* end of wave */ | 
| } /* end of individual */ | } /* end of individual */ | 
| } else if(mle==3){ /* exponential inter-extrapolation */ | } else if(mle==3){ /* exponential inter-extrapolation */ | 
| for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | 
| for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; | for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; | 
| for(mi=1; mi<= wav[i]-1; mi++){ | for(mi=1; mi<= wav[i]-1; mi++){ | 
| for (ii=1;ii<=nlstate+ndeath;ii++) | for (ii=1;ii<=nlstate+ndeath;ii++) | 
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ | 
| oldm[ii][j]=(ii==j ? 1.0 : 0.0); | oldm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| savm[ii][j]=(ii==j ? 1.0 : 0.0); | savm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| } | } | 
| for(d=0; d<dh[mi][i]; d++){ | for(d=0; d<dh[mi][i]; d++){ | 
| newm=savm; | newm=savm; | 
| agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | 
| cov[2]=agexact; | cov[2]=agexact; | 
| if(nagesqr==1) | if(nagesqr==1) | 
| cov[3]= agexact*agexact; | cov[3]= agexact*agexact; | 
| for (kk=1; kk<=cptcovage;kk++) { | for (kk=1; kk<=cptcovage;kk++) { | 
| cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | 
| } | } | 
| out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | 
| 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 
| savm=oldm; | savm=oldm; | 
| oldm=newm; | oldm=newm; | 
| } /* end mult */ | } /* end mult */ | 
| s1=s[mw[mi][i]][i]; | s1=s[mw[mi][i]][i]; | 
| s2=s[mw[mi+1][i]][i]; | s2=s[mw[mi+1][i]][i]; | 
| bbh=(double)bh[mi][i]/(double)stepm; | bbh=(double)bh[mi][i]/(double)stepm; | 
| lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */ | lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */ | 
| ipmx +=1; | ipmx +=1; | 
| sw += weight[i]; | sw += weight[i]; | 
| ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | 
| } /* end of wave */ | } /* end of wave */ | 
| } /* end of individual */ | } /* end of individual */ | 
| }else if (mle==4){ /* ml=4 no inter-extrapolation */ | }else if (mle==4){ /* ml=4 no inter-extrapolation */ | 
| for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | 
| for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; | for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; | 
| for(mi=1; mi<= wav[i]-1; mi++){ | for(mi=1; mi<= wav[i]-1; mi++){ | 
| for (ii=1;ii<=nlstate+ndeath;ii++) | for (ii=1;ii<=nlstate+ndeath;ii++) | 
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ | 
| oldm[ii][j]=(ii==j ? 1.0 : 0.0); | oldm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| savm[ii][j]=(ii==j ? 1.0 : 0.0); | savm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| } | } | 
| for(d=0; d<dh[mi][i]; d++){ | for(d=0; d<dh[mi][i]; d++){ | 
| newm=savm; | newm=savm; | 
| agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | 
| cov[2]=agexact; | cov[2]=agexact; | 
| if(nagesqr==1) | if(nagesqr==1) | 
| cov[3]= agexact*agexact; | cov[3]= agexact*agexact; | 
| for (kk=1; kk<=cptcovage;kk++) { | for (kk=1; kk<=cptcovage;kk++) { | 
| cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | 
| } | } | 
| out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | 
| 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 
| savm=oldm; | savm=oldm; | 
| oldm=newm; | oldm=newm; | 
| } /* end mult */ | } /* end mult */ | 
| s1=s[mw[mi][i]][i]; | s1=s[mw[mi][i]][i]; | 
| s2=s[mw[mi+1][i]][i]; | s2=s[mw[mi+1][i]][i]; | 
| if( s2 > nlstate){ | if( s2 > nlstate){ | 
| lli=log(out[s1][s2] - savm[s1][s2]); | lli=log(out[s1][s2] - savm[s1][s2]); | 
| } else if ( s2==-1 ) { /* alive */ | } else if ( s2==-1 ) { /* alive */ | 
| for (j=1,survp=0. ; j<=nlstate; j++) | for (j=1,survp=0. ; j<=nlstate; j++) | 
| survp += out[s1][j]; | survp += out[s1][j]; | 
| lli= log(survp); | lli= log(survp); | 
| }else{ | }else{ | 
| lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]); /* Original formula */ | lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]); /* Original formula */ | 
| } | } | 
| ipmx +=1; | ipmx +=1; | 
| sw += weight[i]; | sw += weight[i]; | 
| ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | 
| /* printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ | /* printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ | 
| } /* end of wave */ | } /* end of wave */ | 
| } /* end of individual */ | } /* end of individual */ | 
| }else{ /* ml=5 no inter-extrapolation no jackson =0.8a */ | }else{ /* ml=5 no inter-extrapolation no jackson =0.8a */ | 
| for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | 
| for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; | for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; | 
| for(mi=1; mi<= wav[i]-1; mi++){ | for(mi=1; mi<= wav[i]-1; mi++){ | 
| for (ii=1;ii<=nlstate+ndeath;ii++) | for (ii=1;ii<=nlstate+ndeath;ii++) | 
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ | 
| oldm[ii][j]=(ii==j ? 1.0 : 0.0); | oldm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| savm[ii][j]=(ii==j ? 1.0 : 0.0); | savm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| } | } | 
| for(d=0; d<dh[mi][i]; d++){ | for(d=0; d<dh[mi][i]; d++){ | 
| newm=savm; | newm=savm; | 
| agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | 
| cov[2]=agexact; | cov[2]=agexact; | 
| if(nagesqr==1) | if(nagesqr==1) | 
| cov[3]= agexact*agexact; | cov[3]= agexact*agexact; | 
| for (kk=1; kk<=cptcovage;kk++) { | for (kk=1; kk<=cptcovage;kk++) { | 
| cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | 
| } | } | 
| out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | 
| 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 
| savm=oldm; | savm=oldm; | 
| oldm=newm; | oldm=newm; | 
| } /* end mult */ | } /* end mult */ | 
| s1=s[mw[mi][i]][i]; | s1=s[mw[mi][i]][i]; | 
| s2=s[mw[mi+1][i]][i]; | s2=s[mw[mi+1][i]][i]; | 
| lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]); /* Original formula */ | lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]); /* Original formula */ | 
| ipmx +=1; | ipmx +=1; | 
| sw += weight[i]; | sw += weight[i]; | 
| ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | 
| /*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]);*/ | /*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]);*/ | 
| } /* end of wave */ | } /* end of wave */ | 
| } /* end of individual */ | } /* end of individual */ | 
| } /* End of if */ | } /* End of if */ | 
| for(k=1,l=0.; k<=nlstate; k++) l += ll[k]; | for(k=1,l=0.; k<=nlstate; k++) l += ll[k]; | 
| /* printf("l1=%f l2=%f ",ll[1],ll[2]); */ | /* printf("l1=%f l2=%f ",ll[1],ll[2]); */ | 
| l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */ | l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */ | 
| return -l; | return -l; | 
| } | } | 
| /*************** log-likelihood *************/ | /*************** log-likelihood *************/ | 
| double funcone( double *x) | double funcone( double *x) | 
| { | { | 
| /* Same as likeli but slower because of a lot of printf and if */ | /* Same as func but slower because of a lot of printf and if */ | 
| int i, ii, j, k, mi, d, kk; | int i, ii, j, k, mi, d, kk; | 
| int ioffset=0; | int ioffset=0; | 
| double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; | double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; | 
| double **out; | double **out; | 
| double lli; /* Individual log likelihood */ | double lli; /* Individual log likelihood */ | 
| double llt; | double llt; | 
| int s1, s2; | int s1, s2; | 
| int iv=0, iqv=0, itv=0, iqtv=0 ; /* Index of varying covariate, fixed quantitative cov, time varying covariate */ | int iv=0, iqv=0, itv=0, iqtv=0 ; /* Index of varying covariate, fixed quantitative cov, time varying covariate, quantitative time varying covariate */ | 
| double bbh, survp; | double bbh, survp; | 
| double agexact; | double agexact; | 
| double agebegin, ageend; | double agebegin, ageend; | 
| Line 3247 double funcone( double *x) | Line 3425 double funcone( double *x) | 
| ioffset=0; | ioffset=0; | 
| for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | for (i=1,ipmx=0, sw=0.; i<=imx; i++){ | 
| ioffset=2+nagesqr+cptcovage; | ioffset=2+nagesqr+cptcovage; | 
| /* Fixed */ | |
| /* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */ | /* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */ | 
| for (k=1; k<=ncoveff;k++){ /* Simple and product covariates without age* products */ | /* for (k=1; k<=ncoveff;k++){ /\* Simple and product fixed Dummy covariates without age* products *\/ */ | 
| cov[++ioffset]=covar[Tvar[k]][i]; | for (k=1; k<=ncovf;k++){ /* Simple and product fixed covariates without age* products */ | 
| } | cov[ioffset+TvarFind[k]]=covar[Tvar[TvarFind[k]]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (k=6)*/ | 
| for(iqv=1; iqv <= nqfveff; iqv++){ /* Quantitatives Fixed covariates */ | /* cov[ioffset+TvarFind[1]]=covar[Tvar[TvarFind[1]]][i]; */ | 
| cov[++ioffset]=coqvar[iqv][i]; | /* cov[2+6]=covar[Tvar[6]][i]; */ | 
| /* cov[2+6]=covar[2][i]; V2 */ | |
| /* cov[TvarFind[2]]=covar[Tvar[TvarFind[2]]][i]; */ | |
| /* cov[2+7]=covar[Tvar[7]][i]; */ | |
| /* cov[2+7]=covar[7][i]; V7=V1*V2 */ | |
| /* cov[TvarFind[3]]=covar[Tvar[TvarFind[3]]][i]; */ | |
| /* cov[2+9]=covar[Tvar[9]][i]; */ | |
| /* cov[2+9]=covar[1][i]; V1 */ | |
| } | } | 
| /* for (k=1; k<=nqfveff;k++){ /\* Simple and product fixed Quantitative covariates without age* products *\/ */ | |
| /* cov[++ioffset]=coqvar[TvarFQ[k]][i];/\* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V2 and V1*V2 is fixed (k=6 and 7?)*\/ */ | |
| /* } */ | |
| /* for(iqv=1; iqv <= nqfveff; iqv++){ /\* Quantitative fixed covariates *\/ */ | |
| /* cov[++ioffset]=coqvar[Tvar[iqv]][i]; /\* Only V2 k=6 and V1*V2 7 *\/ */ | |
| /* } */ | |
| for(mi=1; mi<= wav[i]-1; mi++){ | |
| for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */ | for(mi=1; mi<= wav[i]-1; mi++){ /* Varying with waves */ | 
| cov[ioffset+itv]=cotvar[mw[mi][i]][itv][i]; | /* Wave varying (but not age varying) */ | 
| } | for(k=1; k <= ncovv ; k++){ /* Varying covariates (single and product but no age )*/ | 
| for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */ | cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]][i]; | 
| cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i]; | } | 
| } | /* for(itv=1; itv <= ntveff; itv++){ /\* Varying dummy covariates (single??)*\/ */ | 
| /* iv= Tvar[Tmodelind[ioffset-2-nagesqr-cptcovage+itv]]-ncovcol-nqv; /\* Counting the # varying covariate from 1 to ntveff *\/ */ | |
| /* cov[ioffset+iv]=cotvar[mw[mi][i]][iv][i]; */ | |
| /* k=ioffset-2-nagesqr-cptcovage+itv; /\* position in simple model *\/ */ | |
| /* cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i]; */ | |
| /* printf(" i=%d,mi=%d,itv=%d,TmodelInvind[itv]=%d,cotvar[mw[mi][i]][TmodelInvind[itv]][i]=%f\n", i, mi, itv, TmodelInvind[itv],cotvar[mw[mi][i]][TmodelInvind[itv]][i]); */ | |
| /* for(iqtv=1; iqtv <= nqtveff; iqtv++){ /\* Varying quantitatives covariates *\/ */ | |
| /* iv=TmodelInvQind[iqtv]; /\* Counting the # varying covariate from 1 to ntveff *\/ */ | |
| /* /\* printf(" i=%d,mi=%d,iqtv=%d,TmodelInvQind[iqtv]=%d,cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]=%f\n", i, mi, iqtv, TmodelInvQind[iqtv],cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]); *\/ */ | |
| /* cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]; */ | |
| /* } */ | |
| for (ii=1;ii<=nlstate+ndeath;ii++) | for (ii=1;ii<=nlstate+ndeath;ii++) | 
| for (j=1;j<=nlstate+ndeath;j++){ | for (j=1;j<=nlstate+ndeath;j++){ | 
| oldm[ii][j]=(ii==j ? 1.0 : 0.0); | oldm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| savm[ii][j]=(ii==j ? 1.0 : 0.0); | savm[ii][j]=(ii==j ? 1.0 : 0.0); | 
| } | } | 
| agebegin=agev[mw[mi][i]][i]; /* Age at beginning of effective wave */ | agebegin=agev[mw[mi][i]][i]; /* Age at beginning of effective wave */ | 
| ageend=agev[mw[mi][i]][i] + (dh[mi][i])*stepm/YEARM; /* Age at end of effective wave and at the end of transition */ | ageend=agev[mw[mi][i]][i] + (dh[mi][i])*stepm/YEARM; /* Age at end of effective wave and at the end of transition */ | 
| for(d=0; d<dh[mi][i]; d++){ /* Delay between two effective waves */ | for(d=0; d<dh[mi][i]; d++){ /* Delay between two effective waves */ | 
| /*dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i] | /*dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i] | 
| and mw[mi+1][i]. dh depends on stepm.*/ | and mw[mi+1][i]. dh depends on stepm.*/ | 
| newm=savm; | newm=savm; | 
| agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; | 
| cov[2]=agexact; | cov[2]=agexact; | 
| if(nagesqr==1) | if(nagesqr==1) | 
| cov[3]= agexact*agexact; | cov[3]= agexact*agexact; | 
| for (kk=1; kk<=cptcovage;kk++) { | for (kk=1; kk<=cptcovage;kk++) { | 
| cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; | 
| } | } | 
| /* printf("i=%d,mi=%d,d=%d,mw[mi][i]=%d\n",i, mi,d,mw[mi][i]); */ | /* printf("i=%d,mi=%d,d=%d,mw[mi][i]=%d\n",i, mi,d,mw[mi][i]); */ | 
| /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ | /* 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, */ | /* 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)); */ | 
| savm=oldm; | savm=oldm; | 
| oldm=newm; | oldm=newm; | 
| } /* end mult */ | } /* end mult */ | 
| s1=s[mw[mi][i]][i]; | s1=s[mw[mi][i]][i]; | 
| Line 3302 double funcone( double *x) | Line 3504 double funcone( double *x) | 
| * is higher than the multiple of stepm and negative otherwise. | * is higher than the multiple of stepm and negative otherwise. | 
| */ | */ | 
| if( s2 > nlstate && (mle <5) ){ /* Jackson */ | if( s2 > nlstate && (mle <5) ){ /* Jackson */ | 
| lli=log(out[s1][s2] - savm[s1][s2]); | lli=log(out[s1][s2] - savm[s1][s2]); | 
| } else if ( s2==-1 ) { /* alive */ | } else if ( s2==-1 ) { /* alive */ | 
| for (j=1,survp=0. ; j<=nlstate; j++) | for (j=1,survp=0. ; j<=nlstate; j++) | 
| survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; | survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; | 
| lli= log(survp); | lli= log(survp); | 
| }else if (mle==1){ | }else if (mle==1){ | 
| lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ | lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ | 
| } else if(mle==2){ | } else if(mle==2){ | 
| lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* linear interpolation */ | lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* linear interpolation */ | 
| } else if(mle==3){ /* exponential inter-extrapolation */ | } else if(mle==3){ /* exponential inter-extrapolation */ | 
| lli= (savm[s1][s2]>(double)1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */ | lli= (savm[s1][s2]>(double)1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */ | 
| } else if (mle==4){ /* mle=4 no inter-extrapolation */ | } else if (mle==4){ /* mle=4 no inter-extrapolation */ | 
| lli=log(out[s1][s2]); /* Original formula */ | lli=log(out[s1][s2]); /* Original formula */ | 
| } else{ /* mle=0 back to 1 */ | } else{ /* mle=0 back to 1 */ | 
| lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ | lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ | 
| /*lli=log(out[s1][s2]); */ /* Original formula */ | /*lli=log(out[s1][s2]); */ /* Original formula */ | 
| } /* End of if */ | } /* End of if */ | 
| ipmx +=1; | ipmx +=1; | 
| sw += weight[i]; | sw += weight[i]; | 
| ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | 
| /*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ | /*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ | 
| if(globpr){ | if(globpr){ | 
| fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\ | fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\ | 
| %11.6f %11.6f %11.6f ", \ | %11.6f %11.6f %11.6f ", \ | 
| num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw, | num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw, | 
| 2*weight[i]*lli,out[s1][s2],savm[s1][s2]); | 2*weight[i]*lli,out[s1][s2],savm[s1][s2]); | 
| for(k=1,llt=0.,l=0.; k<=nlstate; k++){ | for(k=1,llt=0.,l=0.; k<=nlstate; k++){ | 
| llt +=ll[k]*gipmx/gsw; | llt +=ll[k]*gipmx/gsw; | 
| fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw); | fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw); | 
| } | } | 
| fprintf(ficresilk," %10.6f\n", -llt); | fprintf(ficresilk," %10.6f\n", -llt); | 
| } | } | 
| } /* end of wave */ | } /* end of wave */ | 
| } /* end of individual */ | } /* end of individual */ | 
| for(k=1,l=0.; k<=nlstate; k++) l += ll[k]; | for(k=1,l=0.; k<=nlstate; k++) l += ll[k]; | 
| /* printf("l1=%f l2=%f ",ll[1],ll[2]); */ | /* printf("l1=%f l2=%f ",ll[1],ll[2]); */ | 
| l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */ | l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */ | 
| if(globpr==0){ /* First time we count the contributions and weights */ | if(globpr==0){ /* First time we count the contributions and weights */ | 
| gipmx=ipmx; | gipmx=ipmx; | 
| gsw=sw; | gsw=sw; | 
| } | } | 
| return -l; | return -l; | 
| } | } | 
| Line 3839 void pstamp(FILE *fichier) | Line 4041 void pstamp(FILE *fichier) | 
| } | } | 
| /************ Frequencies ********************/ | /************ Frequencies ********************/ | 
| void freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \ | void freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \ | 
| int *Tvaraff, int *invalidvarcomb, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[], \ | int *Tvaraff, int *invalidvarcomb, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[], \ | 
| int firstpass, int lastpass, int stepm, int weightopt, char model[]) | int firstpass, int lastpass, int stepm, int weightopt, char model[]) | 
| { /* Some frequencies */ | { /* Some frequencies */ | 
| int i, m, jk, j1, bool, z1,j; | int i, m, jk, j1, bool, z1,j, k, iv; | 
| int iind=0, iage=0; | int iind=0, iage=0; | 
| int mi; /* Effective wave */ | int mi; /* Effective wave */ | 
| int first; | int first; | 
| double ***freq; /* Frequencies */ | double ***freq; /* Frequencies */ | 
| double *meanq; | double *meanq; | 
| double **meanqt; | double **meanqt; | 
| double *pp, **prop, *posprop, *pospropt; | double *pp, **prop, *posprop, *pospropt; | 
| double pos=0., posproptt=0., pospropta=0., k2, dateintsum=0,k2cpt=0; | double pos=0., posproptt=0., pospropta=0., k2, dateintsum=0,k2cpt=0; | 
| char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH], fileresphtmfr[FILENAMELENGTH]; | char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH], fileresphtmfr[FILENAMELENGTH]; | 
| double agebegin, ageend; | double agebegin, ageend; | 
| pp=vector(1,nlstate); | pp=vector(1,nlstate); | 
| prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE); | prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE); | 
| posprop=vector(1,nlstate); /* Counting the number of transition starting from a live state per age */ | posprop=vector(1,nlstate); /* Counting the number of transition starting from a live state per age */ | 
| pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */ | pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */ | 
| /* prop=matrix(1,nlstate,iagemin,iagemax+3); */ | /* prop=matrix(1,nlstate,iagemin,iagemax+3); */ | 
| meanq=vector(1,nqfveff); /* Number of Quantitative Fixed Variables Effective */ | meanq=vector(1,nqfveff); /* Number of Quantitative Fixed Variables Effective */ | 
| meanqt=matrix(1,lastpass,1,nqtveff); | meanqt=matrix(1,lastpass,1,nqtveff); | 
| strcpy(fileresp,"P_"); | strcpy(fileresp,"P_"); | 
| strcat(fileresp,fileresu); | strcat(fileresp,fileresu); | 
| /*strcat(fileresphtm,fileresu);*/ | /*strcat(fileresphtm,fileresu);*/ | 
| if((ficresp=fopen(fileresp,"w"))==NULL) { | if((ficresp=fopen(fileresp,"w"))==NULL) { | 
| printf("Problem with prevalence resultfile: %s\n", fileresp); | printf("Problem with prevalence resultfile: %s\n", fileresp); | 
| fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp); | fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp); | 
| exit(0); | exit(0); | 
| } | } | 
| strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm")); | strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm")); | 
| if((ficresphtm=fopen(fileresphtm,"w"))==NULL) { | if((ficresphtm=fopen(fileresphtm,"w"))==NULL) { | 
| printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno)); | printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno)); | 
| fprintf(ficlog,"Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno)); | fprintf(ficlog,"Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno)); | 
| fflush(ficlog); | fflush(ficlog); | 
| exit(70); | exit(70); | 
| } | } | 
| else{ | else{ | 
| fprintf(ficresphtm,"<html><head>\n<title>IMaCh PHTM_ %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \ | fprintf(ficresphtm,"<html><head>\n<title>IMaCh PHTM_ %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \ | 
| <hr size=\"2\" color=\"#EC5E5E\"> \n\ | <hr size=\"2\" color=\"#EC5E5E\"> \n\ | 
| Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\ | Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\ | 
| fileresphtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model); | fileresphtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model); | 
| } | } | 
| fprintf(ficresphtm,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies and prevalence by age at begin of transition</h4>\n",fileresphtm, fileresphtm); | fprintf(ficresphtm,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies and prevalence by age at begin of transition</h4>\n",fileresphtm, fileresphtm); | 
| strcpy(fileresphtmfr,subdirfext(optionfilefiname,"PHTMFR_",".htm")); | strcpy(fileresphtmfr,subdirfext(optionfilefiname,"PHTMFR_",".htm")); | 
| if((ficresphtmfr=fopen(fileresphtmfr,"w"))==NULL) { | if((ficresphtmfr=fopen(fileresphtmfr,"w"))==NULL) { | 
| printf("Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno)); | printf("Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno)); | 
| fprintf(ficlog,"Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno)); | fprintf(ficlog,"Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno)); | 
| fflush(ficlog); | fflush(ficlog); | 
| exit(70); | exit(70); | 
| } | } | 
| else{ | else{ | 
| fprintf(ficresphtmfr,"<html><head>\n<title>IMaCh PHTM_Frequency table %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \ | fprintf(ficresphtmfr,"<html><head>\n<title>IMaCh PHTM_Frequency table %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \ | 
| <hr size=\"2\" color=\"#EC5E5E\"> \n\ | <hr size=\"2\" color=\"#EC5E5E\"> \n\ | 
| Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\ | Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\ | 
| fileresphtmfr,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model); | fileresphtmfr,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model); | 
| } | } | 
| fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions by age at begin of transition </h4>Unknown status is -1<br/>\n",fileresphtmfr, fileresphtmfr); | fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions by age at begin of transition </h4>Unknown status is -1<br/>\n",fileresphtmfr, fileresphtmfr); | 
| freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+3+AGEMARGE); | freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+3+AGEMARGE); | 
| j1=0; | j1=0; | 
| j=ncoveff; | /* j=ncoveff; /\* Only fixed dummy covariates *\/ */ | 
| if (cptcovn<1) {j=1;ncodemax[1]=1;} | j=cptcoveff; /* Only dummy covariates of the model */ | 
| if (cptcovn<1) {j=1;ncodemax[1]=1;} | |
| first=1; | first=1; | 
| /* Detects if a combination j1 is empty: for a multinomial variable like 3 education levels: | /* Detects if a combination j1 is empty: for a multinomial variable like 3 education levels: | 
| reference=low_education V1=0,V2=0 | reference=low_education V1=0,V2=0 | 
| med_educ V1=1 V2=0, | med_educ V1=1 V2=0, | 
| high_educ V1=0 V2=1 | high_educ V1=0 V2=1 | 
| Then V1=1 and V2=1 is a noisy combination that we want to exclude for the list 2**cptcoveff | Then V1=1 and V2=1 is a noisy combination that we want to exclude for the list 2**cptcoveff | 
| */ | */ | 
| for (j1 = 1; j1 <= (int) pow(2,j); j1++){ /* Loop on covariates combination excluding varying and quantitatives */ | for (j1 = 1; j1 <= (int) pow(2,j); j1++){ /* Loop on covariates combination in order of model, excluding quantitatives V4=0, V3=0 for example, fixed or varying covariates */ | 
| posproptt=0.; | posproptt=0.; | 
| /*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++) | 
| for (jk=-5; jk<=nlstate+ndeath; jk++) | for (jk=-5; jk<=nlstate+ndeath; jk++) | 
| for(m=iagemin; m <= iagemax+3; m++) | for(m=iagemin; m <= iagemax+3; m++) | 
| freq[i][jk][m]=0; | freq[i][jk][m]=0; | 
| 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++) | 
| prop[i][m]=0; | prop[i][m]=0; | 
| posprop[i]=0; | posprop[i]=0; | 
| pospropt[i]=0; | pospropt[i]=0; | 
| } | } | 
| for (z1=1; z1<= nqfveff; z1++) { | /* for (z1=1; z1<= nqfveff; z1++) { */ | 
| meanq[z1]+=0.; | /* meanq[z1]+=0.; */ | 
| for(m=1;m<=lastpass;m++){ | /* for(m=1;m<=lastpass;m++){ */ | 
| meanqt[m][z1]=0.; | /* meanqt[m][z1]=0.; */ | 
| } | /* } */ | 
| } | /* } */ | 
| dateintsum=0; | dateintsum=0; | 
| k2cpt=0; | k2cpt=0; | 
| /* For that comination of covariate j1, we count and print the frequencies */ | /* For that combination of covariate j1, we count and print the frequencies in one pass */ | 
| for (iind=1; iind<=imx; iind++) { /* For each individual iind */ | for (iind=1; iind<=imx; iind++) { /* For each individual iind */ | 
| bool=1; | bool=1; | 
| if (nqfveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ | if(anyvaryingduminmodel==0){ /* If All fixed covariates */ | 
| for (z1=1; z1<= nqfveff; z1++) { | if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ | 
| meanq[z1]+=coqvar[Tvar[z1]][iind]; | /* for (z1=1; z1<= nqfveff; z1++) { */ | 
| } | /* meanq[z1]+=coqvar[Tvar[z1]][iind]; /\* Computes mean of quantitative with selected filter *\/ */ | 
| for (z1=1; z1<=ncoveff; z1++) { | /* } */ | 
| /* if(Tvaraff[z1] ==-20){ */ | for (z1=1; z1<=cptcoveff; z1++) { | 
| /* /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */ | /* if(Tvaraff[z1] ==-20){ */ | 
| /* }else if(Tvaraff[z1] ==-10){ */ | /* /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */ | 
| /* /\* sumnew+=coqvar[z1][iind]; *\/ */ | /* }else if(Tvaraff[z1] ==-10){ */ | 
| /* }else */ | /* /\* sumnew+=coqvar[z1][iind]; *\/ */ | 
| if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){ | /* }else */ | 
| /* Tests if this individual i responded to j1 (V4=1 V3=0) */ | if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){ | 
| bool=0; | /* Tests if this individual iind responded to j1 (V4=1 V3=0) */ | 
| /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n", | bool=0; | 
| bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1), | /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n", | 
| j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/ | bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1), | 
| /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/ | j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/ | 
| } | /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/ | 
| } /* end z1 */ | } /* Onlyf fixed */ | 
| } /* cptcovn > 0 */ | } /* end z1 */ | 
| } /* cptcovn > 0 */ | |
| if (bool==1){ /* We selected an individual iin satisfying combination j1 */ | } /* end any */ | 
| /* for(m=firstpass; m<=lastpass; m++){ */ | if (bool==1){ /* We selected an individual iind satisfying combination j1 or all fixed */ | 
| for(mi=1; mi<wav[iind];mi++){ | /* for(m=firstpass; m<=lastpass; m++){ */ | 
| m=mw[mi][iind]; | for(mi=1; mi<wav[iind];mi++){ /* For that wave */ | 
| /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind] | m=mw[mi][iind]; | 
| and mw[mi+1][iind]. dh depends on stepm. */ | if(anyvaryingduminmodel==1){ /* Some are varying covariates */ | 
| agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/ | for (z1=1; z1<=cptcoveff; z1++) { | 
| ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */ | if( Fixed[Tmodelind[z1]]==1){ | 
| if(m >=firstpass && m <=lastpass){ | iv= Tvar[Tmodelind[z1]]-ncovcol-nqv; | 
| k2=anint[m][iind]+(mint[m][iind]/12.); | if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) /* iv=1 to ntv, right modality */ | 
| /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/ | bool=0; | 
| if(agev[m][iind]==0) agev[m][iind]=iagemax+1; /* All ages equal to 0 are in iagemax+1 */ | }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */ | 
| if(agev[m][iind]==1) agev[m][iind]=iagemax+2; /* All ages equal to 1 are in iagemax+2 */ | if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) { | 
| if (s[m][iind]>0 && s[m][iind]<=nlstate) /* If status at wave m is known and a live state */ | bool=0; | 
| prop[s[m][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */ | } | 
| if (m<lastpass) { | } | 
| /* if(s[m][iind]==4 && s[m+1][iind]==4) */ | } | 
| /* printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */ | }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop */ | 
| if(s[m][iind]==-1) | /* bool =0 we keep that guy which corresponds to the combination of dummy values */ | 
| printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.)); | if(bool==1){ | 
| freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */ | /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind] | 
| /* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */ | and mw[mi+1][iind]. dh depends on stepm. */ | 
| freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */ | agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/ | 
| } | ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */ | 
| } | if(m >=firstpass && m <=lastpass){ | 
| if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) { | k2=anint[m][iind]+(mint[m][iind]/12.); | 
| dateintsum=dateintsum+k2; | /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/ | 
| k2cpt++; | if(agev[m][iind]==0) agev[m][iind]=iagemax+1; /* All ages equal to 0 are in iagemax+1 */ | 
| /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */ | if(agev[m][iind]==1) agev[m][iind]=iagemax+2; /* All ages equal to 1 are in iagemax+2 */ | 
| } | if (s[m][iind]>0 && s[m][iind]<=nlstate) /* If status at wave m is known and a live state */ | 
| /*}*/ | prop[s[m][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */ | 
| } /* end m */ | if (m<lastpass) { | 
| } /* end bool */ | /* if(s[m][iind]==4 && s[m+1][iind]==4) */ | 
| } /* end iind = 1 to imx */ | /* printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */ | 
| /* prop[s][age] is feeded for any initial and valid live state as well as | if(s[m][iind]==-1) | 
| freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */ | printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.)); | 
| freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */ | |
| /* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */ | |
| /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ | freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */ | 
| pstamp(ficresp); | } | 
| if (ncoveff>0) { | } /* end if between passes */ | 
| fprintf(ficresp, "\n#********** Variable "); | if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) { | 
| fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); | dateintsum=dateintsum+k2; | 
| fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); | k2cpt++; | 
| for (z1=1; z1<=ncoveff; z1++){ | /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */ | 
| fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | } | 
| fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | } /* end bool 2 */ | 
| fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | } /* end m */ | 
| } | } /* end bool */ | 
| fprintf(ficresp, "**********\n#"); | } /* end iind = 1 to imx */ | 
| fprintf(ficresphtm, "**********</h3>\n"); | /* prop[s][age] is feeded for any initial and valid live state as well as | 
| fprintf(ficresphtmfr, "**********</h3>\n"); | freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */ | 
| fprintf(ficlog, "\n#********** Variable "); | |
| for (z1=1; z1<=ncoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| fprintf(ficlog, "**********\n"); | /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ | 
| } | pstamp(ficresp); | 
| fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">"); | /* if (ncoveff>0) { */ | 
| for(i=1; i<=nlstate;i++) { | if (cptcoveff>0) { | 
| fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i); | fprintf(ficresp, "\n#********** Variable "); | 
| fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i); | fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); | 
| } | fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); | 
| fprintf(ficresp, "\n"); | for (z1=1; z1<=cptcoveff; z1++){ | 
| fprintf(ficresphtm, "\n"); | fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | 
| fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | |
| /* Header of frequency table by age */ | fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | 
| fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">"); | } | 
| fprintf(ficresphtmfr,"<th>Age</th> "); | fprintf(ficresp, "**********\n#"); | 
| for(jk=-1; jk <=nlstate+ndeath; jk++){ | fprintf(ficresphtm, "**********</h3>\n"); | 
| for(m=-1; m <=nlstate+ndeath; m++){ | fprintf(ficresphtmfr, "**********</h3>\n"); | 
| if(jk!=0 && m!=0) | fprintf(ficlog, "\n#********** Variable "); | 
| fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m); | for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); | 
| } | fprintf(ficlog, "**********\n"); | 
| } | } | 
| fprintf(ficresphtmfr, "\n"); | fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">"); | 
| for(i=1; i<=nlstate;i++) { | |
| /* For each age */ | fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i); | 
| for(iage=iagemin; iage <= iagemax+3; iage++){ | fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i); | 
| fprintf(ficresphtm,"<tr>"); | } | 
| if(iage==iagemax+1){ | fprintf(ficresp, "\n"); | 
| fprintf(ficlog,"1"); | fprintf(ficresphtm, "\n"); | 
| fprintf(ficresphtmfr,"<tr><th>0</th> "); | |
| }else if(iage==iagemax+2){ | /* Header of frequency table by age */ | 
| fprintf(ficlog,"0"); | fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">"); | 
| fprintf(ficresphtmfr,"<tr><th>Unknown</th> "); | fprintf(ficresphtmfr,"<th>Age</th> "); | 
| }else if(iage==iagemax+3){ | for(jk=-1; jk <=nlstate+ndeath; jk++){ | 
| fprintf(ficlog,"Total"); | for(m=-1; m <=nlstate+ndeath; m++){ | 
| fprintf(ficresphtmfr,"<tr><th>Total</th> "); | if(jk!=0 && m!=0) | 
| }else{ | fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m); | 
| if(first==1){ | } | 
| first=0; | } | 
| printf("See log file for details...\n"); | fprintf(ficresphtmfr, "\n"); | 
| } | |
| fprintf(ficresphtmfr,"<tr><th>%d</th> ",iage); | /* For each age */ | 
| fprintf(ficlog,"Age %d", iage); | for(iage=iagemin; iage <= iagemax+3; iage++){ | 
| } | fprintf(ficresphtm,"<tr>"); | 
| for(jk=1; jk <=nlstate ; jk++){ | if(iage==iagemax+1){ | 
| for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++) | fprintf(ficlog,"1"); | 
| pp[jk] += freq[jk][m][iage]; | fprintf(ficresphtmfr,"<tr><th>0</th> "); | 
| } | }else if(iage==iagemax+2){ | 
| for(jk=1; jk <=nlstate ; jk++){ | fprintf(ficlog,"0"); | 
| for(m=-1, pos=0; m <=0 ; m++) | fprintf(ficresphtmfr,"<tr><th>Unknown</th> "); | 
| pos += freq[jk][m][iage]; | }else if(iage==iagemax+3){ | 
| if(pp[jk]>=1.e-10){ | fprintf(ficlog,"Total"); | 
| if(first==1){ | fprintf(ficresphtmfr,"<tr><th>Total</th> "); | 
| printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]); | }else{ | 
| } | if(first==1){ | 
| fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]); | first=0; | 
| }else{ | printf("See log file for details...\n"); | 
| if(first==1) | } | 
| printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk); | fprintf(ficresphtmfr,"<tr><th>%d</th> ",iage); | 
| fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk); | fprintf(ficlog,"Age %d", iage); | 
| } | } | 
| } | for(jk=1; jk <=nlstate ; jk++){ | 
| for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++) | |
| for(jk=1; jk <=nlstate ; jk++){ | pp[jk] += freq[jk][m][iage]; | 
| /* posprop[jk]=0; */ | } | 
| for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */ | for(jk=1; jk <=nlstate ; jk++){ | 
| pp[jk] += freq[jk][m][iage]; | for(m=-1, pos=0; m <=0 ; m++) | 
| } /* pp[jk] is the total number of transitions starting from state jk and any ending status until this age */ | pos += freq[jk][m][iage]; | 
| if(pp[jk]>=1.e-10){ | |
| for(jk=1,pos=0, pospropta=0.; jk <=nlstate ; jk++){ | if(first==1){ | 
| pos += pp[jk]; /* pos is the total number of transitions until this age */ | printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]); | 
| posprop[jk] += prop[jk][iage]; /* prop is the number of transitions from a live state | } | 
| from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */ | fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]); | 
| pospropta += prop[jk][iage]; /* prop is the number of transitions from a live state | }else{ | 
| from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */ | if(first==1) | 
| } | printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk); | 
| for(jk=1; jk <=nlstate ; jk++){ | fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk); | 
| if(pos>=1.e-5){ | } | 
| if(first==1) | } | 
| printf(" %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos); | |
| fprintf(ficlog," %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos); | for(jk=1; jk <=nlstate ; jk++){ | 
| }else{ | /* posprop[jk]=0; */ | 
| if(first==1) | for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */ | 
| printf(" %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk); | pp[jk] += freq[jk][m][iage]; | 
| fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk); | } /* pp[jk] is the total number of transitions starting from state jk and any ending status until this age */ | 
| } | |
| if( iage <= iagemax){ | for(jk=1,pos=0, pospropta=0.; jk <=nlstate ; jk++){ | 
| if(pos>=1.e-5){ | pos += pp[jk]; /* pos is the total number of transitions until this age */ | 
| fprintf(ficresp," %d %.5f %.0f %.0f",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta); | posprop[jk] += prop[jk][iage]; /* prop is the number of transitions from a live state | 
| fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta); | from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */ | 
| /*probs[iage][jk][j1]= pp[jk]/pos;*/ | pospropta += prop[jk][iage]; /* prop is the number of transitions from a live state | 
| /*printf("\niage=%d jk=%d j1=%d %.5f %.0f %.0f %f",iage,jk,j1,pp[jk]/pos, pp[jk],pos,probs[iage][jk][j1]);*/ | from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */ | 
| } | } | 
| else{ | for(jk=1; jk <=nlstate ; jk++){ | 
| fprintf(ficresp," %d NaNq %.0f %.0f",iage,prop[jk][iage],pospropta); | if(pos>=1.e-5){ | 
| fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",iage, prop[jk][iage],pospropta); | if(first==1) | 
| } | printf(" %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos); | 
| } | fprintf(ficlog," %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos); | 
| pospropt[jk] +=posprop[jk]; | }else{ | 
| } /* end loop jk */ | if(first==1) | 
| /* pospropt=0.; */ | printf(" %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk); | 
| for(jk=-1; jk <=nlstate+ndeath; jk++){ | fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk); | 
| for(m=-1; m <=nlstate+ndeath; m++){ | } | 
| if(freq[jk][m][iage] !=0 ) { /* minimizing output */ | if( iage <= iagemax){ | 
| if(first==1){ | if(pos>=1.e-5){ | 
| printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]); | fprintf(ficresp," %d %.5f %.0f %.0f",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta); | 
| } | fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta); | 
| fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]); | /*probs[iage][jk][j1]= pp[jk]/pos;*/ | 
| } | /*printf("\niage=%d jk=%d j1=%d %.5f %.0f %.0f %f",iage,jk,j1,pp[jk]/pos, pp[jk],pos,probs[iage][jk][j1]);*/ | 
| if(jk!=0 && m!=0) | } | 
| fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][iage]); | else{ | 
| } | fprintf(ficresp," %d NaNq %.0f %.0f",iage,prop[jk][iage],pospropta); | 
| } /* end loop jk */ | fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",iage, prop[jk][iage],pospropta); | 
| posproptt=0.; | } | 
| for(jk=1; jk <=nlstate; jk++){ | } | 
| posproptt += pospropt[jk]; | pospropt[jk] +=posprop[jk]; | 
| } | } /* end loop jk */ | 
| fprintf(ficresphtmfr,"</tr>\n "); | /* pospropt=0.; */ | 
| if(iage <= iagemax){ | for(jk=-1; jk <=nlstate+ndeath; jk++){ | 
| fprintf(ficresp,"\n"); | for(m=-1; m <=nlstate+ndeath; m++){ | 
| fprintf(ficresphtm,"</tr>\n"); | if(freq[jk][m][iage] !=0 ) { /* minimizing output */ | 
| } | if(first==1){ | 
| if(first==1) | printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]); | 
| printf("Others in log...\n"); | } | 
| fprintf(ficlog,"\n"); | fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]); | 
| } /* end loop age iage */ | } | 
| fprintf(ficresphtm,"<tr><th>Tot</th>"); | if(jk!=0 && m!=0) | 
| for(jk=1; jk <=nlstate ; jk++){ | fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][iage]); | 
| if(posproptt < 1.e-5){ | } | 
| fprintf(ficresphtm,"<td>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[jk],posproptt); | } /* end loop jk */ | 
| }else{ | posproptt=0.; | 
| fprintf(ficresphtm,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt); | for(jk=1; jk <=nlstate; jk++){ | 
| } | posproptt += pospropt[jk]; | 
| } | } | 
| fprintf(ficresphtm,"</tr>\n"); | fprintf(ficresphtmfr,"</tr>\n "); | 
| fprintf(ficresphtm,"</table>\n"); | if(iage <= iagemax){ | 
| fprintf(ficresphtmfr,"</table>\n"); | fprintf(ficresp,"\n"); | 
| if(posproptt < 1.e-5){ | fprintf(ficresphtm,"</tr>\n"); | 
| fprintf(ficresphtm,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1); | } | 
| fprintf(ficresphtmfr,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1); | if(first==1) | 
| fprintf(ficres,"\n This combination (%d) is not valid and no result will be produced\n\n",j1); | printf("Others in log...\n"); | 
| invalidvarcomb[j1]=1; | fprintf(ficlog,"\n"); | 
| }else{ | } /* end loop age iage */ | 
| fprintf(ficresphtm,"\n <p> This combination (%d) is valid and result will be produced.</p>",j1); | fprintf(ficresphtm,"<tr><th>Tot</th>"); | 
| invalidvarcomb[j1]=0; | for(jk=1; jk <=nlstate ; jk++){ | 
| } | if(posproptt < 1.e-5){ | 
| fprintf(ficresphtmfr,"</table>\n"); | fprintf(ficresphtm,"<td>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[jk],posproptt); | 
| } /* end selected combination of covariate j1 */ | }else{ | 
| dateintmean=dateintsum/k2cpt; | fprintf(ficresphtm,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt); | 
| } | |
| fclose(ficresp); | } | 
| fclose(ficresphtm); | fprintf(ficresphtm,"</tr>\n"); | 
| fclose(ficresphtmfr); | fprintf(ficresphtm,"</table>\n"); | 
| free_vector(meanq,1,nqfveff); | fprintf(ficresphtmfr,"</table>\n"); | 
| free_matrix(meanqt,1,lastpass,1,nqtveff); | if(posproptt < 1.e-5){ | 
| free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE); | fprintf(ficresphtm,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1); | 
| free_vector(pospropt,1,nlstate); | fprintf(ficresphtmfr,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1); | 
| free_vector(posprop,1,nlstate); | fprintf(ficres,"\n This combination (%d) is not valid and no result will be produced\n\n",j1); | 
| free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE); | invalidvarcomb[j1]=1; | 
| free_vector(pp,1,nlstate); | }else{ | 
| /* End of freqsummary */ | fprintf(ficresphtm,"\n <p> This combination (%d) is valid and result will be produced.</p>",j1); | 
| } | invalidvarcomb[j1]=0; | 
| } | |
| fprintf(ficresphtmfr,"</table>\n"); | |
| } /* end selected combination of covariate j1 */ | |
| dateintmean=dateintsum/k2cpt; | |
| fclose(ficresp); | |
| fclose(ficresphtm); | |
| fclose(ficresphtmfr); | |
| free_vector(meanq,1,nqfveff); | |
| free_matrix(meanqt,1,lastpass,1,nqtveff); | |
| free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE); | |
| free_vector(pospropt,1,nlstate); | |
| free_vector(posprop,1,nlstate); | |
| free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE); | |
| free_vector(pp,1,nlstate); | |
| /* End of freqsummary */ | |
| } | |
| /************ Prevalence ********************/ | /************ Prevalence ********************/ | 
| void prevalence(double ***probs, double agemin, double agemax, int **s, double **agev, int nlstate, int imx, int *Tvar, int **nbcode, int *ncodemax,double **mint,double **anint, double dateprev1,double dateprev2, int firstpass, int lastpass) | void prevalence(double ***probs, double agemin, double agemax, int **s, double **agev, int nlstate, int imx, int *Tvar, int **nbcode, int *ncodemax,double **mint,double **anint, double dateprev1,double dateprev2, int firstpass, int lastpass) | 
| { | { | 
| /* Compute observed prevalence between dateprev1 and dateprev2 by counting the number of people | /* Compute observed prevalence between dateprev1 and dateprev2 by counting the number of people | 
| in each health status at the date of interview (if between dateprev1 and dateprev2). | in each health status at the date of interview (if between dateprev1 and dateprev2). | 
| We still use firstpass and lastpass as another selection. | We still use firstpass and lastpass as another selection. | 
| */ | */ | 
| int i, m, jk, j1, bool, z1,j; | int i, m, jk, j1, bool, z1,j, iv; | 
| int mi; /* Effective wave */ | int mi; /* Effective wave */ | 
| int iage; | int iage; | 
| double agebegin, ageend; | double agebegin, ageend; | 
| double **prop; | double **prop; | 
| double posprop; | double 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 */ | int first; /** to stop verbosity which is redirected to log file */ | 
| iagemin= (int) agemin; | iagemin= (int) agemin; | 
| iagemax= (int) agemax; | iagemax= (int) agemax; | 
| /*pp=vector(1,nlstate);*/ | /*pp=vector(1,nlstate);*/ | 
| prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE); | prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE); | 
| /* freq=ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,iagemin,iagemax+3);*/ | /* freq=ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,iagemin,iagemax+3);*/ | 
| j1=0; | j1=0; | 
| /*j=cptcoveff;*/ | /*j=cptcoveff;*/ | 
| if (cptcovn<1) {j=1;ncodemax[1]=1;} | if (cptcovn<1) {j=1;ncodemax[1]=1;} | 
| first=1; | first=1; | 
| for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){ /* For each combination of covariate */ | for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){ /* For each combination of covariate */ | 
| for (i=1; i<=nlstate; i++) | for (i=1; i<=nlstate; i++) | 
| for(iage=iagemin-AGEMARGE; iage <= iagemax+3+AGEMARGE; iage++) | for(iage=iagemin-AGEMARGE; iage <= iagemax+3+AGEMARGE; iage++) | 
| prop[i][iage]=0.0; | prop[i][iage]=0.0; | 
| printf("Prevalence combination of varying and fixed dummies %d\n",j1); | |
| for (i=1; i<=imx; i++) { /* Each individual */ | /* fprintf(ficlog," V%d=%d ",Tvaraff[j1],nbcode[Tvaraff[j1]][codtabm(k,j1)]); */ | 
| bool=1; | fprintf(ficlog,"Prevalence combination of varying and fixed dummies %d\n",j1); | 
| if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ | |
| for (z1=1; z1<=cptcoveff; z1++) /* For each covariate, look at the value for individual i and checks if it is equal to the corresponding value of this covariate according to current combination j1*/ | for (i=1; i<=imx; i++) { /* Each individual */ | 
| if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) | bool=1; | 
| bool=0; | /* for(m=firstpass; m<=lastpass; m++){/\* Other selection (we can limit to certain interviews*\/ */ | 
| } | for(mi=1; mi<wav[i];mi++){ /* For this wave too look where individual can be counted V4=0 V3=0 */ | 
| if (bool==1) { /* For this combination of covariates values, this individual fits */ | m=mw[mi][i]; | 
| /* for(m=firstpass; m<=lastpass; m++){/\* Other selection (we can limit to certain interviews*\/ */ | /* Tmodelind[z1]=k is the position of the varying covariate in the model, but which # within 1 to ntv? */ | 
| for(mi=1; mi<wav[i];mi++){ | /* Tvar[Tmodelind[z1]] is the n of Vn; n-ncovcol-nqv is the first time varying covariate or iv */ | 
| m=mw[mi][i]; | for (z1=1; z1<=cptcoveff; z1++){ | 
| agebegin=agev[m][i]; /* Age at beginning of wave before transition*/ | if( Fixed[Tmodelind[z1]]==1){ | 
| /* ageend=agev[m][i]+(dh[m][i])*stepm/YEARM; /\* Age at end of wave and transition *\/ */ | iv= Tvar[Tmodelind[z1]]-ncovcol-nqv; | 
| if(m >=firstpass && m <=lastpass){ | if (cotvar[m][iv][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) /* iv=1 to ntv, right modality */ | 
| y2=anint[m][i]+(mint[m][i]/12.); /* Fractional date in year */ | bool=0; | 
| if ((y2>=dateprev1) && (y2<=dateprev2)) { /* Here is the main selection (fractional years) */ | }else if( Fixed[Tmodelind[z1]]== 0) /* fixed */ | 
| if(agev[m][i]==0) agev[m][i]=iagemax+1; | if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) { | 
| if(agev[m][i]==1) agev[m][i]=iagemax+2; | bool=0; | 
| if((int)agev[m][i] <iagemin-AGEMARGE || (int)agev[m][i] >iagemax+3+AGEMARGE){ | } | 
| printf("Error on individual # %d agev[m][i]=%f <%d-%d or > %d+3+%d m=%d; either change agemin or agemax or fix data\n",i, agev[m][i],iagemin,AGEMARGE, iagemax,AGEMARGE,m); | } | 
| exit(1); | if(bool==1){ /* Otherwise we skip that wave/person */ | 
| } | agebegin=agev[m][i]; /* Age at beginning of wave before transition*/ | 
| if (s[m][i]>0 && s[m][i]<=nlstate) { | /* ageend=agev[m][i]+(dh[m][i])*stepm/YEARM; /\* Age at end of wave and transition *\/ */ | 
| /*if(i>4620) printf(" i=%d m=%d s[m][i]=%d (int)agev[m][i]=%d weight[i]=%f prop=%f\n",i,m,s[m][i],(int)agev[m][m],weight[i],prop[s[m][i]][(int)agev[m][i]]);*/ | if(m >=firstpass && m <=lastpass){ | 
| prop[s[m][i]][(int)agev[m][i]] += weight[i];/* At age of beginning of transition, where status is known */ | y2=anint[m][i]+(mint[m][i]/12.); /* Fractional date in year */ | 
| prop[s[m][i]][iagemax+3] += weight[i]; | if ((y2>=dateprev1) && (y2<=dateprev2)) { /* Here is the main selection (fractional years) */ | 
| } /* end valid statuses */ | if(agev[m][i]==0) agev[m][i]=iagemax+1; | 
| } /* end selection of dates */ | if(agev[m][i]==1) agev[m][i]=iagemax+2; | 
| } /* end selection of waves */ | if((int)agev[m][i] <iagemin-AGEMARGE || (int)agev[m][i] >iagemax+3+AGEMARGE){ | 
| } /* end effective waves */ | printf("Error on individual # %d agev[m][i]=%f <%d-%d or > %d+3+%d m=%d; either change agemin or agemax or fix data\n",i, agev[m][i],iagemin,AGEMARGE, iagemax,AGEMARGE,m); | 
| } /* end bool */ | exit(1); | 
| } | } | 
| for(i=iagemin; i <= iagemax+3; i++){ | if (s[m][i]>0 && s[m][i]<=nlstate) { | 
| for(jk=1,posprop=0; jk <=nlstate ; jk++) { | /*if(i>4620) printf(" i=%d m=%d s[m][i]=%d (int)agev[m][i]=%d weight[i]=%f prop=%f\n",i,m,s[m][i],(int)agev[m][m],weight[i],prop[s[m][i]][(int)agev[m][i]]);*/ | 
| posprop += prop[jk][i]; | prop[s[m][i]][(int)agev[m][i]] += weight[i];/* At age of beginning of transition, where status is known */ | 
| } | prop[s[m][i]][iagemax+3] += weight[i]; | 
| } /* end valid statuses */ | |
| for(jk=1; jk <=nlstate ; jk++){ | } /* end selection of dates */ | 
| if( i <= iagemax){ | } /* end selection of waves */ | 
| if(posprop>=1.e-5){ | } /* end bool */ | 
| probs[i][jk][j1]= prop[jk][i]/posprop; | } /* end wave */ | 
| } else{ | } /* end individual */ | 
| if(first==1){ | for(i=iagemin; i <= iagemax+3; i++){ | 
| first=0; | for(jk=1,posprop=0; jk <=nlstate ; jk++) { | 
| 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]); | posprop += prop[jk][i]; | 
| } | } | 
| } | |
| } | for(jk=1; jk <=nlstate ; jk++){ | 
| }/* end jk */ | if( i <= iagemax){ | 
| }/* end i */ | if(posprop>=1.e-5){ | 
| probs[i][jk][j1]= prop[jk][i]/posprop; | |
| } else{ | |
| if(first==1){ | |
| first=0; | |
| printf("Warning Observed prevalence probs[%d][%d][%d]=%lf because of lack of cases\nSee others in log file...\n",jk,i,j1,probs[i][jk][j1]); | |
| } | |
| } | |
| } | |
| }/* end jk */ | |
| }/* end i */ | |
| /*} *//* end i1 */ | /*} *//* end i1 */ | 
| } /* end j1 */ | } /* 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);*/ | 
| free_matrix(prop,1,nlstate, iagemin-AGEMARGE,iagemax+3+AGEMARGE); | free_matrix(prop,1,nlstate, iagemin-AGEMARGE,iagemax+3+AGEMARGE); | 
| } /* End of prevalence */ | } /* End of prevalence */ | 
| /************* Waves Concatenation ***************/ | /************* Waves Concatenation ***************/ | 
| Line 4281 void concatwav(int wav[], int **dh, int | Line 4511 void concatwav(int wav[], int **dh, int | 
| mw[mi][i] is the mi (mi=1 to wav[i]) effective wave of individual i | mw[mi][i] is the mi (mi=1 to wav[i]) effective wave of individual i | 
| dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i] | dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i] | 
| and mw[mi+1][i]. dh depends on stepm. | and mw[mi+1][i]. dh depends on stepm. | 
| */ | */ | 
| int i=0, mi=0, m=0, mli=0; | int i=0, mi=0, m=0, mli=0; | 
| /* int j, k=0,jk, ju, jl,jmin=1e+5, jmax=-1; | /* int j, k=0,jk, ju, jl,jmin=1e+5, jmax=-1; | 
| Line 4300 void concatwav(int wav[], int **dh, int | Line 4530 void concatwav(int wav[], int **dh, int | 
| /* Treating live states */ | /* Treating live states */ | 
| for(i=1; i<=imx; i++){ /* For simple cases and if state is death */ | for(i=1; i<=imx; i++){ /* For simple cases and if state is death */ | 
| mi=0; /* First valid wave */ | mi=0; /* First valid wave */ | 
| mli=0; /* Last valid wave */ | mli=0; /* Last valid wave */ | 
| m=firstpass; | m=firstpass; | 
| while(s[m][i] <= nlstate){ /* a live state */ | while(s[m][i] <= nlstate){ /* a live state */ | 
| if(m >firstpass && s[m][i]==s[m-1][i] && mint[m][i]==mint[m-1][i] && anint[m][i]==anint[m-1][i]){/* Two succesive identical information on wave m */ | if(m >firstpass && s[m][i]==s[m-1][i] && mint[m][i]==mint[m-1][i] && anint[m][i]==anint[m-1][i]){/* Two succesive identical information on wave m */ | 
| mli=m-1;/* mw[++mi][i]=m-1; */ | mli=m-1;/* mw[++mi][i]=m-1; */ | 
| }else if(s[m][i]>=1 || s[m][i]==-4 || s[m][i]==-5){ /* Since 0.98r4 if status=-2 vital status is really unknown, wave should be skipped */ | }else if(s[m][i]>=1 || s[m][i]==-4 || s[m][i]==-5){ /* Since 0.98r4 if status=-2 vital status is really unknown, wave should be skipped */ | 
| mw[++mi][i]=m; | mw[++mi][i]=m; | 
| mli=m; | mli=m; | 
| } /* else might be a useless wave -1 and mi is not incremented and mw[mi] not updated */ | } /* else might be a useless wave -1 and mi is not incremented and mw[mi] not updated */ | 
| if(m < lastpass){ /* m < lastpass, standard case */ | if(m < lastpass){ /* m < lastpass, standard case */ | 
| m++; /* mi gives the "effective" current wave, m the current wave, go to next wave by incrementing m */ | m++; /* mi gives the "effective" current wave, m the current wave, go to next wave by incrementing m */ | 
| } | } | 
| else{ /* m >= lastpass, eventual special issue with warning */ | else{ /* m >= lastpass, eventual special issue with warning */ | 
| #ifdef UNKNOWNSTATUSNOTCONTRIBUTING | #ifdef UNKNOWNSTATUSNOTCONTRIBUTING | 
| break; | break; | 
| #else | #else | 
| if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ | if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ | 
| if(firsthree == 0){ | if(firsthree == 0){ | 
| printf("Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as pi. .\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); | printf("Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as pi. .\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); | 
| firsthree=1; | firsthree=1; | 
| } | } | 
| fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as pi. .\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); | fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as pi. .\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); | 
| mw[++mi][i]=m; | mw[++mi][i]=m; | 
| mli=m; | mli=m; | 
| } | } | 
| if(s[m][i]==-2){ /* Vital status is really unknown */ | if(s[m][i]==-2){ /* Vital status is really unknown */ | 
| nbwarn++; | nbwarn++; | 
| if((int)anint[m][i] == 9999){ /* Has the vital status really been verified? */ | if((int)anint[m][i] == 9999){ /* Has the vital status really been verified? */ | 
| printf("Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); | printf("Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); | 
| fprintf(ficlog,"Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); | fprintf(ficlog,"Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); | 
| } | } | 
| break; | break; | 
| } | } | 
| break; | break; | 
| #endif | #endif | 
| }/* End m >= lastpass */ | }/* End m >= lastpass */ | 
| }/* end while */ | }/* end while */ | 
| /* mi is the last effective wave, m is lastpass, mw[j][i] gives the # of j-th effective wave for individual i */ | /* mi is the last effective wave, m is lastpass, mw[j][i] gives the # of j-th effective wave for individual i */ | 
| /* After last pass */ | /* After last pass */ | 
| /* Treating death states */ | /* Treating death states */ | 
| if (s[m][i] > nlstate){ /* In a death state */ | if (s[m][i] > nlstate){ /* In a death state */ | 
| /* if( mint[m][i]==mdc[m][i] && anint[m][i]==andc[m][i]){ /\* same date of death and date of interview *\/ */ | /* if( mint[m][i]==mdc[m][i] && anint[m][i]==andc[m][i]){ /\* same date of death and date of interview *\/ */ | 
| /* } */ | /* } */ | 
| mi++; /* Death is another wave */ | mi++; /* Death is another wave */ | 
| /* if(mi==0) never been interviewed correctly before death */ | /* if(mi==0) never been interviewed correctly before death */ | 
| /* Only death is a correct wave */ | /* Only death is a correct wave */ | 
| mw[mi][i]=m; | mw[mi][i]=m; | 
| } | } | 
| #ifndef DISPATCHINGKNOWNDEATHAFTERLASTWAVE | #ifndef DISPATCHINGKNOWNDEATHAFTERLASTWAVE | 
| else if ((int) andc[i] != 9999) { /* Status is negative. A death occured after lastpass, we can't take it into account because of potential bias */ | else if ((int) andc[i] != 9999) { /* Status is negative. A death occured after lastpass, we can't take it into account because of potential bias */ | 
| /* m++; */ | /* m++; */ | 
| /* mi++; */ | /* mi++; */ | 
| /* s[m][i]=nlstate+1; /\* We are setting the status to the last of non live state *\/ */ | /* s[m][i]=nlstate+1; /\* We are setting the status to the last of non live state *\/ */ | 
| /* mw[mi][i]=m; */ | /* mw[mi][i]=m; */ | 
| if ((int)anint[m][i]!= 9999) { /* date of last interview is known */ | if ((int)anint[m][i]!= 9999) { /* date of last interview is known */ | 
| if((andc[i]+moisdc[i]/12.) <=(anint[m][i]+mint[m][i]/12.)){ /* death occured before last wave and status should have been death instead of -1 */ | if((andc[i]+moisdc[i]/12.) <=(anint[m][i]+mint[m][i]/12.)){ /* death occured before last wave and status should have been death instead of -1 */ | 
| nbwarn++; | nbwarn++; | 
| if(firstfiv==0){ | if(firstfiv==0){ | 
| printf("Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d interviewed at %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); | printf("Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d interviewed at %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); | 
| firstfiv=1; | firstfiv=1; | 
| }else{ | }else{ | 
| fprintf(ficlog,"Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d interviewed at %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); | fprintf(ficlog,"Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d interviewed at %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); | 
| } | } | 
| }else{ /* Death occured afer last wave potential bias */ | }else{ /* Death occured afer last wave potential bias */ | 
| nberr++; | nberr++; | 
| if(firstwo==0){ | if(firstwo==0){ | 
| printf("Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | printf("Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | 
| firstwo=1; | firstwo=1; | 
| } | } | 
| fprintf(ficlog,"Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | fprintf(ficlog,"Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | 
| } | } | 
| }else{ /* end date of interview is known */ | }else{ /* end date of interview is known */ | 
| /* death is known but not confirmed by death status at any wave */ | /* death is known but not confirmed by death status at any wave */ | 
| if(firstfour==0){ | if(firstfour==0){ | 
| printf("Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | printf("Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | 
| firstfour=1; | firstfour=1; | 
| } | } | 
| fprintf(ficlog,"Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | fprintf(ficlog,"Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | 
| } | } | 
| } /* end if date of death is known */ | } /* end if date of death is known */ | 
| #endif | #endif | 
| Line 4387 void concatwav(int wav[], int **dh, int | Line 4617 void concatwav(int wav[], int **dh, int | 
| if(mi==0){ | if(mi==0){ | 
| nbwarn++; | nbwarn++; | 
| if(first==0){ | if(first==0){ | 
| printf("Warning! No valid information for individual %ld line=%d (skipped) and may be others, see log file\n",num[i],i); | printf("Warning! No valid information for individual %ld line=%d (skipped) and may be others, see log file\n",num[i],i); | 
| first=1; | first=1; | 
| } | } | 
| if(first==1){ | if(first==1){ | 
| fprintf(ficlog,"Warning! No valid information for individual %ld line=%d (skipped)\n",num[i],i); | fprintf(ficlog,"Warning! No valid information for individual %ld line=%d (skipped)\n",num[i],i); | 
| } | } | 
| } /* end mi==0 */ | } /* end mi==0 */ | 
| } /* End individuals */ | } /* End individuals */ | 
| Line 4401 void concatwav(int wav[], int **dh, int | Line 4631 void concatwav(int wav[], int **dh, int | 
| for(i=1; i<=imx; i++){ | for(i=1; i<=imx; i++){ | 
| for(mi=1; mi<wav[i];mi++){ | for(mi=1; mi<wav[i];mi++){ | 
| if (stepm <=0) | if (stepm <=0) | 
| dh[mi][i]=1; | dh[mi][i]=1; | 
| else{ | else{ | 
| if (s[mw[mi+1][i]][i] > nlstate) { /* A death */ | if (s[mw[mi+1][i]][i] > nlstate) { /* A death */ | 
| if (agedc[i] < 2*AGESUP) { | if (agedc[i] < 2*AGESUP) { | 
| j= rint(agedc[i]*12-agev[mw[mi][i]][i]*12); | j= rint(agedc[i]*12-agev[mw[mi][i]][i]*12); | 
| if(j==0) j=1; /* Survives at least one month after exam */ | if(j==0) j=1; /* Survives at least one month after exam */ | 
| else if(j<0){ | else if(j<0){ | 
| nberr++; | nberr++; | 
| printf("Error! Negative delay (%d to death) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); | printf("Error! Negative delay (%d to death) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); | 
| j=1; /* Temporary Dangerous patch */ | j=1; /* Temporary Dangerous patch */ | 
| printf(" We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview. You MUST fix the contradiction between dates.\n",stepm); | printf(" We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview. You MUST fix the contradiction between dates.\n",stepm); | 
| fprintf(ficlog,"Error! Negative delay (%d to death) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); | fprintf(ficlog,"Error! Negative delay (%d to death) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); | 
| fprintf(ficlog," We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview. You MUST fix the contradiction between dates.\n",stepm); | fprintf(ficlog," We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview. You MUST fix the contradiction between dates.\n",stepm); | 
| } | } | 
| k=k+1; | k=k+1; | 
| if (j >= jmax){ | if (j >= jmax){ | 
| jmax=j; | jmax=j; | 
| ijmax=i; | ijmax=i; | 
| } | } | 
| if (j <= jmin){ | if (j <= jmin){ | 
| jmin=j; | jmin=j; | 
| ijmin=i; | ijmin=i; | 
| } | } | 
| sum=sum+j; | sum=sum+j; | 
| /*if (j<0) printf("j=%d num=%d \n",j,i);*/ | /*if (j<0) printf("j=%d num=%d \n",j,i);*/ | 
| /* printf("%d %d %d %d\n", s[mw[mi][i]][i] ,s[mw[mi+1][i]][i],j,i);*/ | /* printf("%d %d %d %d\n", s[mw[mi][i]][i] ,s[mw[mi+1][i]][i],j,i);*/ | 
| } | } | 
| } | } | 
| else{ | else{ | 
| j= rint( (agev[mw[mi+1][i]][i]*12 - agev[mw[mi][i]][i]*12)); | j= rint( (agev[mw[mi+1][i]][i]*12 - agev[mw[mi][i]][i]*12)); | 
| /* if (j<0) printf("%d %lf %lf %d %d %d\n", i,agev[mw[mi+1][i]][i], agev[mw[mi][i]][i],j,s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); */ | /* if (j<0) printf("%d %lf %lf %d %d %d\n", i,agev[mw[mi+1][i]][i], agev[mw[mi][i]][i],j,s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); */ | 
| k=k+1; | k=k+1; | 
| if (j >= jmax) { | if (j >= jmax) { | 
| jmax=j; | jmax=j; | 
| ijmax=i; | ijmax=i; | 
| } | } | 
| else if (j <= jmin){ | else if (j <= jmin){ | 
| jmin=j; | jmin=j; | 
| ijmin=i; | ijmin=i; | 
| } | } | 
| /* if (j<10) printf("j=%d jmin=%d num=%d ",j,jmin,i); */ | /* if (j<10) printf("j=%d jmin=%d num=%d ",j,jmin,i); */ | 
| /*printf("%d %lf %d %d %d\n", i,agev[mw[mi][i]][i],j,s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]);*/ | /*printf("%d %lf %d %d %d\n", i,agev[mw[mi][i]][i],j,s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]);*/ | 
| if(j<0){ | if(j<0){ | 
| nberr++; | nberr++; | 
| printf("Error! Negative delay (%d) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); | printf("Error! Negative delay (%d) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); | 
| fprintf(ficlog,"Error! Negative delay (%d) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); | fprintf(ficlog,"Error! Negative delay (%d) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); | 
| } | } | 
| sum=sum+j; | sum=sum+j; | 
| } | } | 
| jk= j/stepm; | jk= j/stepm; | 
| jl= j -jk*stepm; | jl= j -jk*stepm; | 
| ju= j -(jk+1)*stepm; | ju= j -(jk+1)*stepm; | 
| if(mle <=1){ /* only if we use a the linear-interpoloation pseudo-likelihood */ | if(mle <=1){ /* only if we use a the linear-interpoloation pseudo-likelihood */ | 
| if(jl==0){ | if(jl==0){ | 
| dh[mi][i]=jk; | dh[mi][i]=jk; | 
| bh[mi][i]=0; | bh[mi][i]=0; | 
| }else{ /* We want a negative bias in order to only have interpolation ie | }else{ /* We want a negative bias in order to only have interpolation ie | 
| * to avoid the price of an extra matrix product in likelihood */ | * to avoid the price of an extra matrix product in likelihood */ | 
| dh[mi][i]=jk+1; | dh[mi][i]=jk+1; | 
| bh[mi][i]=ju; | bh[mi][i]=ju; | 
| } | } | 
| }else{ | }else{ | 
| if(jl <= -ju){ | if(jl <= -ju){ | 
| dh[mi][i]=jk; | dh[mi][i]=jk; | 
| bh[mi][i]=jl; /* bias is positive if real duration | bh[mi][i]=jl; /* bias is positive if real duration | 
| * is higher than the multiple of stepm and negative otherwise. | * is higher than the multiple of stepm and negative otherwise. | 
| */ | */ | 
| } | } | 
| else{ | else{ | 
| dh[mi][i]=jk+1; | dh[mi][i]=jk+1; | 
| bh[mi][i]=ju; | bh[mi][i]=ju; | 
| } | } | 
| if(dh[mi][i]==0){ | if(dh[mi][i]==0){ | 
| dh[mi][i]=1; /* At least one step */ | dh[mi][i]=1; /* At least one step */ | 
| bh[mi][i]=ju; /* At least one step */ | bh[mi][i]=ju; /* At least one step */ | 
| /* printf(" bh=%d ju=%d jl=%d dh=%d jk=%d stepm=%d %d\n",bh[mi][i],ju,jl,dh[mi][i],jk,stepm,i);*/ | /* printf(" bh=%d ju=%d jl=%d dh=%d jk=%d stepm=%d %d\n",bh[mi][i],ju,jl,dh[mi][i],jk,stepm,i);*/ | 
| } | } | 
| } /* end if mle */ | } /* end if mle */ | 
| } | } | 
| } /* end wave */ | } /* end wave */ | 
| } | } | 
| jmean=sum/k; | jmean=sum/k; | 
| printf("Delay (in months) between two waves Min=%d (for indiviudal %ld) Max=%d (%ld) Mean=%f\n\n ",jmin, num[ijmin], jmax, num[ijmax], jmean); | printf("Delay (in months) between two waves Min=%d (for indiviudal %ld) Max=%d (%ld) Mean=%f\n\n ",jmin, num[ijmin], jmax, num[ijmax], jmean); | 
| fprintf(ficlog,"Delay (in months) between two waves Min=%d (for indiviudal %d) Max=%d (%d) Mean=%f\n\n ",jmin, ijmin, jmax, ijmax, jmean); | fprintf(ficlog,"Delay (in months) between two waves Min=%d (for indiviudal %d) Max=%d (%d) Mean=%f\n\n ",jmin, ijmin, jmax, ijmax, jmean); | 
| } | } | 
| /*********** Tricode ****************************/ | /*********** Tricode ****************************/ | 
| void tricode(int *cptcov, int *Tvar, int **nbcode, int imx, int *Ndum) | void tricode(int *cptcov, int *Tvar, int **nbcode, int imx, int *Ndum) | 
| Line 4511 void concatwav(int wav[], int **dh, int | Line 4741 void concatwav(int wav[], int **dh, int | 
| /* Loop on covariates without age and products and no quantitative variable */ | /* Loop on covariates without age and products and no quantitative variable */ | 
| /* for (j=1; j<=(cptcovs); j++) { /\* From model V1 + V2*age+ V3 + V3*V4 keeps V1 + V3 = 2 only *\/ */ | /* for (j=1; j<=(cptcovs); j++) { /\* From model V1 + V2*age+ V3 + V3*V4 keeps V1 + V3 = 2 only *\/ */ | 
| for (j=1; j<=cptcovsnq; j++) { /* From model V1 + V2*age + V3 + V3*V4 keeps V1 + V3 = 2 only */ | for (k=1; k<=cptcovt; k++) { /* From model V1 + V2*age + V3 + V3*V4 keeps V1 + V3 = 2 only */ | 
| for (k=-1; k < maxncov; k++) Ndum[k]=0; | for (j=-1; (j < maxncov); j++) Ndum[j]=0; | 
| for (i=1; i<=imx; i++) { /* Loop on individuals: reads the data file to get the maximum value of the | if(Dummy[k]==0 && Typevar[k] !=1){ /* Dummy covariate and not age product */ | 
| modality of this covariate Vj*/ | switch(Fixed[k]) { | 
| switch(Typevar[j]) { | case 0: /* Testing on fixed dummy covariate, simple or product of fixed */ | 
| case 1: /* A real fixed dummy covariate */ | for (i=1; i<=imx; i++) { /* Loop on individuals: reads the data file to get the maximum value of the modality of this covariate Vj*/ | 
| ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i | ij=(int)(covar[Tvar[k]][i]); | 
| * If product of Vn*Vm, still boolean *: | /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i | 
| * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables | * If product of Vn*Vm, still boolean *: | 
| * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0 */ | * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables | 
| /* Finds for covariate j, n=Tvar[j] of Vn . ij is the | * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0 */ | 
| modality of the nth covariate of individual i. */ | /* Finds for covariate j, n=Tvar[j] of Vn . ij is the | 
| if (ij > modmaxcovj) | modality of the nth covariate of individual i. */ | 
| modmaxcovj=ij; | if (ij > modmaxcovj) | 
| else if (ij < modmincovj) | modmaxcovj=ij; | 
| modmincovj=ij; | else if (ij < modmincovj) | 
| if ((ij < -1) && (ij > NCOVMAX)){ | modmincovj=ij; | 
| printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); | if ((ij < -1) && (ij > NCOVMAX)){ | 
| exit(1); | printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); | 
| }else | exit(1); | 
| Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ | }else | 
| /* If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */ | Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ | 
| /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ | /* If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */ | 
| /* getting the maximum value of the modality of the covariate | /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ | 
| (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and | /* getting the maximum value of the modality of the covariate | 
| female ies 1, then modmaxcovj=1.*/ | (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and | 
| break; | female ies 1, then modmaxcovj=1. | 
| case 2: | */ | 
| break; | } /* end for loop on individuals i */ | 
| printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj); | |
| } | fprintf(ficlog," Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj); | 
| } /* end for loop on individuals i */ | cptcode=modmaxcovj; | 
| printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); | /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ | 
| fprintf(ficlog," Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); | /*for (i=0; i<=cptcode; i++) {*/ | 
| cptcode=modmaxcovj; | for (j=modmincovj; j<=modmaxcovj; j++) { /* j=-1 ? 0 and 1*//* For each value j of the modality of model-cov k */ | 
| /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ | printf("Frequencies of covariates %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]); | 
| /*for (i=0; i<=cptcode; i++) {*/ | fprintf(ficlog, "Frequencies of covariates %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]); | 
| for (k=modmincovj; k<=modmaxcovj; k++) { /* k=-1 ? 0 and 1*//* For each value k of the modality of model-cov j */ | if( Ndum[j] != 0 ){ /* Counts if nobody answered modality j ie empty modality, we skip it and reorder */ | 
| printf("Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], k, Ndum[k]); | if( j != -1){ | 
| fprintf(ficlog, "Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], k, Ndum[k]); | ncodemax[k]++; /* ncodemax[k]= Number of modalities of the k th | 
| if( Ndum[k] != 0 ){ /* Counts if nobody answered modality k ie empty modality, we skip it and reorder */ | covariate for which somebody answered excluding | 
| if( k != -1){ | undefined. Usually 2: 0 and 1. */ | 
| ncodemax[j]++; /* ncodemax[j]= Number of modalities of the j th | } | 
| covariate for which somebody answered excluding | ncodemaxwundef[k]++; /* ncodemax[j]= Number of modalities of the k th | 
| undefined. Usually 2: 0 and 1. */ | covariate for which somebody answered including | 
| } | undefined. Usually 3: -1, 0 and 1. */ | 
| ncodemaxwundef[j]++; /* ncodemax[j]= Number of modalities of the j th | } /* In fact ncodemax[k]=2 (dichotom. variables only) but it could be more for | 
| covariate for which somebody answered including | * historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ | 
| undefined. Usually 3: -1, 0 and 1. */ | } /* Ndum[-1] number of undefined modalities */ | 
| } | |
| /* In fact ncodemax[j]=2 (dichotom. variables only) but it could be more for | /* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */ | 
| * historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ | /* For covariate j, modalities could be 1, 2, 3, 4, 5, 6, 7. */ | 
| } /* Ndum[-1] number of undefined modalities */ | /* If Ndum[1]=0, Ndum[2]=0, Ndum[3]= 635, Ndum[4]=0, Ndum[5]=0, Ndum[6]=27, Ndum[7]=125; */ | 
| /* modmincovj=3; modmaxcovj = 7; */ | |
| /* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */ | /* There are only 3 modalities non empty 3, 6, 7 (or 2 if 27 is too few) : ncodemax[j]=3; */ | 
| /* For covariate j, modalities could be 1, 2, 3, 4, 5, 6, 7. | /* which will be coded 0, 1, 2 which in binary on 2=3-1 digits are 0=00 1=01, 2=10; */ | 
| If Ndum[1]=0, Ndum[2]=0, Ndum[3]= 635, Ndum[4]=0, Ndum[5]=0, Ndum[6]=27, Ndum[7]=125; | /* defining two dummy variables: variables V1_1 and V1_2.*/ | 
| modmincovj=3; modmaxcovj = 7; | /* nbcode[Tvar[j]][ij]=k; */ | 
| There are only 3 modalities non empty 3, 6, 7 (or 2 if 27 is too few) : ncodemax[j]=3; | /* nbcode[Tvar[j]][1]=0; */ | 
| which will be coded 0, 1, 2 which in binary on 2=3-1 digits are 0=00 1=01, 2=10; | /* nbcode[Tvar[j]][2]=1; */ | 
| defining two dummy variables: variables V1_1 and V1_2. | /* nbcode[Tvar[j]][3]=2; */ | 
| nbcode[Tvar[j]][ij]=k; | /* To be continued (not working yet). */ | 
| nbcode[Tvar[j]][1]=0; | ij=0; /* ij is similar to i but can jump over null modalities */ | 
| nbcode[Tvar[j]][2]=1; | for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/ | 
| nbcode[Tvar[j]][3]=2; | if (Ndum[i] == 0) { /* If nobody responded to this modality k */ | 
| To be continued (not working yet). | break; | 
| */ | } | 
| ij=0; /* ij is similar to i but can jump over null modalities */ | ij++; | 
| for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/ | nbcode[Tvar[k]][ij]=i; /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality. nbcode[1][1]=0 nbcode[1][2]=1*/ | 
| if (Ndum[i] == 0) { /* If nobody responded to this modality k */ | cptcode = ij; /* New max modality for covar j */ | 
| break; | } /* end of loop on modality i=-1 to 1 or more */ | 
| } | break; | 
| ij++; | case 1: /* Testing on varying covariate, could be simple and | 
| nbcode[Tvar[j]][ij]=i; /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality.*/ | * should look at waves or product of fixed * | 
| cptcode = ij; /* New max modality for covar j */ | * varying. No time to test -1, assuming 0 and 1 only */ | 
| } /* end of loop on modality i=-1 to 1 or more */ | ij=0; | 
| for(i=0; i<=1;i++){ | |
| nbcode[Tvar[k]][++ij]=i; | |
| } | |
| break; | |
| default: | |
| break; | |
| } /* end switch */ | |
| } /* end dummy test */ | |
| /* for (k=0; k<= cptcode; k++) { /\* k=-1 ? k=0 to 1 *\//\* Could be 1 to 4 *\//\* cptcode=modmaxcovj *\/ */ | /* for (k=0; k<= cptcode; k++) { /\* k=-1 ? k=0 to 1 *\//\* Could be 1 to 4 *\//\* cptcode=modmaxcovj *\/ */ | 
| /* /\*recode from 0 *\/ */ | /* /\*recode from 0 *\/ */ | 
| Line 4604 void concatwav(int wav[], int **dh, int | Line 4842 void concatwav(int wav[], int **dh, int | 
| } /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ | } /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ | 
| for (k=-1; k< maxncov; k++) Ndum[k]=0; | for (k=-1; k< maxncov; k++) Ndum[k]=0; | 
| /* Look at fixed dummy (single or product) covariates to check empty modalities */ | |
| for (i=1; i<=ncovmodel-2-nagesqr; i++) { /* -2, cste and age and eventually age*age */ | for (i=1; i<=ncovmodel-2-nagesqr; i++) { /* -2, cste and age and eventually age*age */ | 
| /* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/ | /* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/ | 
| ij=Tvar[i]; /* Tvar might be -1 if status was unknown */ | ij=Tvar[i]; /* Tvar 5,4,3,6,5,7,1,4 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V4*age */ | 
| Ndum[ij]++; /* Might be supersed V1 + V1*age */ | Ndum[ij]++; /* Count the # of 1, 2 etc: {1,1,1,2,2,1,1} because V1 once, V2 once, two V4 and V5 in above */ | 
| /* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, {2, 1, 1, 1, 2, 1, 1, 0, 0} */ | |
| } /* V4+V3+V5, Ndum[1]@5={0, 0, 1, 1, 1} */ | } /* V4+V3+V5, Ndum[1]@5={0, 0, 1, 1, 1} */ | 
| ij=0; | ij=0; | 
| for (i=0; i<= maxncov-1; i++) { /* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) */ | /* for (i=0; i<= maxncov-1; i++) { /\* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) *\/ */ | 
| for (k=1; k<= cptcovt; k++) { /* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) */ | |
| /*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/ | /*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/ | 
| if((Ndum[i]!=0) && (i<=ncovcol)){ | /* if((Ndum[i]!=0) && (i<=ncovcol)){ /\* Tvar[i] <= ncovmodel ? *\/ */ | 
| if(Ndum[Tvar[k]]!=0 && Dummy[k] == 0 && Typevar[k]==0){ /* Only Dummy and non empty in the model */ | |
| /* If product not in single variable we don't print results */ | |
| /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ | /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ | 
| Tvaraff[++ij]=i; /*For printing (unclear) */ | ++ij;/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, */ | 
| }else if((Ndum[i]!=0) && (i<=ncovcol+nqv)){ | Tvaraff[ij]=Tvar[k]; /* For printing combination *//* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, Tvar {5, 4, 3, 6, 5, 2, 7, 1, 1} Tvaraff={4, 3, 1} V4, V3, V1*/ | 
| Tvaraff[++ij]=-10; /* Dont'n know how to treat quantitative variables yet */ | Tmodelind[ij]=k; /* Tmodelind: index in model of dummies Tmodelind[1]=2 V4: pos=2; V3: pos=3, V1=9 {2, 3, 9, ?, ?,} */ | 
| }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv)){ | TmodelInvind[ij]=Tvar[k]- ncovcol-nqv; /* Inverse TmodelInvind[2=V4]=2 second dummy varying cov (V4)4-1-1 {0, 2, 1, } TmodelInvind[3]=1 */ | 
| Tvaraff[++ij]=i; /*For printing (unclear) */ | if(Fixed[k]!=0) | 
| }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv+nqtv)){ | anyvaryingduminmodel=1; | 
| Tvaraff[++ij]=-20; /* Dont'n know how to treat quantitative variables yet */ | /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv)){ */ | 
| } | /* Tvaraff[++ij]=-10; /\* Dont'n know how to treat quantitative variables yet *\/ */ | 
| /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv)){ */ | |
| /* Tvaraff[++ij]=i; /\*For printing (unclear) *\/ */ | |
| /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv+nqtv)){ */ | |
| /* Tvaraff[++ij]=-20; /\* Dont'n know how to treat quantitative variables yet *\/ */ | |
| } | |
| } /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */ | } /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */ | 
| /* ij--; */ | /* ij--; */ | 
| /* cptcoveff=ij; /\*Number of total covariates*\/ */ | /* cptcoveff=ij; /\*Number of total covariates*\/ */ | 
| *cptcov=ij; /*Number of total real effective covariates: effective | *cptcov=ij; /*Number of total real effective covariates: effective | 
| * because they can be excluded from the model and real | * because they can be excluded from the model and real | 
| * if in the model but excluded because missing values*/ | * if in the model but excluded because missing values, but how to get k from ij?*/ | 
| for(j=ij+1; j<= cptcovt; j++){ | |
| Tvaraff[j]=0; | |
| Tmodelind[j]=0; | |
| } | |
| for(j=ntveff+1; j<= cptcovt; j++){ | |
| TmodelInvind[j]=0; | |
| } | |
| /* To be sorted */ | |
| ; | |
| } | } | 
| /*********** Health Expectancies ****************/ | /*********** Health Expectancies ****************/ | 
| void evsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[] ) | void evsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[], int nres ) | 
| { | { | 
| /* Health expectancies, no variances */ | /* Health expectancies, no variances */ | 
| Line 4708 void evsij(double ***eij, double x[], in | Line 4964 void evsij(double ***eij, double x[], in | 
| /* Computed by stepm unit matrices, product of hstepma matrices, stored | /* Computed by stepm unit matrices, product of hstepma matrices, stored | 
| in an array of nhstepma length: nhstepma=10, hstepm=4, stepm=6 months */ | in an array of nhstepma length: nhstepma=10, hstepm=4, stepm=6 months */ | 
| hpxij(p3mat,nhstepma,age,hstepm,x,nlstate,stepm,oldm, savm, cij); | hpxij(p3mat,nhstepma,age,hstepm,x,nlstate,stepm,oldm, savm, cij, nres); | 
| hf=hstepm*stepm/YEARM; /* Duration of hstepm expressed in year unit. */ | hf=hstepm*stepm/YEARM; /* Duration of hstepm expressed in year unit. */ | 
| Line 4743 void evsij(double ***eij, double x[], in | Line 4999 void evsij(double ***eij, double x[], in | 
| } | } | 
| void cvevsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,double delti[],double **matcov,char strstart[] ) | void cvevsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,double delti[],double **matcov,char strstart[], int nres ) | 
| { | { | 
| /* Covariances of health expectancies eij and of total life expectancies according | /* Covariances of health expectancies eij and of total life expectancies according | 
| Line 4856 void cvevsij(double ***eij, double x[], | Line 5112 void cvevsij(double ***eij, double x[], | 
| xp[i] = x[i] + (i==theta ?delti[theta]:0); | xp[i] = x[i] + (i==theta ?delti[theta]:0); | 
| xm[i] = x[i] - (i==theta ?delti[theta]:0); | xm[i] = x[i] - (i==theta ?delti[theta]:0); | 
| } | } | 
| hpxij(p3matp,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, cij); | hpxij(p3matp,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, cij, nres); | 
| hpxij(p3matm,nhstepm,age,hstepm,xm,nlstate,stepm,oldm,savm, cij); | hpxij(p3matm,nhstepm,age,hstepm,xm,nlstate,stepm,oldm,savm, cij, nres); | 
| for(j=1; j<= nlstate; j++){ | for(j=1; j<= nlstate; j++){ | 
| for(i=1; i<=nlstate; i++){ | for(i=1; i<=nlstate; i++){ | 
| Line 4898 void cvevsij(double ***eij, double x[], | Line 5154 void cvevsij(double ***eij, double x[], | 
| } | } | 
| /* Computing expectancies */ | /* Computing expectancies */ | 
| hpxij(p3matm,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, cij); | hpxij(p3matm,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, cij,nres); | 
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) | 
| for(j=1; j<=nlstate;j++) | for(j=1; j<=nlstate;j++) | 
| for (h=0, eij[i][j][(int)age]=0; h<=nhstepm-1; h++){ | for (h=0, eij[i][j][(int)age]=0; h<=nhstepm-1; h++){ | 
| Line 4953 void cvevsij(double ***eij, double x[], | Line 5209 void cvevsij(double ***eij, double x[], | 
| } | } | 
| /************ Variance ******************/ | /************ Variance ******************/ | 
| void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, int estepm, int cptcov, int cptcod, int popbased, int mobilav, char strstart[]) | void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, int estepm, int cptcov, int cptcod, int popbased, int mobilav, char strstart[], int nres) | 
| { | { | 
| /* Variance of health expectancies */ | /* Variance of health expectancies */ | 
| /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double ** savm,double ftolpl);*/ | /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double ** savm,double ftolpl);*/ | 
| Line 5079 void cvevsij(double ***eij, double x[], | Line 5335 void cvevsij(double ***eij, double x[], | 
| xp[i] = x[i] + (i==theta ?delti[theta]:0); | xp[i] = x[i] + (i==theta ?delti[theta]:0); | 
| } | } | 
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij, nresult); | 
| if (popbased==1) { | if (popbased==1) { | 
| if(mobilav ==0){ | if(mobilav ==0){ | 
| Line 5091 void cvevsij(double ***eij, double x[], | Line 5347 void cvevsij(double ***eij, double x[], | 
| } | } | 
| } | } | 
| hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij); /* Returns p3mat[i][j][h] for h=1 to nhstepm */ | hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij,nres); /* Returns p3mat[i][j][h] for h=1 to nhstepm */ | 
| for(j=1; j<= nlstate; j++){ | for(j=1; j<= nlstate; j++){ | 
| for(h=0; h<=nhstepm; h++){ | for(h=0; h<=nhstepm; h++){ | 
| for(i=1, gp[h][j]=0.;i<=nlstate;i++) | for(i=1, gp[h][j]=0.;i<=nlstate;i++) | 
| Line 5111 void cvevsij(double ***eij, double x[], | Line 5367 void cvevsij(double ***eij, double x[], | 
| for(i=1; i<=npar; i++) /* Computes gradient x - delta */ | for(i=1; i<=npar; i++) /* Computes gradient x - delta */ | 
| xp[i] = x[i] - (i==theta ?delti[theta]:0); | xp[i] = x[i] - (i==theta ?delti[theta]:0); | 
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp, ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp, ij, nresult); | 
| if (popbased==1) { | if (popbased==1) { | 
| if(mobilav ==0){ | if(mobilav ==0){ | 
| Line 5123 void cvevsij(double ***eij, double x[], | Line 5379 void cvevsij(double ***eij, double x[], | 
| } | } | 
| } | } | 
| hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij); | hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij,nres); | 
| for(j=1; j<= nlstate; j++){ /* Sum of wi * eij = e.j */ | for(j=1; j<= nlstate; j++){ /* Sum of wi * eij = e.j */ | 
| for(h=0; h<=nhstepm; h++){ | for(h=0; h<=nhstepm; h++){ | 
| Line 5188 void cvevsij(double ***eij, double x[], | Line 5444 void cvevsij(double ***eij, double x[], | 
| /* end ppptj */ | /* end ppptj */ | 
| /* x centered again */ | /* x centered again */ | 
| prevalim(prlim,nlstate,x,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,x,age,oldm,savm,ftolpl,ncvyearp,ij, nresult); | 
| if (popbased==1) { | if (popbased==1) { | 
| if(mobilav ==0){ | if(mobilav ==0){ | 
| Line 5204 void cvevsij(double ***eij, double x[], | Line 5460 void cvevsij(double ***eij, double x[], | 
| computed over hstepm (estepm) matrices product = hstepm*stepm months) | computed over hstepm (estepm) matrices product = hstepm*stepm months) | 
| as a weighted average of prlim. | as a weighted average of prlim. | 
| */ | */ | 
| hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm,savm, ij); | hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm,savm, ij, nres); | 
| for(j=nlstate+1;j<=nlstate+ndeath;j++){ | for(j=nlstate+1;j<=nlstate+ndeath;j++){ | 
| for(i=1,gmp[j]=0.;i<= nlstate; i++) | for(i=1,gmp[j]=0.;i<= nlstate; i++) | 
| gmp[j] += prlim[i][i]*p3mat[i][j][1]; | gmp[j] += prlim[i][i]*p3mat[i][j][1]; | 
| Line 5267 void cvevsij(double ***eij, double x[], | Line 5523 void cvevsij(double ***eij, double x[], | 
| } /* end varevsij */ | } /* end varevsij */ | 
| /************ Variance of prevlim ******************/ | /************ Variance of prevlim ******************/ | 
| void varprevlim(char fileres[], double **varpl, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, char strstart[]) | void varprevlim(char fileres[], double **varpl, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, char strstart[], int nres) | 
| { | { | 
| /* Variance of prevalence limit for each state ij using current parameters x[] and estimates of neighbourhood give by delti*/ | /* Variance of prevalence limit for each state ij using current parameters x[] and estimates of neighbourhood give by delti*/ | 
| /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double **savm,double ftolpl);*/ | /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double **savm,double ftolpl);*/ | 
| Line 5310 void cvevsij(double ***eij, double x[], | Line 5566 void cvevsij(double ***eij, double x[], | 
| xp[i] = x[i] + (i==theta ?delti[theta]:0); | xp[i] = x[i] + (i==theta ?delti[theta]:0); | 
| } | } | 
| if((int)age==79 ||(int)age== 80 ||(int)age== 81 ) | if((int)age==79 ||(int)age== 80 ||(int)age== 81 ) | 
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres); | 
| else | else | 
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres); | 
| for(i=1;i<=nlstate;i++){ | for(i=1;i<=nlstate;i++){ | 
| gp[i] = prlim[i][i]; | gp[i] = prlim[i][i]; | 
| mgp[theta][i] = prlim[i][i]; | mgp[theta][i] = prlim[i][i]; | 
| Line 5320 void cvevsij(double ***eij, double x[], | Line 5576 void cvevsij(double ***eij, double x[], | 
| for(i=1; i<=npar; i++) /* Computes gradient */ | for(i=1; i<=npar; i++) /* Computes gradient */ | 
| xp[i] = x[i] - (i==theta ?delti[theta]:0); | xp[i] = x[i] - (i==theta ?delti[theta]:0); | 
| if((int)age==79 ||(int)age== 80 ||(int)age== 81 ) | if((int)age==79 ||(int)age== 80 ||(int)age== 81 ) | 
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres); | 
| else | else | 
| prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij); | prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres); | 
| for(i=1;i<=nlstate;i++){ | for(i=1;i<=nlstate;i++){ | 
| gm[i] = prlim[i][i]; | gm[i] = prlim[i][i]; | 
| mgm[theta][i] = prlim[i][i]; | mgm[theta][i] = prlim[i][i]; | 
| Line 5779 void printinghtml(char fileresu[], char | Line 6035 void printinghtml(char fileresu[], char | 
| fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]); | fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]); | 
| printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout); | printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout); | 
| } | } | 
| /* if(nqfveff+nqtveff 0) */ /* Test to be done */ | |
| fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); | fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); | 
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ | 
| fprintf(fichtm,"\n<h3>Combination (%d) ignored because no cases </h3>\n",k1); | fprintf(fichtm,"\n<h3>Combination (%d) ignored because no cases </h3>\n",k1); | 
| Line 5925 void printinggnuplot(char fileresu[], ch | Line 6182 void printinggnuplot(char fileresu[], ch | 
| char dirfileres[132],optfileres[132]; | char dirfileres[132],optfileres[132]; | 
| char gplotcondition[132]; | char gplotcondition[132]; | 
| int cpt=0,k1=0,i=0,k=0,j=0,jk=0,k2=0,k3=0,ij=0,l=0; | int cpt=0,k1=0,i=0,k=0,j=0,jk=0,k2=0,k3=0,k4=0,ij=0,l=0; | 
| int lv=0, vlv=0, kl=0; | int lv=0, vlv=0, kl=0; | 
| int ng=0; | int ng=0; | 
| int vpopbased; | int vpopbased; | 
| int ioffset; /* variable offset for columns */ | int ioffset; /* variable offset for columns */ | 
| int nres=0; /* Index of resultline */ | |
| /* if((ficgp=fopen(optionfilegnuplot,"a"))==NULL) { */ | /* if((ficgp=fopen(optionfilegnuplot,"a"))==NULL) { */ | 
| /* printf("Problem with file %s",optionfilegnuplot); */ | /* printf("Problem with file %s",optionfilegnuplot); */ | 
| Line 5974 void printinggnuplot(char fileresu[], ch | Line 6232 void printinggnuplot(char fileresu[], ch | 
| strcpy(optfileres,"vpl"); | strcpy(optfileres,"vpl"); | 
| /* 1eme*/ | /* 1eme*/ | 
| for (cpt=1; cpt<= nlstate ; cpt ++) { /* For each live state */ | for (cpt=1; cpt<= nlstate ; cpt ++) { /* For each live state */ | 
| for (k1=1; k1<= m ; k1 ++) { /* For each valid combination of covariate */ | for (k1=1; k1<= m ; k1 ++) /* For each valid combination of covariate */ | 
| /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */ | for(nres=1; nres <= nresult; nres++){ /* For each resultline */ | 
| fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files "); | /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */ | 
| if(TKresult[nres]!= k1) | |
| continue; | |
| /* We are interested in selected combination by the resultline */ | |
| printf("\n# 1st: Period (stable) prevalence with CI: 'VPL_' files and live state =%d ", cpt); | |
| fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files and live state =%d ", cpt); | |
| for (k=1; k<=cptcoveff; k++){ /* For each covariate k get corresponding value lv for combination k1 */ | for (k=1; k<=cptcoveff; k++){ /* For each covariate k get corresponding value lv for combination k1 */ | 
| lv= decodtabm(k1,k,cptcoveff); /* Should be the value of the covariate corresponding to k1 combination */ | lv= decodtabm(k1,k,cptcoveff); /* Should be the value of the covariate corresponding to k1 combination */ | 
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | 
| Line 5984 void printinggnuplot(char fileresu[], ch | Line 6247 void printinggnuplot(char fileresu[], ch | 
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | 
| vlv= nbcode[Tvaraff[k]][lv]; /* vlv is the value of the covariate lv, 0 or 1 */ | vlv= nbcode[Tvaraff[k]][lv]; /* vlv is the value of the covariate lv, 0 or 1 */ | 
| /* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv */ | /* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv */ | 
| printf(" V%d=%d ",Tvaraff[k],vlv); | |
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | 
| } | } | 
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| printf("\n#\n"); | |
| fprintf(ficgp,"\n#\n"); | fprintf(ficgp,"\n#\n"); | 
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ | 
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | 
| continue; | continue; | 
| } | } | 
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"V_"),cpt,k1); | fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"V_"),cpt,k1); | 
| fprintf(ficgp,"\n#set out \"V_%s_%d-%d.svg\" \n",optionfilefiname,cpt,k1); | fprintf(ficgp,"\n#set out \"V_%s_%d-%d.svg\" \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 svg size 640, 480\n \ | set ter svg size 640, 480\n \ | 
| plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"%%lf",ageminpar,fage,subdirf2(fileresu,"VPL_"),k1-1,k1-1); | plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"%%lf",ageminpar,fage,subdirf2(fileresu,"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)"); | 
| Line 6033 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 6302 plot [%.f:%.f] \"%s\" every :::%d::%d u | 
| /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ | /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ | 
| /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/ | /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/ | 
| if(k==cptcoveff){ | if(k==cptcoveff){ | 
| fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' with line ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \ | fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \ | 
| 6+(cpt-1), cpt ); | 4+(cpt-1), cpt ); /* 4 or 6 ?*/ | 
| }else{ | }else{ | 
| fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv]); | fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv]); | 
| kl++; | kl++; | 
| Line 6045 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 6314 plot [%.f:%.f] \"%s\" every :::%d::%d u | 
| fprintf(ficgp,"\nset out \n"); | fprintf(ficgp,"\nset out \n"); | 
| } /* k1 */ | } /* k1 */ | 
| } /* cpt */ | } /* cpt */ | 
| /*2 eme*/ | |
| for (k1=1; k1<= m ; k1 ++) { | |
| /*2 eme*/ | |
| for (k1=1; k1<= m ; k1 ++) | |
| for(nres=1; nres <= nresult; nres++){ /* For each resultline */ | |
| if(TKresult[nres]!= k1) | |
| continue; | |
| fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files "); | fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files "); | 
| for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | 
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | 
| Line 6057 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 6330 plot [%.f:%.f] \"%s\" every :::%d::%d u | 
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; | 
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | 
| } | } | 
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| fprintf(ficgp,"\n#\n"); | fprintf(ficgp,"\n#\n"); | 
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ | 
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | 
| Line 6094 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 6371 plot [%.f:%.f] \"%s\" every :::%d::%d u | 
| } /* state */ | } /* state */ | 
| } /* vpopbased */ | } /* vpopbased */ | 
| fprintf(ficgp,"\nset out;set out \"%s_%d.svg\"; replot; set out; \n",subdirf2(optionfilefiname,"E_"),k1); /* Buggy gnuplot */ | fprintf(ficgp,"\nset out;set out \"%s_%d.svg\"; replot; set out; \n",subdirf2(optionfilefiname,"E_"),k1); /* Buggy gnuplot */ | 
| } /* k1 */ | } /* k1 end 2 eme*/ | 
| /*3eme*/ | /*3eme*/ | 
| for (k1=1; k1<= m ; k1 ++) { | for (k1=1; k1<= m ; k1 ++) | 
| for(nres=1; nres <= nresult; nres++){ /* For each resultline */ | |
| if(TKresult[nres]!= k) | |
| continue; | |
| for (cpt=1; cpt<= nlstate ; cpt ++) { | for (cpt=1; cpt<= nlstate ; cpt ++) { | 
| fprintf(ficgp,"\n# 3d: Life expectancy with EXP_ files: cov=%d state=%d",k1, cpt); | fprintf(ficgp,"\n# 3d: Life expectancy with EXP_ files: combination=%d state=%d",k1, cpt); | 
| for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | 
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | 
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | 
| Line 6110 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 6390 plot [%.f:%.f] \"%s\" every :::%d::%d u | 
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; | 
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | 
| } | } | 
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| fprintf(ficgp,"\n#\n"); | fprintf(ficgp,"\n#\n"); | 
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ | 
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | 
| Line 6140 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 6423 plot [%.f:%.f] \"%s\" every :::%d::%d u | 
| /* 4eme */ | /* 4eme */ | 
| /* Survival functions (period) from state i in state j by initial state i */ | /* Survival functions (period) from state i in state j by initial state i */ | 
| for (k1=1; k1<= m ; k1 ++) { /* For each multivariate if any */ | for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | 
| for(nres=1; nres <= nresult; nres++) /* For each resultline */ | |
| if(TKresult[nres]!= k) | |
| continue; | |
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | 
| fprintf(ficgp,"\n#\n#\n# Survival functions in state j : 'LIJ_' files, cov=%d state=%d",k1, cpt); | fprintf(ficgp,"\n#\n#\n# Survival functions in state j : 'LIJ_' files, cov=%d state=%d",k1, cpt); | 
| for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | |
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | 
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | 
| /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | 
| Line 6152 plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 6437 plot [%.f:%.f] \"%s\" every :::%d::%d u | 
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; | 
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | 
| } | } | 
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| fprintf(ficgp,"\n#\n"); | fprintf(ficgp,"\n#\n"); | 
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ | 
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | 
| Line 6182 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 6470 plot [%.f:%.f] ", ageminpar, agemaxpar) | 
| /* 5eme */ | /* 5eme */ | 
| /* Survival functions (period) from state i in state j by final state j */ | /* Survival functions (period) from state i in state j by final state j */ | 
| for (k1=1; k1<= m ; k1 ++) { /* For each covariate if any */ | for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */ | 
| for(nres=1; nres <= nresult; nres++){ /* For each resultline */ | |
| if(TKresult[nres]!= k1) | |
| continue; | |
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each inital state */ | for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each inital state */ | 
| fprintf(ficgp,"\n#\n#\n# Survival functions in state j and all livestates from state i by final state j: 'lij' files, cov=%d state=%d",k1, cpt); | fprintf(ficgp,"\n#\n#\n# Survival functions in state j and all livestates from state i by final state j: 'lij' files, cov=%d state=%d",k1, cpt); | 
| for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | 
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | 
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | 
| /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | 
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | 
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; | 
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | 
| } | } | 
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| fprintf(ficgp,"\n#\n"); | fprintf(ficgp,"\n#\n"); | 
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ | 
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | 
| continue; | continue; | 
| } | } | 
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJT_"),cpt,k1); | fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJT_"),cpt,k1); | 
| fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\ | 
| set ter svg size 640, 480\n \ | set ter svg size 640, 480\n \ | 
| unset log y\n \ | unset log y\n \ | 
| plot [%.f:%.f] ", ageminpar, agemaxpar); | plot [%.f:%.f] ", ageminpar, agemaxpar); | 
| k=3; | k=3; | 
| for (j=1; j<= nlstate ; j ++){ /* Lived in state j */ | for (j=1; j<= nlstate ; j ++){ /* Lived in state j */ | 
| if(j==1) | if(j==1) | 
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); | fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); | 
| else | else | 
| fprintf(ficgp,", '' "); | fprintf(ficgp,", '' "); | 
| l=(nlstate+ndeath)*(cpt-1) +j; | l=(nlstate+ndeath)*(cpt-1) +j; | 
| fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l); | fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l); | 
| /* for (i=2; i<= nlstate+ndeath ; i ++) */ | /* for (i=2; i<= nlstate+ndeath ; i ++) */ | 
| /* fprintf(ficgp,"+$%d",k+l+i-1); */ | /* fprintf(ficgp,"+$%d",k+l+i-1); */ | 
| fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j); | fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j); | 
| } /* nlstate */ | } /* nlstate */ | 
| fprintf(ficgp,", '' "); | fprintf(ficgp,", '' "); | 
| fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):(",k1); | fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):(",k1); | 
| for (j=1; j<= nlstate ; j ++){ /* Lived in state j */ | for (j=1; j<= nlstate ; j ++){ /* Lived in state j */ | 
| l=(nlstate+ndeath)*(cpt-1) +j; | l=(nlstate+ndeath)*(cpt-1) +j; | 
| if(j < nlstate) | if(j < nlstate) | 
| fprintf(ficgp,"$%d +",k+l); | fprintf(ficgp,"$%d +",k+l); | 
| else | else | 
| fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt); | fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt); | 
| } | } | 
| fprintf(ficgp,"\nset out\n"); | fprintf(ficgp,"\nset out\n"); | 
| } /* end cpt state*/ | } /* end cpt state*/ | 
| } /* end covariate */ | } /* end covariate */ | 
| /* 6eme */ | /* 6eme */ | 
| /* CV preval stable (period) for each covariate */ | /* CV preval stable (period) for each covariate */ | 
| for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */ | for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */ | 
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | 
| fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt); | fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt); | 
| for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | 
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | 
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | 
| /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | 
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | 
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; | 
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | 
| } | } | 
| fprintf(ficgp,"\n#\n"); | fprintf(ficgp,"\n#\n"); | 
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ | 
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | 
| continue; | continue; | 
| } | } | 
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"P_"),cpt,k1); | fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \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 svg size 640, 480\n \ | set ter svg size 640, 480\n \ | 
| unset log y\n \ | unset log y\n \ | 
| plot [%.f:%.f] ", ageminpar, agemaxpar); | plot [%.f:%.f] ", ageminpar, agemaxpar); | 
| k=3; /* Offset */ | k=3; /* Offset */ | 
| for (i=1; i<= nlstate ; i ++){ | for (i=1; i<= nlstate ; i ++){ | 
| if(i==1) | if(i==1) | 
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); | fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_")); | 
| else | else | 
| fprintf(ficgp,", '' "); | fprintf(ficgp,", '' "); | 
| l=(nlstate+ndeath)*(i-1)+1; | l=(nlstate+ndeath)*(i-1)+1; | 
| fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); | fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); | 
| for (j=2; j<= nlstate ; j ++) | for (j=2; j<= nlstate ; j ++) | 
| fprintf(ficgp,"+$%d",k+l+j-1); | fprintf(ficgp,"+$%d",k+l+j-1); | 
| fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt); | fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt); | 
| } /* nlstate */ | } /* nlstate */ | 
| fprintf(ficgp,"\nset out\n"); | fprintf(ficgp,"\nset out\n"); | 
| } /* end cpt state*/ | } /* end cpt state*/ | 
| } /* end covariate */ | } /* end covariate */ | 
| /* 7eme */ | /* 7eme */ | 
| if(backcast == 1){ | if(backcast == 1){ | 
| /* CV back preval stable (period) for each covariate */ | /* CV back preval stable (period) for each covariate */ | 
| for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */ | for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */ | 
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | 
| fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt); | fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt); | 
| for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */ | 
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */ | 
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | 
| /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | 
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | 
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; | 
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | 
| } | } | 
| fprintf(ficgp,"\n#\n"); | fprintf(ficgp,"\n#\n"); | 
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ | 
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | 
| continue; | continue; | 
| } | } | 
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1); | fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1); | 
| fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ | 
| set ter svg size 640, 480\n \ | set ter svg size 640, 480\n \ | 
| unset log y\n \ | unset log y\n \ | 
| plot [%.f:%.f] ", ageminpar, agemaxpar); | plot [%.f:%.f] ", ageminpar, agemaxpar); | 
| k=3; /* Offset */ | k=3; /* Offset */ | 
| for (i=1; i<= nlstate ; i ++){ | for (i=1; i<= nlstate ; i ++){ | 
| if(i==1) | if(i==1) | 
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJB_")); | fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJB_")); | 
| else | else | 
| fprintf(ficgp,", '' "); | fprintf(ficgp,", '' "); | 
| /* l=(nlstate+ndeath)*(i-1)+1; */ | /* l=(nlstate+ndeath)*(i-1)+1; */ | 
| l=(nlstate+ndeath)*(cpt-1)+1; | l=(nlstate+ndeath)*(cpt-1)+1; | 
| /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); /\* a vérifier *\/ */ | /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); /\* a vérifier *\/ */ | 
| /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l+(cpt-1)+i-1); /\* a vérifier *\/ */ | /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l+(cpt-1)+i-1); /\* a vérifier *\/ */ | 
| fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d",k1,k+l+(cpt-1)+i-1); /* a vérifier */ | fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d",k1,k+l+(cpt-1)+i-1); /* a vérifier */ | 
| /* for (j=2; j<= nlstate ; j ++) */ | /* for (j=2; j<= nlstate ; j ++) */ | 
| /* fprintf(ficgp,"+$%d",k+l+j-1); */ | /* fprintf(ficgp,"+$%d",k+l+j-1); */ | 
| /* /\* fprintf(ficgp,"+$%d",k+l+j-1); *\/ */ | /* /\* fprintf(ficgp,"+$%d",k+l+j-1); *\/ */ | 
| fprintf(ficgp,") t \"bprev(%d,%d)\" w l",i,cpt); | fprintf(ficgp,") t \"bprev(%d,%d)\" w l",i,cpt); | 
| } /* nlstate */ | } /* nlstate */ | 
| fprintf(ficgp,"\nset out\n"); | fprintf(ficgp,"\nset out\n"); | 
| } /* end cpt state*/ | } /* end cpt state*/ | 
| } /* end covariate */ | } /* end covariate */ | 
| } /* End if backcast */ | } /* End if backcast */ | 
| Line 6324 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 6618 plot [%.f:%.f] ", ageminpar, agemaxpar) | 
| for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */ | for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */ | 
| for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | 
| fprintf(ficgp,"\n#\n#\n#Projection of prevalence to stable (period): 'PROJ_' files, covariatecombination#=%d state=%d",k1, cpt); | fprintf(ficgp,"\n#\n#\n#Projection of prevalence to stable (period): 'PROJ_' files, covariatecombination#=%d state=%d",k1, cpt); | 
| for (k=1; k<=cptcoveff; k++){ /* For each correspondig covariate value */ | for (k=1; k<=cptcoveff; k++){ /* For each correspondig covariate value */ | 
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */ | lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */ | 
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | 
| /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | 
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | 
| vlv= nbcode[Tvaraff[k]][lv]; | vlv= nbcode[Tvaraff[k]][lv]; | 
| fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv); | 
| } | } | 
| fprintf(ficgp,"\n#\n"); | fprintf(ficgp,"\n#\n"); | 
| if(invalidvarcomb[k1]){ | if(invalidvarcomb[k1]){ | 
| fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); | 
| continue; | continue; | 
| } | } | 
| fprintf(ficgp,"# hpijx=probability over h years, hp.jx is weighted by observed prev\n "); | fprintf(ficgp,"# hpijx=probability over h years, hp.jx is weighted by observed prev\n "); | 
| fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PROJ_"),cpt,k1); | fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PROJ_"),cpt,k1); | 
| fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Prevalence\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Prevalence\" \n\ | 
| set ter svg size 640, 480\n \ | set ter svg size 640, 480\n \ | 
| unset log y\n \ | unset log y\n \ | 
| plot [%.f:%.f] ", ageminpar, agemaxpar); | plot [%.f:%.f] ", ageminpar, agemaxpar); | 
| for (i=1; i<= nlstate+1 ; i ++){ /* nlstate +1 p11 p21 p.1 */ | for (i=1; i<= nlstate+1 ; i ++){ /* nlstate +1 p11 p21 p.1 */ | 
| /*# V1 = 1 V2 = 0 yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ | /*# V1 = 1 V2 = 0 yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ | 
| /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ | /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ | 
| /*# yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ | /*# yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ | 
| /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ | /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ | 
| if(i==1){ | if(i==1){ | 
| fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"F_")); | fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"F_")); | 
| }else{ | }else{ | 
| fprintf(ficgp,",\\\n '' "); | fprintf(ficgp,",\\\n '' "); | 
| } | } | 
| if(cptcoveff ==0){ /* No covariate */ | if(cptcoveff ==0){ /* No covariate */ | 
| ioffset=2; /* Age is in 2 */ | ioffset=2; /* Age is in 2 */ | 
| /*# yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/ | /*# yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/ | 
| /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */ | /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */ | 
| /*# V1 = 1 yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/ | /*# V1 = 1 yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/ | 
| /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */ | /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */ | 
| fprintf(ficgp," u %d:(", ioffset); | fprintf(ficgp," u %d:(", ioffset); | 
| if(i==nlstate+1) | if(i==nlstate+1) | 
| fprintf(ficgp," $%d/(1.-$%d)) t 'pw.%d' with line ", \ | fprintf(ficgp," $%d/(1.-$%d)) t 'pw.%d' with line ", \ | 
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); | ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); | 
| else | else | 
| fprintf(ficgp," $%d/(1.-$%d)) t 'p%d%d' with line ", \ | fprintf(ficgp," $%d/(1.-$%d)) t 'p%d%d' with line ", \ | 
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,i,cpt ); | ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,i,cpt ); | 
| }else{ /* more than 2 covariates */ | }else{ /* more than 2 covariates */ | 
| if(cptcoveff ==1){ | if(cptcoveff ==1){ | 
| ioffset=4; /* Age is in 4 */ | ioffset=4; /* Age is in 4 */ | 
| }else{ | }else{ | 
| ioffset=6; /* Age is in 6 */ | ioffset=6; /* Age is in 6 */ | 
| /*# V1 = 1 V2 = 0 yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ | /*# V1 = 1 V2 = 0 yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/ | 
| /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ | /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ | 
| } | } | 
| fprintf(ficgp," u %d:(",ioffset); | fprintf(ficgp," u %d:(",ioffset); | 
| kl=0; | kl=0; | 
| strcpy(gplotcondition,"("); | strcpy(gplotcondition,"("); | 
| for (k=1; k<=cptcoveff; k++){ /* For each covariate writing the chain of conditions */ | for (k=1; k<=cptcoveff; k++){ /* For each covariate writing the chain of conditions */ | 
| lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to combination k1 and covariate k */ | lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to combination k1 and covariate k */ | 
| /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */ | 
| /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */ | 
| /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */ | 
| vlv= nbcode[Tvaraff[k]][lv]; /* Value of the modality of Tvaraff[k] */ | vlv= nbcode[Tvaraff[k]][lv]; /* Value of the modality of Tvaraff[k] */ | 
| kl++; | kl++; | 
| sprintf(gplotcondition+strlen(gplotcondition),"$%d==%d && $%d==%d " ,kl,Tvaraff[k], kl+1, nbcode[Tvaraff[k]][lv]); | sprintf(gplotcondition+strlen(gplotcondition),"$%d==%d && $%d==%d " ,kl,Tvaraff[k], kl+1, nbcode[Tvaraff[k]][lv]); | 
| kl++; | kl++; | 
| if(k <cptcoveff && cptcoveff>1) | if(k <cptcoveff && cptcoveff>1) | 
| sprintf(gplotcondition+strlen(gplotcondition)," && "); | sprintf(gplotcondition+strlen(gplotcondition)," && "); | 
| } | } | 
| strcpy(gplotcondition+strlen(gplotcondition),")"); | strcpy(gplotcondition+strlen(gplotcondition),")"); | 
| /* kl=6+(cpt-1)*(nlstate+1)+1+(i-1); /\* 6+(1-1)*(2+1)+1+(1-1)=7, 6+(2-1)(2+1)+1+(1-1)=10 *\/ */ | /* kl=6+(cpt-1)*(nlstate+1)+1+(i-1); /\* 6+(1-1)*(2+1)+1+(1-1)=7, 6+(2-1)(2+1)+1+(1-1)=10 *\/ */ | 
| /*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */ | /*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */ | 
| /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ | /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ | 
| /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/ | /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/ | 
| if(i==nlstate+1){ | if(i==nlstate+1){ | 
| fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p.%d' with line ", gplotcondition, \ | fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p.%d' with line ", gplotcondition, \ | 
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); | ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt ); | 
| }else{ | }else{ | 
| fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ", gplotcondition, \ | fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ", gplotcondition, \ | 
| ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt ); | ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt ); | 
| } | } | 
| } /* end if covariate */ | } /* end if covariate */ | 
| } /* nlstate */ | } /* nlstate */ | 
| fprintf(ficgp,"\nset out\n"); | fprintf(ficgp,"\nset out\n"); | 
| } /* end cpt state*/ | } /* end cpt state*/ | 
| } /* end covariate */ | } /* end covariate */ | 
| } /* End if prevfcast */ | } /* End if prevfcast */ | 
| /* proba elementaires */ | /* proba elementaires */ | 
| fprintf(ficgp,"\n##############\n#MLE estimated parameters\n#############\n"); | fprintf(ficgp,"\n##############\n#MLE estimated parameters\n#############\n"); | 
| for(i=1,jk=1; i <=nlstate; i++){ | for(i=1,jk=1; i <=nlstate; i++){ | 
| fprintf(ficgp,"# initial state %d\n",i); | fprintf(ficgp,"# initial state %d\n",i); | 
| for(k=1; k <=(nlstate+ndeath); k++){ | for(k=1; k <=(nlstate+ndeath); k++){ | 
| if (k != i) { | if (k != i) { | 
| fprintf(ficgp,"# current state %d\n",k); | fprintf(ficgp,"# current state %d\n",k); | 
| for(j=1; j <=ncovmodel; j++){ | for(j=1; j <=ncovmodel; j++){ | 
| fprintf(ficgp,"p%d=%f; ",jk,p[jk]); | fprintf(ficgp,"p%d=%f; ",jk,p[jk]); | 
| jk++; | jk++; | 
| } | } | 
| fprintf(ficgp,"\n"); | fprintf(ficgp,"\n"); | 
| } | } | 
| } | } | 
| } | } | 
| fprintf(ficgp,"##############\n#\n"); | fprintf(ficgp,"##############\n#\n"); | 
| /*goto avoid;*/ | /*goto avoid;*/ | 
| fprintf(ficgp,"\n##############\n#Graphics of probabilities or incidences\n#############\n"); | fprintf(ficgp,"\n##############\n#Graphics of probabilities or incidences\n#############\n"); | 
| fprintf(ficgp,"# logi(p12/p11)=a12+b12*age+c12age*age+d12*V1+e12*V1*age\n"); | fprintf(ficgp,"# logi(p12/p11)=a12+b12*age+c12age*age+d12*V1+e12*V1*age\n"); | 
| Line 6498 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 6792 plot [%.f:%.f] ", ageminpar, agemaxpar) | 
| } | } | 
| } | } | 
| else | else | 
| fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); /* Valgrind bug nbcode */ | fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); /* Valgrind bug nbcode */ | 
| } | } | 
| }else{ | }else{ | 
| i=i-ncovmodel; | i=i-ncovmodel; | 
| if(ng !=1 ) /* For logit formula of log p11 is more difficult to get */ | if(ng !=1 ) /* For logit formula of log p11 is more difficult to get */ | 
| fprintf(ficgp," (1."); | fprintf(ficgp," (1."); | 
| } | } | 
| if(ng != 1){ | if(ng != 1){ | 
| fprintf(ficgp,")/(1"); | fprintf(ficgp,")/(1"); | 
| for(k1=1; k1 <=nlstate; k1++){ | for(k1=1; k1 <=nlstate; k1++){ | 
| if(nagesqr==0) | if(nagesqr==0) | 
| fprintf(ficgp,"+exp(p%d+p%d*x",k3+(k1-1)*ncovmodel,k3+(k1-1)*ncovmodel+1); | fprintf(ficgp,"+exp(p%d+p%d*x",k3+(k1-1)*ncovmodel,k3+(k1-1)*ncovmodel+1); | 
| Line 6670 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 6964 plot [%.f:%.f] ", ageminpar, agemaxpar) | 
| } /* end bad */ | } /* end bad */ | 
| for (age=bage; age<=fage; age++){ | for (age=bage; age<=fage; age++){ | 
| printf("%d %d ", cptcod, (int)age); | /* printf("%d %d ", cptcod, (int)age); */ | 
| sumnewp[cptcod]=0.; | sumnewp[cptcod]=0.; | 
| sumnewm[cptcod]=0.; | sumnewm[cptcod]=0.; | 
| for (i=1; i<=nlstate;i++){ | for (i=1; i<=nlstate;i++){ | 
| Line 6709 plot [%.f:%.f] ", ageminpar, agemaxpar) | Line 7003 plot [%.f:%.f] ", ageminpar, agemaxpar) | 
| /************** Forecasting ******************/ | /************** Forecasting ******************/ | 
| void prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int cptcoveff){ | void prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int cptcoveff){ | 
| /* proj1, year, month, day of starting projection | /* proj1, year, month, day of starting projection | 
| agemin, agemax range of age | agemin, agemax range of age | 
| dateprev1 dateprev2 range of dates during which prevalence is computed | dateprev1 dateprev2 range of dates during which prevalence is computed | 
| anproj2 year of en of projection (same day and month as proj1). | anproj2 year of en of projection (same day and month as proj1). | 
| */ | */ | 
| int yearp, stepsize, hstepm, nhstepm, j, k, cptcod, i, h, i1; | int yearp, stepsize, hstepm, nhstepm, j, k, cptcod, i, h, i1, k4, nres=0; | 
| double agec; /* generic age */ | double agec; /* generic age */ | 
| double agelim, ppij, yp,yp1,yp2,jprojmean,mprojmean,anprojmean; | double agelim, ppij, yp,yp1,yp2,jprojmean,mprojmean,anprojmean; | 
| double *popeffectif,*popcount; | double *popeffectif,*popcount; | 
| Line 6737 void prevforecast(char fileres[], double | Line 7031 void prevforecast(char fileres[], double | 
| printf("Problem with forecast resultfile: %s\n", fileresf); | printf("Problem with forecast resultfile: %s\n", fileresf); | 
| fprintf(ficlog,"Problem with forecast resultfile: %s\n", fileresf); | fprintf(ficlog,"Problem with forecast resultfile: %s\n", fileresf); | 
| } | } | 
| printf("Computing forecasting: result on file '%s', please wait... \n", fileresf); | printf("\nComputing forecasting: result on file '%s', please wait... \n", fileresf); | 
| fprintf(ficlog,"Computing forecasting: result on file '%s', please wait... \n", fileresf); | fprintf(ficlog,"\nComputing forecasting: result on file '%s', please wait... \n", fileresf); | 
| if (cptcoveff==0) ncodemax[cptcoveff]=1; | if (cptcoveff==0) ncodemax[cptcoveff]=1; | 
| Line 6761 void prevforecast(char fileres[], double | Line 7055 void prevforecast(char fileres[], double | 
| if(jprojmean==0) jprojmean=1; | if(jprojmean==0) jprojmean=1; | 
| if(mprojmean==0) jprojmean=1; | if(mprojmean==0) jprojmean=1; | 
| i1=cptcoveff; | i1=pow(2,cptcoveff); | 
| if (cptcovn < 1){i1=1;} | if (cptcovn < 1){i1=1;} | 
| fprintf(ficresf,"# Mean day of interviews %.lf/%.lf/%.lf (%.2f) between %.2f and %.2f \n",jprojmean,mprojmean,anprojmean,dateintmean,dateprev1,dateprev2); | fprintf(ficresf,"# Mean day of interviews %.lf/%.lf/%.lf (%.2f) between %.2f and %.2f \n",jprojmean,mprojmean,anprojmean,dateintmean,dateprev1,dateprev2); | 
| fprintf(ficresf,"#****** Routine prevforecast **\n"); | fprintf(ficresf,"#****** Routine prevforecast **\n"); | 
| /* if (h==(int)(YEARM*yearp)){ */ | /* if (h==(int)(YEARM*yearp)){ */ | 
| for(cptcov=1, k=0;cptcov<=i1;cptcov++){ | for(nres=1; nres <= nresult; nres++) /* For each resultline */ | 
| for(cptcod=1;cptcod<=ncodemax[cptcoveff];cptcod++){ | for(k=1; k<=i1;k++){ | 
| k=k+1; | if(TKresult[nres]!= k) | 
| fprintf(ficresf,"\n#****** hpijx=probability over h years, hp.jx is weighted by observed prev \n#"); | continue; | 
| for(j=1;j<=cptcoveff;j++) { | if(invalidvarcomb[k]){ | 
| fprintf(ficresf," V%d (=) %d",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | printf("\nCombination (%d) projection ignored because no cases \n",k); | 
| } | continue; | 
| fprintf(ficresf," yearproj age"); | } | 
| for(j=1; j<=nlstate+ndeath;j++){ | fprintf(ficresf,"\n#****** hpijx=probability over h years, hp.jx is weighted by observed prev \n#"); | 
| for(i=1; i<=nlstate;i++) | for(j=1;j<=cptcoveff;j++) { | 
| fprintf(ficresf," p%d%d",i,j); | fprintf(ficresf," V%d (=) %d",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| fprintf(ficresf," wp.%d",j); | } | 
| } | for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | 
| for (yearp=0; yearp<=(anproj2-anproj1);yearp +=stepsize) { | printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | 
| fprintf(ficresf,"\n"); | fprintf(ficlog," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | 
| fprintf(ficresf,"\n# Forecasting at date %.lf/%.lf/%.lf ",jproj1,mproj1,anproj1+yearp); | } | 
| for (agec=fage; agec>=(ageminpar-1); agec--){ | fprintf(ficresf," yearproj age"); | 
| nhstepm=(int) rint((agelim-agec)*YEARM/stepm); | for(j=1; j<=nlstate+ndeath;j++){ | 
| nhstepm = nhstepm/hstepm; | for(i=1; i<=nlstate;i++) | 
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | fprintf(ficresf," p%d%d",i,j); | 
| oldm=oldms;savm=savms; | fprintf(ficresf," wp.%d",j); | 
| hpxij(p3mat,nhstepm,agec,hstepm,p,nlstate,stepm,oldm,savm, k); | } | 
| for (yearp=0; yearp<=(anproj2-anproj1);yearp +=stepsize) { | |
| for (h=0; h<=nhstepm; h++){ | fprintf(ficresf,"\n"); | 
| if (h*hstepm/YEARM*stepm ==yearp) { | fprintf(ficresf,"\n# Forecasting at date %.lf/%.lf/%.lf ",jproj1,mproj1,anproj1+yearp); | 
| fprintf(ficresf,"\n"); | for (agec=fage; agec>=(ageminpar-1); agec--){ | 
| for(j=1;j<=cptcoveff;j++) | nhstepm=(int) rint((agelim-agec)*YEARM/stepm); | 
| fprintf(ficresf,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | nhstepm = nhstepm/hstepm; | 
| fprintf(ficresf,"%.f %.f ",anproj1+yearp,agec+h*hstepm/YEARM*stepm); | p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | 
| } | oldm=oldms;savm=savms; | 
| for(j=1; j<=nlstate+ndeath;j++) { | hpxij(p3mat,nhstepm,agec,hstepm,p,nlstate,stepm,oldm,savm, k,nres); | 
| ppij=0.; | |
| for(i=1; i<=nlstate;i++) { | for (h=0; h<=nhstepm; h++){ | 
| if (mobilav==1) | if (h*hstepm/YEARM*stepm ==yearp) { | 
| ppij=ppij+p3mat[i][j][h]*mobaverage[(int)agec][i][cptcod]; | fprintf(ficresf,"\n"); | 
| else { | for(j=1;j<=cptcoveff;j++) | 
| ppij=ppij+p3mat[i][j][h]*probs[(int)(agec)][i][cptcod]; | fprintf(ficresf,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| } | fprintf(ficresf,"%.f %.f ",anproj1+yearp,agec+h*hstepm/YEARM*stepm); | 
| if (h*hstepm/YEARM*stepm== yearp) { | } | 
| fprintf(ficresf," %.3f", p3mat[i][j][h]); | for(j=1; j<=nlstate+ndeath;j++) { | 
| } | ppij=0.; | 
| } /* end i */ | for(i=1; i<=nlstate;i++) { | 
| if (h*hstepm/YEARM*stepm==yearp) { | if (mobilav==1) | 
| fprintf(ficresf," %.3f", ppij); | ppij=ppij+p3mat[i][j][h]*mobaverage[(int)agec][i][k]; | 
| } | else { | 
| }/* end j */ | ppij=ppij+p3mat[i][j][h]*probs[(int)(agec)][i][k]; | 
| } /* end h */ | } | 
| free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | if (h*hstepm/YEARM*stepm== yearp) { | 
| } /* end agec */ | fprintf(ficresf," %.3f", p3mat[i][j][h]); | 
| } /* end yearp */ | } | 
| } /* end cptcod */ | } /* end i */ | 
| } /* end cptcov */ | if (h*hstepm/YEARM*stepm==yearp) { | 
| fprintf(ficresf," %.3f", ppij); | |
| } | |
| }/* end j */ | |
| } /* end h */ | |
| free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | |
| } /* end agec */ | |
| } /* end yearp */ | |
| } /* end k */ | |
| fclose(ficresf); | fclose(ficresf); | 
| printf("End of Computing forecasting \n"); | printf("End of Computing forecasting \n"); | 
| Line 6959 void prevforecast(char fileres[], double | Line 7261 void prevforecast(char fileres[], double | 
| /* } */ | /* } */ | 
| /************** Forecasting *****not tested NB*************/ | /************** Forecasting *****not tested NB*************/ | 
| void populforecast(char fileres[], double anpyram,double mpyram,double jpyram,double ageminpar, double agemax,double dateprev1, double dateprev2, int mobilav, double agedeb, double fage, int popforecast, char popfile[], double anpyram1,double p[], int i2){ | /* void populforecast(char fileres[], double anpyram,double mpyram,double jpyram,double ageminpar, double agemax,double dateprev1, double dateprev2s, int mobilav, double agedeb, double fage, int popforecast, char popfile[], double anpyram1,double p[], int i2){ */ | 
| int cpt, stepsize, hstepm, nhstepm, j,k,c, cptcod, i,h; | /* int cpt, stepsize, hstepm, nhstepm, j,k,c, cptcod, i,h; */ | 
| int *popage; | /* int *popage; */ | 
| double calagedatem, agelim, kk1, kk2; | /* double calagedatem, agelim, kk1, kk2; */ | 
| double *popeffectif,*popcount; | /* double *popeffectif,*popcount; */ | 
| double ***p3mat,***tabpop,***tabpopprev; | /* double ***p3mat,***tabpop,***tabpopprev; */ | 
| /* double ***mobaverage; */ | /* /\* double ***mobaverage; *\/ */ | 
| char filerespop[FILENAMELENGTH]; | /* char filerespop[FILENAMELENGTH]; */ | 
| tabpop= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX); | /* tabpop= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX); */ | 
| tabpopprev= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX); | /* tabpopprev= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX); */ | 
| agelim=AGESUP; | /* agelim=AGESUP; */ | 
| calagedatem=(anpyram+mpyram/12.+jpyram/365.-dateintmean)*YEARM; | /* calagedatem=(anpyram+mpyram/12.+jpyram/365.-dateintmean)*YEARM; */ | 
| prevalence(probs, ageminpar, agemax, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); | /* prevalence(probs, ageminpar, agemax, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); */ | 
| strcpy(filerespop,"POP_"); | /* strcpy(filerespop,"POP_"); */ | 
| strcat(filerespop,fileresu); | /* strcat(filerespop,fileresu); */ | 
| if((ficrespop=fopen(filerespop,"w"))==NULL) { | /* if((ficrespop=fopen(filerespop,"w"))==NULL) { */ | 
| printf("Problem with forecast resultfile: %s\n", filerespop); | /* printf("Problem with forecast resultfile: %s\n", filerespop); */ | 
| fprintf(ficlog,"Problem with forecast resultfile: %s\n", filerespop); | /* fprintf(ficlog,"Problem with forecast resultfile: %s\n", filerespop); */ | 
| } | /* } */ | 
| printf("Computing forecasting: result on file '%s' \n", filerespop); | /* printf("Computing forecasting: result on file '%s' \n", filerespop); */ | 
| fprintf(ficlog,"Computing forecasting: result on file '%s' \n", filerespop); | /* fprintf(ficlog,"Computing forecasting: result on file '%s' \n", filerespop); */ | 
| if (cptcoveff==0) ncodemax[cptcoveff]=1; | /* if (cptcoveff==0) ncodemax[cptcoveff]=1; */ | 
| /* if (mobilav!=0) { */ | /* /\* if (mobilav!=0) { *\/ */ | 
| /* mobaverage= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX); */ | /* /\* mobaverage= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX); *\/ */ | 
| /* if (movingaverage(probs, ageminpar, fage, mobaverage,mobilav)!=0){ */ | /* /\* if (movingaverage(probs, ageminpar, fage, mobaverage,mobilav)!=0){ *\/ */ | 
| /* fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav); */ | /* /\* fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav); *\/ */ | 
| /* printf(" Error in movingaverage mobilav=%d\n",mobilav); */ | /* /\* printf(" Error in movingaverage mobilav=%d\n",mobilav); *\/ */ | 
| /* } */ | /* /\* } *\/ */ | 
| /* } */ | /* /\* } *\/ */ | 
| stepsize=(int) (stepm+YEARM-1)/YEARM; | /* stepsize=(int) (stepm+YEARM-1)/YEARM; */ | 
| if (stepm<=12) stepsize=1; | /* if (stepm<=12) stepsize=1; */ | 
| agelim=AGESUP; | /* agelim=AGESUP; */ | 
| hstepm=1; | /* hstepm=1; */ | 
| hstepm=hstepm/stepm; | /* hstepm=hstepm/stepm; */ | 
| if (popforecast==1) { | /* if (popforecast==1) { */ | 
| if((ficpop=fopen(popfile,"r"))==NULL) { | /* if((ficpop=fopen(popfile,"r"))==NULL) { */ | 
| printf("Problem with population file : %s\n",popfile);exit(0); | /* printf("Problem with population file : %s\n",popfile);exit(0); */ | 
| fprintf(ficlog,"Problem with population file : %s\n",popfile);exit(0); | /* fprintf(ficlog,"Problem with population file : %s\n",popfile);exit(0); */ | 
| } | /* } */ | 
| popage=ivector(0,AGESUP); | /* popage=ivector(0,AGESUP); */ | 
| popeffectif=vector(0,AGESUP); | /* popeffectif=vector(0,AGESUP); */ | 
| popcount=vector(0,AGESUP); | /* popcount=vector(0,AGESUP); */ | 
| i=1; | /* i=1; */ | 
| while ((c=fscanf(ficpop,"%d %lf\n",&popage[i],&popcount[i])) != EOF) i=i+1; | /* while ((c=fscanf(ficpop,"%d %lf\n",&popage[i],&popcount[i])) != EOF) i=i+1; */ | 
| imx=i; | /* imx=i; */ | 
| for (i=1; i<imx;i++) popeffectif[popage[i]]=popcount[i]; | /* for (i=1; i<imx;i++) popeffectif[popage[i]]=popcount[i]; */ | 
| } | /* } */ | 
| for(cptcov=1,k=0;cptcov<=i2;cptcov++){ | /* for(cptcov=1,k=0;cptcov<=i2;cptcov++){ */ | 
| for(cptcod=1;cptcod<=ncodemax[cptcoveff];cptcod++){ | /* for(cptcod=1;cptcod<=ncodemax[cptcoveff];cptcod++){ */ | 
| k=k+1; | /* k=k+1; */ | 
| fprintf(ficrespop,"\n#******"); | /* fprintf(ficrespop,"\n#******"); */ | 
| for(j=1;j<=cptcoveff;j++) { | /* for(j=1;j<=cptcoveff;j++) { */ | 
| fprintf(ficrespop," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | /* fprintf(ficrespop," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); */ | 
| } | /* } */ | 
| fprintf(ficrespop,"******\n"); | /* fprintf(ficrespop,"******\n"); */ | 
| fprintf(ficrespop,"# Age"); | /* fprintf(ficrespop,"# Age"); */ | 
| for(j=1; j<=nlstate+ndeath;j++) fprintf(ficrespop," P.%d",j); | /* for(j=1; j<=nlstate+ndeath;j++) fprintf(ficrespop," P.%d",j); */ | 
| if (popforecast==1) fprintf(ficrespop," [Population]"); | /* if (popforecast==1) fprintf(ficrespop," [Population]"); */ | 
| for (cpt=0; cpt<=0;cpt++) { | /* for (cpt=0; cpt<=0;cpt++) { */ | 
| fprintf(ficrespop,"\n\n# Forecasting at date %.lf/%.lf/%.lf ",jpyram,mpyram,anpyram+cpt); | /* fprintf(ficrespop,"\n\n# Forecasting at date %.lf/%.lf/%.lf ",jpyram,mpyram,anpyram+cpt); */ | 
| for (agedeb=(fage-((int)calagedatem %12/12.)); agedeb>=(ageminpar-((int)calagedatem %12)/12.); agedeb--){ | /* for (agedeb=(fage-((int)calagedatem %12/12.)); agedeb>=(ageminpar-((int)calagedatem %12)/12.); agedeb--){ */ | 
| nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); | /* nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); */ | 
| nhstepm = nhstepm/hstepm; | /* nhstepm = nhstepm/hstepm; */ | 
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | /* p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); */ | 
| oldm=oldms;savm=savms; | /* oldm=oldms;savm=savms; */ | 
| hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); | /* hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); */ | 
| for (h=0; h<=nhstepm; h++){ | /* for (h=0; h<=nhstepm; h++){ */ | 
| if (h==(int) (calagedatem+YEARM*cpt)) { | /* if (h==(int) (calagedatem+YEARM*cpt)) { */ | 
| fprintf(ficrespop,"\n %3.f ",agedeb+h*hstepm/YEARM*stepm); | /* fprintf(ficrespop,"\n %3.f ",agedeb+h*hstepm/YEARM*stepm); */ | 
| } | /* } */ | 
| for(j=1; j<=nlstate+ndeath;j++) { | /* for(j=1; j<=nlstate+ndeath;j++) { */ | 
| kk1=0.;kk2=0; | /* kk1=0.;kk2=0; */ | 
| for(i=1; i<=nlstate;i++) { | /* for(i=1; i<=nlstate;i++) { */ | 
| if (mobilav==1) | /* if (mobilav==1) */ | 
| kk1=kk1+p3mat[i][j][h]*mobaverage[(int)agedeb+1][i][cptcod]; | /* kk1=kk1+p3mat[i][j][h]*mobaverage[(int)agedeb+1][i][cptcod]; */ | 
| else { | /* else { */ | 
| kk1=kk1+p3mat[i][j][h]*probs[(int)(agedeb+1)][i][cptcod]; | /* kk1=kk1+p3mat[i][j][h]*probs[(int)(agedeb+1)][i][cptcod]; */ | 
| } | /* } */ | 
| } | /* } */ | 
| if (h==(int)(calagedatem+12*cpt)){ | /* if (h==(int)(calagedatem+12*cpt)){ */ | 
| tabpop[(int)(agedeb)][j][cptcod]=kk1; | /* tabpop[(int)(agedeb)][j][cptcod]=kk1; */ | 
| /*fprintf(ficrespop," %.3f", kk1); | /* /\*fprintf(ficrespop," %.3f", kk1); */ | 
| if (popforecast==1) fprintf(ficrespop," [%.f]", kk1*popeffectif[(int)agedeb+1]);*/ | /* if (popforecast==1) fprintf(ficrespop," [%.f]", kk1*popeffectif[(int)agedeb+1]);*\/ */ | 
| } | /* } */ | 
| } | /* } */ | 
| for(i=1; i<=nlstate;i++){ | /* for(i=1; i<=nlstate;i++){ */ | 
| kk1=0.; | /* kk1=0.; */ | 
| for(j=1; j<=nlstate;j++){ | /* for(j=1; j<=nlstate;j++){ */ | 
| kk1= kk1+tabpop[(int)(agedeb)][j][cptcod]; | /* kk1= kk1+tabpop[(int)(agedeb)][j][cptcod]; */ | 
| } | /* } */ | 
| tabpopprev[(int)(agedeb)][i][cptcod]=tabpop[(int)(agedeb)][i][cptcod]/kk1*popeffectif[(int)(agedeb+(calagedatem+12*cpt)*hstepm/YEARM*stepm-1)]; | /* tabpopprev[(int)(agedeb)][i][cptcod]=tabpop[(int)(agedeb)][i][cptcod]/kk1*popeffectif[(int)(agedeb+(calagedatem+12*cpt)*hstepm/YEARM*stepm-1)]; */ | 
| } | /* } */ | 
| if (h==(int)(calagedatem+12*cpt)) | /* if (h==(int)(calagedatem+12*cpt)) */ | 
| for(j=1; j<=nlstate;j++) | /* for(j=1; j<=nlstate;j++) */ | 
| fprintf(ficrespop," %15.2f",tabpopprev[(int)(agedeb+1)][j][cptcod]); | /* fprintf(ficrespop," %15.2f",tabpopprev[(int)(agedeb+1)][j][cptcod]); */ | 
| } | /* } */ | 
| free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | /* free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); */ | 
| } | /* } */ | 
| } | /* } */ | 
| /******/ | /* /\******\/ */ | 
| for (cpt=1; cpt<=(anpyram1-anpyram);cpt++) { | /* for (cpt=1; cpt<=(anpyram1-anpyram);cpt++) { */ | 
| fprintf(ficrespop,"\n\n# Forecasting at date %.lf/%.lf/%.lf ",jpyram,mpyram,anpyram+cpt); | /* fprintf(ficrespop,"\n\n# Forecasting at date %.lf/%.lf/%.lf ",jpyram,mpyram,anpyram+cpt); */ | 
| for (agedeb=(fage-((int)calagedatem %12/12.)); agedeb>=(ageminpar-((int)calagedatem %12)/12.); agedeb--){ | /* for (agedeb=(fage-((int)calagedatem %12/12.)); agedeb>=(ageminpar-((int)calagedatem %12)/12.); agedeb--){ */ | 
| nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); | /* nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); */ | 
| nhstepm = nhstepm/hstepm; | /* nhstepm = nhstepm/hstepm; */ | 
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | /* p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); */ | 
| oldm=oldms;savm=savms; | /* oldm=oldms;savm=savms; */ | 
| hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); | /* hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); */ | 
| for (h=0; h<=nhstepm; h++){ | /* for (h=0; h<=nhstepm; h++){ */ | 
| if (h==(int) (calagedatem+YEARM*cpt)) { | /* if (h==(int) (calagedatem+YEARM*cpt)) { */ | 
| fprintf(ficresf,"\n %3.f ",agedeb+h*hstepm/YEARM*stepm); | /* fprintf(ficresf,"\n %3.f ",agedeb+h*hstepm/YEARM*stepm); */ | 
| } | /* } */ | 
| for(j=1; j<=nlstate+ndeath;j++) { | /* for(j=1; j<=nlstate+ndeath;j++) { */ | 
| kk1=0.;kk2=0; | /* kk1=0.;kk2=0; */ | 
| for(i=1; i<=nlstate;i++) { | /* for(i=1; i<=nlstate;i++) { */ | 
| kk1=kk1+p3mat[i][j][h]*tabpopprev[(int)agedeb+1][i][cptcod]; | /* kk1=kk1+p3mat[i][j][h]*tabpopprev[(int)agedeb+1][i][cptcod]; */ | 
| } | /* } */ | 
| if (h==(int)(calagedatem+12*cpt)) fprintf(ficresf," %15.2f", kk1); | /* if (h==(int)(calagedatem+12*cpt)) fprintf(ficresf," %15.2f", kk1); */ | 
| } | /* } */ | 
| } | /* } */ | 
| free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | /* free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); */ | 
| } | /* } */ | 
| } | /* } */ | 
| } | /* } */ | 
| } | /* } */ | 
| /* if (mobilav!=0) free_ma3x(mobaverage,1, AGESUP,1,NCOVMAX, 1,NCOVMAX); */ | /* /\* if (mobilav!=0) free_ma3x(mobaverage,1, AGESUP,1,NCOVMAX, 1,NCOVMAX); *\/ */ | 
| if (popforecast==1) { | /* if (popforecast==1) { */ | 
| free_ivector(popage,0,AGESUP); | /* free_ivector(popage,0,AGESUP); */ | 
| free_vector(popeffectif,0,AGESUP); | /* free_vector(popeffectif,0,AGESUP); */ | 
| free_vector(popcount,0,AGESUP); | /* free_vector(popcount,0,AGESUP); */ | 
| } | /* } */ | 
| free_ma3x(tabpop,1, AGESUP,1,NCOVMAX, 1,NCOVMAX); | /* free_ma3x(tabpop,1, AGESUP,1,NCOVMAX, 1,NCOVMAX); */ | 
| free_ma3x(tabpopprev,1, AGESUP,1,NCOVMAX, 1,NCOVMAX); | /* free_ma3x(tabpopprev,1, AGESUP,1,NCOVMAX, 1,NCOVMAX); */ | 
| fclose(ficrespop); | /* fclose(ficrespop); */ | 
| } /* End of popforecast */ | /* } /\* End of popforecast *\/ */ | 
| int fileappend(FILE *fichier, char *optionfich) | int fileappend(FILE *fichier, char *optionfich) | 
| { | { | 
| Line 7421 int readdata(char datafile[], int firsto | Line 7723 int readdata(char datafile[], int firsto | 
| /* Loops on waves */ | /* Loops on waves */ | 
| for (j=maxwav;j>=1;j--){ | for (j=maxwav;j>=1;j--){ | 
| for (iv=nqtv;iv>=1;iv--){ /* Loop on time varying quantitative variables */ | for (iv=nqtv;iv>=1;iv--){ /* Loop on time varying quantitative variables */ | 
| cutv(stra, strb, line, ' '); | cutv(stra, strb, line, ' '); | 
| if(strb[0]=='.') { /* Missing value */ | if(strb[0]=='.') { /* Missing value */ | 
| lval=-1; | lval=-1; | 
| cotqvar[j][iv][i]=-1; /* 0.0/0.0 */ | cotqvar[j][iv][i]=-1; /* 0.0/0.0 */ | 
| if(isalpha(strb[1])) { /* .m or .d Really Missing value */ | cotvar[j][ntv+iv][i]=-1; /* For performance reasons */ | 
| printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j); | if(isalpha(strb[1])) { /* .m or .d Really Missing value */ | 
| fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j);fflush(ficlog); | printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j); | 
| return 1; | fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j);fflush(ficlog); | 
| } | return 1; | 
| }else{ | } | 
| errno=0; | }else{ | 
| /* what_kind_of_number(strb); */ | errno=0; | 
| dval=strtod(strb,&endptr); | /* what_kind_of_number(strb); */ | 
| /* if( strb[0]=='\0' || (*endptr != '\0')){ */ | dval=strtod(strb,&endptr); | 
| /* if(strb != endptr && *endptr == '\0') */ | /* if( strb[0]=='\0' || (*endptr != '\0')){ */ | 
| /* dval=dlval; */ | /* if(strb != endptr && *endptr == '\0') */ | 
| /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */ | /* dval=dlval; */ | 
| if( strb[0]=='\0' || (*endptr != '\0')){ | /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */ | 
| printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, nqtv, j,maxwav); | if( strb[0]=='\0' || (*endptr != '\0')){ | 
| fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqtv, j,maxwav);fflush(ficlog); | printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, nqtv, j,maxwav); | 
| return 1; | fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqtv, j,maxwav);fflush(ficlog); | 
| } | return 1; | 
| cotqvar[j][iv][i]=dval; | } | 
| } | cotqvar[j][iv][i]=dval; | 
| strcpy(line,stra); | cotvar[j][ntv+iv][i]=dval; | 
| } | |
| strcpy(line,stra); | |
| }/* end loop ntqv */ | }/* end loop ntqv */ | 
| for (iv=ntv;iv>=1;iv--){ /* Loop on time varying dummies */ | for (iv=ntv;iv>=1;iv--){ /* Loop on time varying dummies */ | 
| cutv(stra, strb, line, ' '); | cutv(stra, strb, line, ' '); | 
| if(strb[0]=='.') { /* Missing value */ | if(strb[0]=='.') { /* Missing value */ | 
| lval=-1; | lval=-1; | 
| }else{ | }else{ | 
| errno=0; | errno=0; | 
| lval=strtol(strb,&endptr,10); | lval=strtol(strb,&endptr,10); | 
| /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ | /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ | 
| if( strb[0]=='\0' || (*endptr != '\0')){ | if( strb[0]=='\0' || (*endptr != '\0')){ | 
| printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th dummy covariate out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv, j,maxwav); | printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th dummy covariate out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv, j,maxwav); | 
| fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d dummy covariate out of %d measured wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv,j,maxwav);fflush(ficlog); | fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d dummy covariate out of %d measured wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv,j,maxwav);fflush(ficlog); | 
| return 1; | return 1; | 
| } | } | 
| } | } | 
| if(lval <-1 || lval >1){ | if(lval <-1 || lval >1){ | 
| printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ | printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ | 
| Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ | Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ | 
| for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ | for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ | 
| For example, for multinomial values like 1, 2 and 3,\n \ | For example, for multinomial values like 1, 2 and 3,\n \ | 
| build V1=0 V2=0 for the reference value (1),\n \ | build V1=0 V2=0 for the reference value (1),\n \ | 
| V1=1 V2=0 for (2) \n \ | V1=1 V2=0 for (2) \n \ | 
| and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ | and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ | 
| output of IMaCh is often meaningless.\n \ | output of IMaCh is often meaningless.\n \ | 
| Exiting.\n",lval,linei, i,line,j); | Exiting.\n",lval,linei, i,line,j); | 
| fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ | fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ | 
| Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ | Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ | 
| for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ | for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ | 
| For example, for multinomial values like 1, 2 and 3,\n \ | For example, for multinomial values like 1, 2 and 3,\n \ | 
| build V1=0 V2=0 for the reference value (1),\n \ | build V1=0 V2=0 for the reference value (1),\n \ | 
| V1=1 V2=0 for (2) \n \ | V1=1 V2=0 for (2) \n \ | 
| and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ | and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ | 
| output of IMaCh is often meaningless.\n \ | output of IMaCh is often meaningless.\n \ | 
| Exiting.\n",lval,linei, i,line,j);fflush(ficlog); | Exiting.\n",lval,linei, i,line,j);fflush(ficlog); | 
| return 1; | return 1; | 
| } | } | 
| cotvar[j][iv][i]=(double)(lval); | cotvar[j][iv][i]=(double)(lval); | 
| strcpy(line,stra); | strcpy(line,stra); | 
| }/* end loop ntv */ | }/* end loop ntv */ | 
| /* Statuses at wave */ | /* Statuses at wave */ | 
| cutv(stra, strb, line, ' '); | cutv(stra, strb, line, ' '); | 
| if(strb[0]=='.') { /* Missing value */ | if(strb[0]=='.') { /* Missing value */ | 
| lval=-1; | lval=-1; | 
| }else{ | }else{ | 
| errno=0; | errno=0; | 
| lval=strtol(strb,&endptr,10); | lval=strtol(strb,&endptr,10); | 
| /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ | /* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ | 
| if( strb[0]=='\0' || (*endptr != '\0')){ | if( strb[0]=='\0' || (*endptr != '\0')){ | 
| printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav); | printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav); | 
| fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog); | fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog); | 
| return 1; | return 1; | 
| } | } | 
| } | } | 
| s[j][i]=lval; | s[j][i]=lval; | 
| Line 7590 int readdata(char datafile[], int firsto | Line 7894 int readdata(char datafile[], int firsto | 
| return 1; | return 1; | 
| } | } | 
| coqvar[iv][i]=dval; | coqvar[iv][i]=dval; | 
| covar[ncovcol+iv][i]=dval; /* including qvar in standard covar for performance reasons */ | |
| } | } | 
| strcpy(line,stra); | strcpy(line,stra); | 
| }/* end loop nqv */ | }/* end loop nqv */ | 
| Line 7656 int readdata(char datafile[], int firsto | Line 7961 int readdata(char datafile[], int firsto | 
| return (1); | return (1); | 
| } | } | 
| void removespace(char *str) { | void removefirstspace(char **stri){/*, char stro[]) {*/ | 
| char *p1 = str, *p2 = str; | char *p1 = *stri, *p2 = *stri; | 
| do | while (*p2 == ' ') | 
| while (*p2 == ' ') | p2++; | 
| p2++; | /* while ((*p1++ = *p2++) !=0) */ | 
| while (*p1++ == *p2++); | /* ; */ | 
| /* do */ | |
| /* while (*p2 == ' ') */ | |
| /* p2++; */ | |
| /* while (*p1++ == *p2++); */ | |
| *stri=p2; | |
| } | |
| int decoderesult ( char resultline[], int nres) | |
| /**< This routine decode one result line and returns the combination # of dummy covariates only **/ | |
| { | |
| int j=0, k=0, k1=0, k2=0, k3=0, k4=0, match=0, k2q=0, k3q=0, k4q=0; | |
| char resultsav[MAXLINE]; | |
| int resultmodel[MAXLINE]; | |
| int modelresult[MAXLINE]; | |
| char stra[80], strb[80], strc[80], strd[80],stre[80]; | |
| removefirstspace(&resultline); | |
| printf("decoderesult:%s\n",resultline); | |
| if (strstr(resultline,"v") !=0){ | |
| printf("Error. 'v' must be in upper case 'V' result: %s ",resultline); | |
| fprintf(ficlog,"Error. 'v' must be in upper case result: %s ",resultline);fflush(ficlog); | |
| return 1; | |
| } | |
| trimbb(resultsav, resultline); | |
| if (strlen(resultsav) >1){ | |
| j=nbocc(resultsav,'='); /**< j=Number of covariate values'=' */ | |
| } | |
| if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */ | |
| printf("ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | |
| fprintf(ficlog,"ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | |
| } | |
| for(k=1; k<=j;k++){ /* Loop on any covariate of the result line */ | |
| if(nbocc(resultsav,'=') >1){ | |
| cutl(stra,strb,resultsav,' '); /* keeps in strb after the first ' ' | |
| resultsav= V4=1 V5=25.1 V3=0 strb=V3=0 stra= V4=1 V5=25.1 */ | |
| cutl(strc,strd,strb,'='); /* strb:V4=1 strc=1 strd=V4 */ | |
| }else | |
| cutl(strc,strd,resultsav,'='); | |
| Tvalsel[k]=atof(strc); /* 1 */ | |
| cutl(strc,stre,strd,'V'); /* strd='V4' strc=4 stre='V' */; | |
| Tvarsel[k]=atoi(strc); | |
| /* Typevarsel[k]=1; /\* 1 for age product *\/ */ | |
| /* cptcovsel++; */ | |
| if (nbocc(stra,'=') >0) | |
| strcpy(resultsav,stra); /* and analyzes it */ | |
| } | |
| /* Checking for missing or useless values in comparison of current model needs */ | |
| for(k1=1; k1<= cptcovt ;k1++){ /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| if(Typevar[k1]==0){ /* Single covariate in model */ | |
| match=0; | |
| for(k2=1; k2 <=j;k2++){/* result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */ | |
| if(Tvar[k1]==Tvarsel[k2]) {/* Tvar[2]=5 == Tvarsel[1]=4 */ | |
| modelresult[k2]=k1;/* modelresult[2]=1 modelresult[1]=2 modelresult[3]=3 modelresult[6]=4 modelresult[9]=5 */ | |
| match=1; | |
| break; | |
| } | |
| } | |
| if(match == 0){ | |
| printf("Error in result line: %d value missing; result: %s, model=%s\n",k1, resultline, model); | |
| } | |
| } | |
| } | |
| /* Checking for missing or useless values in comparison of current model needs */ | |
| for(k2=1; k2 <=j;k2++){ /* result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */ | |
| match=0; | |
| for(k1=1; k1<= cptcovt ;k1++){ /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| if(Typevar[k1]==0){ /* Single */ | |
| if(Tvar[k1]==Tvarsel[k2]) { /* Tvar[2]=5 == Tvarsel[1]=4 */ | |
| resultmodel[k1]=k2; /* resultmodel[2]=1 resultmodel[1]=2 resultmodel[3]=3 resultmodel[6]=4 resultmodel[9]=5 */ | |
| ++match; | |
| } | |
| } | |
| } | |
| if(match == 0){ | |
| printf("Error in result line: %d value missing; result: %s, model=%s\n",k1, resultline, model); | |
| }else if(match > 1){ | |
| printf("Error in result line: %d doubled; result: %s, model=%s\n",k2, resultline, model); | |
| } | |
| } | |
| /* We need to deduce which combination number is chosen and save quantitative values */ | |
| /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| /* result line V4=1 V5=25.1 V3=0 V2=8 V1=1 */ | |
| /* should give a combination of dummy V4=1, V3=0, V1=1 => V4*2**(0) + V3*2**(1) + V1*2**(2) = 5 + (1offset) = 6*/ | |
| /* result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */ | |
| /* should give a combination of dummy V4=1, V3=1, V1=0 => V4*2**(0) + V3*2**(1) + V1*2**(2) = 3 + (1offset) = 4*/ | |
| /* 1 0 0 0 */ | |
| /* 2 1 0 0 */ | |
| /* 3 0 1 0 */ | |
| /* 4 1 1 0 */ /* V4=1, V3=1, V1=0 */ | |
| /* 5 0 0 1 */ | |
| /* 6 1 0 1 */ /* V4=1, V3=0, V1=1 */ | |
| /* 7 0 1 1 */ | |
| /* 8 1 1 1 */ | |
| for(k1=1, k=0, k4=0, k4q=0; k1 <=cptcovt;k1++){ /* model line */ | |
| if( Dummy[k1]==0 && Typevar[k1]==0 ){ /* Single dummy */ | |
| k3= resultmodel[k1]; /* resultmodel[2] = 1=k3 */ | |
| k2=(int)Tvarsel[k3]; /* Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 */ | |
| k+=Tvalsel[k3]*pow(2,k4); /* Tvalsel[1]=1 */ | |
| Tresult[nres][k4+1]=Tvalsel[k3]; | |
| Tvresult[nres][k4+1]=(int)Tvarsel[k3]; | |
| printf("Decoderesult Dummy k=%d, V(k2=V%d)= Tvalsel[%d]=%d, 2**(%d)\n",k, k2, k3, (int)Tvalsel[k3], k4); | |
| k4++;; | |
| } else if( Dummy[k1]==1 && Typevar[k1]==0 ){ /* Single quantitative */ | |
| k3q= resultmodel[k1]; /* resultmodel[2] = 1=k3 */ | |
| k2q=(int)Tvarsel[k3q]; /* Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 */ | |
| Tqresult[nres][k4q+1]=Tvalsel[k3q]; | |
| Tvqresult[nres][k4q+1]=(int)Tvarsel[k3q]; | |
| printf("Decoderesult Quantitative nres=%d, V(k2q=V%d)= Tvalsel[%d]=%d, Tvarsel[%d]=%f\n",nres, k2q, k3q, Tvarsel[k3q], k3q, Tvalsel[k3q]); | |
| k4q++;; | |
| } | |
| } | |
| TKresult[nres]=++k; /* Combination for the nresult and the model */ | |
| return (0); | |
| } | } | 
| int decodemodel ( char model[], int lastobs) | int decodemodel( char model[], int lastobs) | 
| /**< This routine decode the model and returns: | /**< This routine decodes the model and returns: | 
| * Model V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age+age*age | * Model V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age+age*age | 
| * - nagesqr = 1 if age*age in the model, otherwise 0. | * - nagesqr = 1 if age*age in the model, otherwise 0. | 
| * - cptcovt total number of covariates of the model nbocc(+)+1 = 8 excepting constant and age and age*age | * - cptcovt total number of covariates of the model nbocc(+)+1 = 8 excepting constant and age and age*age | 
| Line 7681 int decodemodel ( char model[], int last | Line 8103 int decodemodel ( char model[], int last | 
| */ | */ | 
| { | { | 
| int i, j, k, ks; | int i, j, k, ks; | 
| int j1, k1, k2; | int j1, k1, k2, k3, k4; | 
| char modelsav[80]; | char modelsav[80]; | 
| char stra[80], strb[80], strc[80], strd[80],stre[80]; | char stra[80], strb[80], strc[80], strd[80],stre[80]; | 
| char *strpt; | char *strpt; | 
| Line 7782 int decodemodel ( char model[], int last | Line 8204 int decodemodel ( char model[], int last | 
| /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k])]]*cov[2]; */ | /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k])]]*cov[2]; */ | 
| /* | /* | 
| * Treating invertedly V2+V1+V3*age+V2*V4 is as if written V2*V4 +V3*age + V1 + V2 */ | * Treating invertedly V2+V1+V3*age+V2*V4 is as if written V2*V4 +V3*age + V1 + V2 */ | 
| for(k=cptcovt; k>=1;k--) /**< Number of covariates not including constant and age, neither age*age*/ | for(k=cptcovt; k>=1;k--){ /**< Number of covariates not including constant and age, neither age*age*/ | 
| Tvar[k]=0; | Tvar[k]=0; Tprod[k]=0; Tposprod[k]=0; | 
| } | |
| cptcovage=0; | cptcovage=0; | 
| for(k=1; k<=cptcovt;k++){ /* Loop on total covariates of the model */ | for(k=1; k<=cptcovt;k++){ /* Loop on total covariates of the model */ | 
| cutl(stra,strb,modelsav,'+'); /* keeps in strb after the first '+' | cutl(stra,strb,modelsav,'+'); /* keeps in strb after the first '+' | 
| Line 7798 int decodemodel ( char model[], int last | Line 8221 int decodemodel ( char model[], int last | 
| cptcovprod--; | cptcovprod--; | 
| cutl(stre,strb,strd,'V'); /* strd=V3(input): stre="3" */ | cutl(stre,strb,strd,'V'); /* strd=V3(input): stre="3" */ | 
| Tvar[k]=atoi(stre); /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1 */ | Tvar[k]=atoi(stre); /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1 */ | 
| Typevar[k]=1; /* 2 for age product */ | Typevar[k]=1; /* 1 for age product */ | 
| 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; /* Tvar[4]=3, Tage[1] = 4 or V1+V1*age Tvar[2]=1, Tage[1]=2 */ | Tage[cptcovage]=k; /* Tvar[4]=3, Tage[1] = 4 or V1+V1*age Tvar[2]=1, Tage[1]=2 */ | 
| /*printf("stre=%s ", stre);*/ | /*printf("stre=%s ", stre);*/ | 
| Line 7815 int decodemodel ( char model[], int last | Line 8238 int decodemodel ( char model[], int last | 
| cptcovprodnoage++;k1++; | cptcovprodnoage++;k1++; | 
| cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/ | cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/ | 
| Tvar[k]=ncovcol+nqv+ntv+nqtv+k1; /* For model-covariate k tells which data-covariate to use but | Tvar[k]=ncovcol+nqv+ntv+nqtv+k1; /* 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 | 
| which is after existing variables ncovcol+nqv+ntv+nqtv + k1 | which is after existing variables ncovcol+nqv+ntv+nqtv + k1 | 
| If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2 | If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2 | 
| 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 */ | 
| Typevar[k]=2; /* 2 for double fixed dummy covariates */ | Typevar[k]=2; /* 2 for double fixed dummy covariates */ | 
| cutl(strc,strb,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 */ | 
| Tposprod[k]=k1; /* Tpsprod[3]=1, Tposprod[2]=5 */ | |
| 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*/ | 
| k2=k2+2; /* k2 is initialize to -1, We want to store the n and m in Vn*Vm at the end of Tvar */ | k2=k2+2; /* k2 is initialize to -1, We want to store the n and m in Vn*Vm at the end of Tvar */ | 
| Line 7840 int decodemodel ( char model[], int last | Line 8264 int decodemodel ( char model[], int last | 
| /*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);*/ | 
| cutl(strd,strc,strb,'V'); | cutl(strd,strc,strb,'V'); | 
| ks++; /**< Number of simple covariates*/ | ks++; /**< Number of simple covariates dummy or quantitative, fixe or varying */ | 
| cptcovn++; /** V4+V3+V5: V4 and V3 timevarying dummy covariates, V5 timevarying quantitative */ | cptcovn++; /** V4+V3+V5: V4 and V3 timevarying dummy covariates, V5 timevarying quantitative */ | 
| Tvar[k]=atoi(strd); | Tvar[k]=atoi(strd); | 
| Typevar[k]=0; /* 0 for simple covariates */ | Typevar[k]=0; /* 0 for simple covariates */ | 
| Line 7861 int decodemodel ( char model[], int last | Line 8285 int decodemodel ( char model[], int last | 
| scanf("%d ",i);*/ | scanf("%d ",i);*/ | 
| /* Decodemodel knows only the grammar (simple, product, age*) of the model but not what kind | /* Until here, decodemodel knows only the grammar (simple, product, age*) of the model but not what kind | 
| of variable (dummy vs quantitative, fixed vs time varying) is behind */ | of variable (dummy vs quantitative, fixed vs time varying) is behind. But we know the # of each. */ | 
| /* ncovcol= 1, nqv=1, ntv=2, nqtv= 1 = 5 possible variables data | /* ncovcol= 1, nqv=1 | ntv=2, nqtv= 1 = 5 possible variables data: 2 fixed 3, varying | 
| model= V2 + V4 +V3 + V4*V3 + V5*age + V5 , V1 is not used saving its place | model= V5 + V4 +V3 + V4*V3 + V5*age + V2 + V1*V2 + V1*age + V5*age, V1 is not used saving its place | 
| k = 1 2 3 4 5 6 | k = 1 2 3 4 5 6 7 8 9 | 
| Tvar[k]= 2 4 3 1+1+2+1+1=6 5 5 | Tvar[k]= 5 4 3 1+1+2+1+1=6 5 2 7 1 5 | 
| Typevar[k]=0 0 0 2 1 0 | Typevar[k]= 0 0 0 2 1 0 2 1 1 | 
| Fixed[k] 1 1 1 1 3 0 0 or 2 2 3 | |
| Dummy[k] 1 0 0 0 3 1 1 2 3 | |
| Tmodelind[combination of covar]=k; | |
| */ | */ | 
| /* Dispatching between quantitative and time varying covariates */ | /* Dispatching between quantitative and time varying covariates */ | 
| /* If Tvar[k] >ncovcol it is a product */ | |
| /* Tvar[k] is the value n of Vn with n varying for 1 to nvcol, or p Vp=Vn*Vm for product */ | /* Tvar[k] is the value n of Vn with n varying for 1 to nvcol, or p Vp=Vn*Vm for product */ | 
| for(k=1, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */ | /* Computing effective variables, ie used by the model, that is from the cptcovt variables */ | 
| if (Tvar[k] <=ncovcol){ /* Simple fixed dummy covariatee */ | printf("Model=%s\n\ | 
| Typevar: 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product \n\ | |
| Fixed[k] 0=fixed (product or simple), 1 varying, 2 fixed with age product, 3 varying with age product \n\ | |
| Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product\n",model); | |
| fprintf(ficlog,"Model=%s\n\ | |
| Typevar: 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product \n\ | |
| Fixed[k] 0=fixed (product or simple), 1 varying, 2 fixed with age product, 3 varying with age product \n\ | |
| Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product\n",model); | |
| for(k=1, ncovf=0, nsd=0, nsq=0, ncovv=0, ncova=0, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */ | |
| if (Tvar[k] <=ncovcol && Typevar[k]==0 ){ /* Simple fixed dummy (<=ncovcol) covariates */ | |
| Fixed[k]= 0; | |
| Dummy[k]= 0; | |
| ncoveff++; | |
| ncovf++; | |
| nsd++; | |
| modell[k].maintype= FTYPE; | |
| TvarsD[nsd]=Tvar[k]; | |
| TvarsDind[nsd]=k; | |
| TvarF[ncovf]=Tvar[k]; | |
| TvarFind[ncovf]=k; | |
| TvarFD[ncoveff]=Tvar[k]; /* TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| TvarFDind[ncoveff]=k; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| }else if( Tvar[k] <=ncovcol && Typevar[k]==2){ /* Product of fixed dummy (<=ncovcol) covariates */ | |
| Fixed[k]= 0; | |
| Dummy[k]= 0; | |
| ncoveff++; | ncoveff++; | 
| }else if( Tvar[k] <=ncovcol+nqv && Typevar[k]==0){ /* Remind that product Vn*Vm are added in k*/ | ncovf++; | 
| nqfveff++; /* Only simple fixed quantitative variable */ | modell[k].maintype= FTYPE; | 
| }else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){ | TvarF[ncovf]=Tvar[k]; | 
| TvarFind[ncovf]=k; | |
| TvarFD[ncoveff]=Tvar[k]; /* TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| TvarFDind[ncoveff]=k; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ | |
| }else if( Tvar[k] <=ncovcol+nqv && Typevar[k]==0){ /* Remind that product Vn*Vm are added in k*/ /* Only simple fixed quantitative variable */ | |
| Fixed[k]= 0; | |
| Dummy[k]= 1; | |
| nqfveff++; | |
| modell[k].maintype= FTYPE; | |
| modell[k].subtype= FQ; | |
| nsq++; | |
| TvarsQ[nsq]=Tvar[k]; | |
| TvarsQind[nsq]=k; | |
| ncovf++; | |
| TvarF[ncovf]=Tvar[k]; | |
| TvarFind[ncovf]=k; | |
| TvarFQ[nqfveff]=Tvar[k]-ncovcol; /* TvarFQ[1]=V2-1=1st in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */ | |
| TvarFQind[nqfveff]=k; /* TvarFQind[1]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */ | |
| }else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){/* Only simple time varying variables */ | |
| Fixed[k]= 1; | |
| Dummy[k]= 0; | |
| ntveff++; /* Only simple time varying dummy variable */ | ntveff++; /* Only simple time varying dummy variable */ | 
| }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv && Typevar[k]==0){ | modell[k].maintype= VTYPE; | 
| nqtveff++;/* Only simple time varying quantitative variable */ | modell[k].subtype= VD; | 
| nsd++; | |
| TvarsD[nsd]=Tvar[k]; | |
| TvarsDind[nsd]=k; | |
| ncovv++; /* Only simple time varying variables */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| TvarVD[ntveff]=Tvar[k]; /* TvarVD[1]=V4 TvarVD[2]=V3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */ | |
| TvarVDind[ntveff]=k; /* TvarVDind[1]=2 TvarVDind[2]=3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */ | |
| printf("Quasi Tmodelind[%d]=%d,Tvar[Tmodelind[%d]]=V%d, ncovcol=%d, nqv=%d,Tvar[k]- ncovcol-nqv=%d\n",ntveff,k,ntveff,Tvar[k], ncovcol, nqv,Tvar[k]- ncovcol-nqv); | |
| printf("Quasi TmodelInvind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv); | |
| }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv && Typevar[k]==0){ /* Only simple time varying quantitative variable V5*/ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| nqtveff++; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VQ; | |
| ncovv++; /* Only simple time varying variables */ | |
| nsq++; | |
| TvarsQ[nsq]=Tvar[k]; | |
| TvarsQind[nsq]=k; | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| TvarVQ[nqtveff]=Tvar[k]; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ | |
| TvarVQind[nqtveff]=k; /* TvarVQind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */ | |
| TmodelInvQind[nqtveff]=Tvar[k]- ncovcol-nqv-ntv;/* Only simple time varying quantitative variable */ | |
| /* Tmodeliqind[k]=nqtveff;/\* Only simple time varying quantitative variable *\/ */ | |
| printf("Quasi TmodelQind[%d]=%d,Tvar[TmodelQind[%d]]=V%d, ncovcol=%d, nqv=%d, ntv=%d,Tvar[k]- ncovcol-nqv-ntv=%d\n",nqtveff,k,nqtveff,Tvar[k], ncovcol, nqv, ntv, Tvar[k]- ncovcol-nqv-ntv); | |
| printf("Quasi TmodelInvQind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv-ntv); | |
| }else if (Typevar[k] == 1) { /* product with age */ | |
| ncova++; | |
| TvarA[ncova]=Tvar[k]; | |
| TvarAind[ncova]=k; | |
| if (Tvar[k] <=ncovcol ){ /* Product age with fixed dummy covariatee */ | |
| Fixed[k]= 2; | |
| Dummy[k]= 2; | |
| modell[k].maintype= ATYPE; | |
| modell[k].subtype= APFD; | |
| /* ncoveff++; */ | |
| }else if( Tvar[k] <=ncovcol+nqv) { /* Remind that product Vn*Vm are added in k*/ | |
| Fixed[k]= 2; | |
| Dummy[k]= 3; | |
| modell[k].maintype= ATYPE; | |
| modell[k].subtype= APFQ; /* Product age * fixed quantitative */ | |
| /* nqfveff++; /\* Only simple fixed quantitative variable *\/ */ | |
| }else if( Tvar[k] <=ncovcol+nqv+ntv ){ | |
| Fixed[k]= 3; | |
| Dummy[k]= 2; | |
| modell[k].maintype= ATYPE; | |
| modell[k].subtype= APVD; /* Product age * varying dummy */ | |
| /* ntveff++; /\* Only simple time varying dummy variable *\/ */ | |
| }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv){ | |
| Fixed[k]= 3; | |
| Dummy[k]= 3; | |
| modell[k].maintype= ATYPE; | |
| modell[k].subtype= APVQ; /* Product age * varying quantitative */ | |
| /* nqtveff++;/\* Only simple time varying quantitative variable *\/ */ | |
| } | |
| }else if (Typevar[k] == 2) { /* product without age */ | |
| k1=Tposprod[k]; | |
| if(Tvard[k1][1] <=ncovcol){ | |
| if(Tvard[k1][2] <=ncovcol){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 0; | |
| modell[k].maintype= FTYPE; | |
| modell[k].subtype= FPDD; /* Product fixed dummy * fixed dummy */ | |
| ncovf++; /* Fixed variables without age */ | |
| TvarF[ncovf]=Tvar[k]; | |
| TvarFind[ncovf]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv){ | |
| Fixed[k]= 0; /* or 2 ?*/ | |
| Dummy[k]= 1; | |
| modell[k].maintype= FTYPE; | |
| modell[k].subtype= FPDQ; /* Product fixed dummy * fixed quantitative */ | |
| ncovf++; /* Varying variables without age */ | |
| TvarF[ncovf]=Tvar[k]; | |
| TvarFind[ncovf]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 0; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPDD; /* Product fixed dummy * varying dummy */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPDQ; /* Product fixed dummy * varying quantitative */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| } | |
| }else if(Tvard[k1][1] <=ncovcol+nqv){ | |
| if(Tvard[k1][2] <=ncovcol){ | |
| Fixed[k]= 0; /* or 2 ?*/ | |
| Dummy[k]= 1; | |
| modell[k].maintype= FTYPE; | |
| modell[k].subtype= FPDQ; /* Product fixed quantitative * fixed dummy */ | |
| ncovf++; /* Fixed variables without age */ | |
| TvarF[ncovf]=Tvar[k]; | |
| TvarFind[ncovf]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPDQ; /* Product fixed quantitative * varying dummy */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPQQ; /* Product fixed quantitative * varying quantitative */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| } | |
| }else if(Tvard[k1][1] <=ncovcol+nqv+ntv){ | |
| if(Tvard[k1][2] <=ncovcol){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPDD; /* Product time varying dummy * fixed dummy */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPDQ; /* Product time varying dummy * fixed quantitative */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 0; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPDD; /* Product time varying dummy * time varying dummy */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPDQ; /* Product time varying dummy * time varying quantitative */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| } | |
| }else if(Tvard[k1][1] <=ncovcol+nqv+ntv+nqtv){ | |
| if(Tvard[k1][2] <=ncovcol){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPDQ; /* Product time varying quantitative * fixed dummy */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPQQ; /* Product time varying quantitative * fixed quantitative */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPDQ; /* Product time varying quantitative * time varying dummy */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){ | |
| Fixed[k]= 1; | |
| Dummy[k]= 1; | |
| modell[k].maintype= VTYPE; | |
| modell[k].subtype= VPQQ; /* Product time varying quantitative * time varying quantitative */ | |
| ncovv++; /* Varying variables without age */ | |
| TvarV[ncovv]=Tvar[k]; | |
| TvarVind[ncovv]=k; | |
| } | |
| }else{ | |
| printf("Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]); | |
| fprintf(ficlog,"Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]); | |
| } /* end k1 */ | |
| }else{ | }else{ | 
| printf("Other types in effective covariates \n"); | printf("Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]); | 
| fprintf(ficlog,"Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]); | |
| } | |
| printf("Decodemodel, k=%d, Tvar[%d]=V%d,Typevar=%d, Fixed=%d, Dummy=%d\n",k, k,Tvar[k],Typevar[k],Fixed[k],Dummy[k]); | |
| printf(" modell[%d].maintype=%d, modell[%d].subtype=%d\n",k,modell[k].maintype,k,modell[k].subtype); | |
| fprintf(ficlog,"Decodemodel, k=%d, Tvar[%d]=V%d,Typevar=%d, Fixed=%d, Dummy=%d\n",k, k,Tvar[k],Typevar[k],Fixed[k],Dummy[k]); | |
| } | |
| /* Searching for doublons in the model */ | |
| for(k1=1; k1<= cptcovt;k1++){ | |
| for(k2=1; k2 <k1;k2++){ | |
| if((Typevar[k1]==Typevar[k2]) && (Fixed[Tvar[k1]]==Fixed[Tvar[k2]]) && (Dummy[Tvar[k1]]==Dummy[Tvar[k2]] )){ | |
| if((Typevar[k1] == 0 || Typevar[k1] == 1)){ /* Simple or age product */ | |
| if(Tvar[k1]==Tvar[k2]){ | |
| printf("Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); | |
| fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog); | |
| return(1); | |
| } | |
| }else if (Typevar[k1] ==2){ | |
| k3=Tposprod[k1]; | |
| k4=Tposprod[k2]; | |
| if( ((Tvard[k3][1]== Tvard[k4][1])&&(Tvard[k3][2]== Tvard[k4][2])) || ((Tvard[k3][1]== Tvard[k4][2])&&(Tvard[k3][2]== Tvard[k4][1])) ){ | |
| printf("Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); | |
| fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog); | |
| return(1); | |
| } | |
| } | |
| } | |
| } | } | 
| } | } | 
| printf("ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn); | printf("ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn); | 
| fprintf(ficlog,"ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn); | fprintf(ficlog,"ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn); | 
| printf("ncovf=%d, ncovv=%d, ncova=%d, nsd=%d, nsq=%d\n",ncovf,ncovv,ncova,nsd,nsq); | |
| fprintf(ficlog,"ncovf=%d, ncovv=%d, ncova=%d, nsd=%d, nsq=%d\n",ncovf,ncovv,ncova,nsd, nsq); | |
| return (0); /* with covar[new additional covariate if product] and Tage if age */ | return (0); /* with covar[new additional covariate if product] and Tage if age */ | 
| /*endread:*/ | /*endread:*/ | 
| printf("Exiting decodemodel: "); | printf("Exiting decodemodel: "); | 
| Line 8201 void syscompilerinfo(int logged) | Line 8895 void syscompilerinfo(int logged) | 
| int prevalence_limit(double *p, double **prlim, double ageminpar, double agemaxpar, double ftolpl, int *ncvyearp){ | int prevalence_limit(double *p, double **prlim, double ageminpar, double agemaxpar, double ftolpl, int *ncvyearp){ | 
| /*--------------- Prevalence limit (period or stable prevalence) --------------*/ | /*--------------- Prevalence limit (period or stable prevalence) --------------*/ | 
| int i, j, k, i1 ; | int i, j, k, i1, k4=0, nres=0 ; | 
| /* double ftolpl = 1.e-10; */ | /* double ftolpl = 1.e-10; */ | 
| double age, agebase, agelim; | double age, agebase, agelim; | 
| double tot; | double tot; | 
| Line 8212 int prevalence_limit(double *p, double * | Line 8906 int prevalence_limit(double *p, double * | 
| printf("Problem with period (stable) prevalence resultfile: %s\n", filerespl);return 1; | printf("Problem with period (stable) prevalence resultfile: %s\n", filerespl);return 1; | 
| fprintf(ficlog,"Problem with period (stable) prevalence resultfile: %s\n", filerespl);return 1; | fprintf(ficlog,"Problem with period (stable) prevalence resultfile: %s\n", filerespl);return 1; | 
| } | } | 
| printf("Computing period (stable) prevalence: result on file '%s' \n", filerespl); | printf("\nComputing period (stable) prevalence: result on file '%s' \n", filerespl); | 
| fprintf(ficlog,"Computing period (stable) prevalence: result on file '%s' \n", filerespl); | fprintf(ficlog,"\nComputing period (stable) prevalence: result on file '%s' \n", filerespl); | 
| pstamp(ficrespl); | pstamp(ficrespl); | 
| fprintf(ficrespl,"# Period (stable) prevalence. Precision given by ftolpl=%g \n", ftolpl); | fprintf(ficrespl,"# Period (stable) prevalence. Precision given by ftolpl=%g \n", ftolpl); | 
| fprintf(ficrespl,"#Age "); | fprintf(ficrespl,"#Age "); | 
| Line 8225 int prevalence_limit(double *p, double * | Line 8919 int prevalence_limit(double *p, double * | 
| agebase=ageminpar; | agebase=ageminpar; | 
| agelim=agemaxpar; | agelim=agemaxpar; | 
| i1=pow(2,ncoveff); | /* i1=pow(2,ncoveff); */ | 
| i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */ | |
| if (cptcovn < 1){i1=1;} | if (cptcovn < 1){i1=1;} | 
| for(nres=1; nres <= nresult; nres++) /* For each resultline */ | |
| for(k=1; k<=i1;k++){ | for(k=1; k<=i1;k++){ | 
| if(TKresult[nres]!= k) | |
| continue; | |
| /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | 
| /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */ | /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */ | 
| //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ | //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ | 
| Line 8238 int prevalence_limit(double *p, double * | Line 8937 int prevalence_limit(double *p, double * | 
| fprintf(ficrespl,"#******"); | fprintf(ficrespl,"#******"); | 
| printf("#******"); | printf("#******"); | 
| fprintf(ficlog,"#******"); | fprintf(ficlog,"#******"); | 
| for(j=1;j<=nqfveff;j++) { | for(j=1;j<=cptcoveff ;j++) {/* all covariates */ | 
| fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); /* Here problem for varying dummy*/ | 
| printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| } | } | 
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| fprintf(ficlog," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| fprintf(ficrespl,"******\n"); | fprintf(ficrespl,"******\n"); | 
| printf("******\n"); | printf("******\n"); | 
| fprintf(ficlog,"******\n"); | fprintf(ficlog,"******\n"); | 
| if(invalidvarcomb[k]){ | if(invalidvarcomb[k]){ | 
| printf("\nCombination (%d) ignored because no cases \n",k); | printf("\nCombination (%d) ignored because no case \n",k); | 
| fprintf(ficrespl,"#Combination (%d) ignored because no cases \n",k); | fprintf(ficrespl,"#Combination (%d) ignored because no case \n",k); | 
| fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k); | fprintf(ficlog,"\nCombination (%d) ignored because no case \n",k); | 
| continue; | continue; | 
| } | } | 
| fprintf(ficrespl,"#Age "); | fprintf(ficrespl,"#Age "); | 
| for(j=1;j<=nqfveff;j++) { | for(j=1;j<=cptcoveff;j++) { | 
| fprintf(ficrespl,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrespl,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| } | } | 
| for(i=1; i<=nlstate;i++) fprintf(ficrespl," %d-%d ",i,i); | for(i=1; i<=nlstate;i++) fprintf(ficrespl," %d-%d ",i,i); | 
| fprintf(ficrespl,"Total Years_to_converge\n"); | fprintf(ficrespl,"Total Years_to_converge\n"); | 
| for (age=agebase; age<=agelim; age++){ | for (age=agebase; age<=agelim; age++){ | 
| /* for (age=agebase; age<=agebase; age++){ */ | /* for (age=agebase; age<=agebase; age++){ */ | 
| prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k); | prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k, nres); | 
| fprintf(ficrespl,"%.0f ",age ); | fprintf(ficrespl,"%.0f ",age ); | 
| for(j=1;j<=nqfveff;j++) | for(j=1;j<=cptcoveff;j++) | 
| fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| tot=0.; | tot=0.; | 
| for(i=1; i<=nlstate;i++){ | for(i=1; i<=nlstate;i++){ | 
| tot += prlim[i][i]; | tot += prlim[i][i]; | 
| fprintf(ficrespl," %.5f", prlim[i][i]); | fprintf(ficrespl," %.5f", prlim[i][i]); | 
| } | } | 
| fprintf(ficrespl," %.3f %d\n", tot, *ncvyearp); | fprintf(ficrespl," %.3f %d\n", tot, *ncvyearp); | 
| } /* Age */ | } /* Age */ | 
| Line 8284 int back_prevalence_limit(double *p, dou | Line 8987 int back_prevalence_limit(double *p, dou | 
| /* Computes the back prevalence limit for any combination of covariate values | /* Computes the back prevalence limit for any combination of covariate values | 
| * at any age between ageminpar and agemaxpar | * at any age between ageminpar and agemaxpar | 
| */ | */ | 
| int i, j, k, i1 ; | int i, j, k, i1, nres=0 ; | 
| /* double ftolpl = 1.e-10; */ | /* double ftolpl = 1.e-10; */ | 
| double age, agebase, agelim; | double age, agebase, agelim; | 
| double tot; | double tot; | 
| Line 8312 int back_prevalence_limit(double *p, dou | Line 9015 int back_prevalence_limit(double *p, dou | 
| agelim=agemaxpar; | agelim=agemaxpar; | 
| i1=pow(2,nqfveff); | i1=pow(2,cptcoveff); | 
| if (cptcovn < 1){i1=1;} | if (cptcovn < 1){i1=1;} | 
| for(k=1; k<=i1;k++){ | for(nres=1; nres <= nresult; nres++) /* For each resultline */ | 
| /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */ | 
| /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */ | if(TKresult[nres]!= k) | 
| //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ | continue; | 
| /* k=k+1; */ | |
| /* to clean */ | |
| //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov)); | //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov)); | 
| fprintf(ficresplb,"#******"); | fprintf(ficresplb,"#******"); | 
| printf("#******"); | printf("#******"); | 
| fprintf(ficlog,"#******"); | fprintf(ficlog,"#******"); | 
| for(j=1;j<=nqfveff;j++) { | for(j=1;j<=cptcoveff ;j++) {/* all covariates */ | 
| fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| } | } | 
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficresplb," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| fprintf(ficresplb,"******\n"); | fprintf(ficresplb,"******\n"); | 
| printf("******\n"); | printf("******\n"); | 
| fprintf(ficlog,"******\n"); | fprintf(ficlog,"******\n"); | 
| if(invalidvarcomb[k]){ | if(invalidvarcomb[k]){ | 
| printf("\nCombination (%d) ignored because no cases \n",k); | printf("\nCombination (%d) ignored because no cases \n",k); | 
| fprintf(ficresplb,"#Combination (%d) ignored because no cases \n",k); | fprintf(ficresplb,"#Combination (%d) ignored because no cases \n",k); | 
| fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k); | fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k); | 
| continue; | continue; | 
| } | } | 
| fprintf(ficresplb,"#Age "); | fprintf(ficresplb,"#Age "); | 
| for(j=1;j<=nqfveff;j++) { | for(j=1;j<=cptcoveff;j++) { | 
| fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| } | } | 
| for(i=1; i<=nlstate;i++) fprintf(ficresplb," %d-%d ",i,i); | for(i=1; i<=nlstate;i++) fprintf(ficresplb," %d-%d ",i,i); | 
| Line 8353 int back_prevalence_limit(double *p, dou | Line 9059 int back_prevalence_limit(double *p, dou | 
| if(mobilavproj > 0){ | if(mobilavproj > 0){ | 
| /* bprevalim(bprlim, mobaverage, nlstate, p, age, ageminpar, agemaxpar, oldm, savm, doldm, dsavm, ftolpl, ncvyearp, k); */ | /* bprevalim(bprlim, mobaverage, nlstate, p, age, ageminpar, agemaxpar, oldm, savm, doldm, dsavm, ftolpl, ncvyearp, k); */ | 
| /* bprevalim(bprlim, mobaverage, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */ | /* bprevalim(bprlim, mobaverage, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */ | 
| bprevalim(bprlim, mobaverage, nlstate, p, age, ftolpl, ncvyearp, k); | bprevalim(bprlim, mobaverage, nlstate, p, age, ftolpl, ncvyearp, k); | 
| }else if (mobilavproj == 0){ | }else if (mobilavproj == 0){ | 
| printf("There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj); | printf("There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj); | 
| fprintf(ficlog,"There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj); | fprintf(ficlog,"There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj); | 
| exit(1); | exit(1); | 
| }else{ | }else{ | 
| /* bprevalim(bprlim, probs, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */ | /* bprevalim(bprlim, probs, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */ | 
| bprevalim(bprlim, probs, nlstate, p, age, ftolpl, ncvyearp, k); | bprevalim(bprlim, probs, nlstate, p, age, ftolpl, ncvyearp, k); | 
| } | } | 
| fprintf(ficresplb,"%.0f ",age ); | fprintf(ficresplb,"%.0f ",age ); | 
| for(j=1;j<=nqfveff;j++) | for(j=1;j<=cptcoveff;j++) | 
| fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| tot=0.; | tot=0.; | 
| for(i=1; i<=nlstate;i++){ | for(i=1; i<=nlstate;i++){ | 
| tot += bprlim[i][i]; | tot += bprlim[i][i]; | 
| fprintf(ficresplb," %.5f", bprlim[i][i]); | fprintf(ficresplb," %.5f", bprlim[i][i]); | 
| } | } | 
| fprintf(ficresplb," %.3f %d\n", tot, *ncvyearp); | fprintf(ficresplb," %.3f %d\n", tot, *ncvyearp); | 
| } /* Age */ | } /* Age */ | 
| Line 8388 int hPijx(double *p, int bage, int fage) | Line 9094 int hPijx(double *p, int bage, int fage) | 
| int agelim; | int agelim; | 
| int hstepm; | int hstepm; | 
| int nhstepm; | int nhstepm; | 
| int h, i, i1, j, k; | int h, i, i1, j, k, k4, nres=0; | 
| double agedeb; | double agedeb; | 
| double ***p3mat; | double ***p3mat; | 
| Line 8411 int hPijx(double *p, int bage, int fage) | Line 9117 int hPijx(double *p, int bage, int fage) | 
| /* hstepm=1; aff par mois*/ | /* hstepm=1; aff par mois*/ | 
| pstamp(ficrespij); | pstamp(ficrespij); | 
| fprintf(ficrespij,"#****** h Pij x Probability to be in state j at age x+h being in i at x "); | fprintf(ficrespij,"#****** h Pij x Probability to be in state j at age x+h being in i at x "); | 
| i1= pow(2,nqfveff); | i1= pow(2,cptcoveff); | 
| /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | 
| /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ | /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ | 
| /* k=k+1; */ | /* k=k+1; */ | 
| for (k=1; k <= (int) pow(2,nqfveff); k++){ | for(nres=1; nres <= nresult; nres++) /* For each resultline */ | 
| for(k=1; k<=i1;k++){ | |
| if(TKresult[nres]!= k) | |
| continue; | |
| fprintf(ficrespij,"\n#****** "); | fprintf(ficrespij,"\n#****** "); | 
| for(j=1;j<=nqfveff;j++) | for(j=1;j<=cptcoveff;j++) | 
| fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| fprintf(ficrespij," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]); | |
| } | |
| fprintf(ficrespij,"******\n"); | fprintf(ficrespij,"******\n"); | 
| for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */ | for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */ | 
| Line 8429 int hPijx(double *p, int bage, int fage) | Line 9142 int hPijx(double *p, int bage, int fage) | 
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | 
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; | 
| hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); | hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k, nres); | 
| fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j="); | fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j="); | 
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) | 
| for(j=1; j<=nlstate+ndeath;j++) | for(j=1; j<=nlstate+ndeath;j++) | 
| Line 8483 int hPijx(double *p, int bage, int fage) | Line 9196 int hPijx(double *p, int bage, int fage) | 
| /* hstepm=1; aff par mois*/ | /* hstepm=1; aff par mois*/ | 
| pstamp(ficrespijb); | pstamp(ficrespijb); | 
| fprintf(ficrespijb,"#****** h Pij x Back Probability to be in state i at age x-h being in j at x "); | fprintf(ficrespijb,"#****** h Pij x Back Probability to be in state i at age x-h being in j at x "); | 
| i1= pow(2,nqfveff); | i1= pow(2,cptcoveff); | 
| /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ | 
| /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ | /* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ | 
| /* k=k+1; */ | /* k=k+1; */ | 
| for (k=1; k <= (int) pow(2,nqfveff); k++){ | for (k=1; k <= (int) pow(2,cptcoveff); k++){ | 
| fprintf(ficrespijb,"\n#****** "); | fprintf(ficrespijb,"\n#****** "); | 
| for(j=1;j<=nqfveff;j++) | for(j=1;j<=cptcoveff;j++) | 
| fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| fprintf(ficrespijb,"******\n"); | fprintf(ficrespijb,"******\n"); | 
| if(invalidvarcomb[k]){ | if(invalidvarcomb[k]){ | 
| Line 8555 int main(int argc, char *argv[]) | Line 9268 int main(int argc, char *argv[]) | 
| int itimes; | int itimes; | 
| int NDIM=2; | int NDIM=2; | 
| int vpopbased=0; | int vpopbased=0; | 
| int nres=0; | |
| char ca[32], cb[32]; | char ca[32], cb[32]; | 
| /* FILE *fichtm; *//* Html File */ | /* FILE *fichtm; *//* Html File */ | 
| Line 8573 int main(int argc, char *argv[]) | Line 9287 int main(int argc, char *argv[]) | 
| char line[MAXLINE]; | char line[MAXLINE]; | 
| char path[MAXLINE],pathc[MAXLINE],pathcd[MAXLINE],pathtot[MAXLINE]; | char path[MAXLINE],pathc[MAXLINE],pathcd[MAXLINE],pathtot[MAXLINE]; | 
| char model[MAXLINE], modeltemp[MAXLINE]; | char modeltemp[MAXLINE]; | 
| char resultline[MAXLINE]; | |
| char pathr[MAXLINE], pathimach[MAXLINE]; | char pathr[MAXLINE], pathimach[MAXLINE]; | 
| char *tok, *val; /* pathtot */ | char *tok, *val; /* pathtot */ | 
| int firstobs=1, lastobs=10; | int firstobs=1, lastobs=10; | 
| Line 8885 int main(int argc, char *argv[]) | Line 9601 int main(int argc, char *argv[]) | 
| covar=matrix(0,NCOVMAX,1,n); /**< used in readdata */ | covar=matrix(0,NCOVMAX,1,n); /**< used in readdata */ | 
| coqvar=matrix(1,nqv,1,n); /**< Fixed quantitative covariate */ | coqvar=matrix(1,nqv,1,n); /**< Fixed quantitative covariate */ | 
| cotvar=ma3x(1,maxwav,1,ntv,1,n); /**< Time varying covariate */ | cotvar=ma3x(1,maxwav,1,ntv+nqtv,1,n); /**< Time varying covariate (dummy and quantitative)*/ | 
| cotqvar=ma3x(1,maxwav,1,nqtv,1,n); /**< Time varying quantitative covariate */ | cotqvar=ma3x(1,maxwav,1,nqtv,1,n); /**< Time varying quantitative covariate */ | 
| cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/ | 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 | 
| Line 8938 int main(int argc, char *argv[]) | Line 9654 int main(int argc, char *argv[]) | 
| param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); | param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); | 
| for(i=1; i <=nlstate; i++){ | for(i=1; i <=nlstate; i++){ | 
| j=0; | j=0; | 
| for(jj=1; jj <=nlstate+ndeath; jj++){ | for(jj=1; jj <=nlstate+ndeath; jj++){ | 
| if(jj==i) continue; | if(jj==i) continue; | 
| j++; | j++; | 
| fscanf(ficpar,"%1d%1d",&i1,&j1); | fscanf(ficpar,"%1d%1d",&i1,&j1); | 
| if ((i1 != i) || (j1 != jj)){ | if ((i1 != i) || (j1 != jj)){ | 
| printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n \ | printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n \ | 
| It might be a problem of design; if ncovcol and the model are correct\n \ | It might be a problem of design; if ncovcol and the model are correct\n \ | 
| run imach with mle=-1 to get a correct template of the parameter file.\n",numlinepar, i,j, i1, j1); | run imach with mle=-1 to get a correct template of the parameter file.\n",numlinepar, i,j, i1, j1); | 
| exit(1); | exit(1); | 
| } | } | 
| fprintf(ficparo,"%1d%1d",i1,j1); | fprintf(ficparo,"%1d%1d",i1,j1); | 
| if(mle==1) | if(mle==1) | 
| printf("%1d%1d",i,jj); | printf("%1d%1d",i,jj); | 
| fprintf(ficlog,"%1d%1d",i,jj); | fprintf(ficlog,"%1d%1d",i,jj); | 
| for(k=1; k<=ncovmodel;k++){ | for(k=1; k<=ncovmodel;k++){ | 
| fscanf(ficpar," %lf",¶m[i][j][k]); | fscanf(ficpar," %lf",¶m[i][j][k]); | 
| if(mle==1){ | if(mle==1){ | 
| printf(" %lf",param[i][j][k]); | printf(" %lf",param[i][j][k]); | 
| fprintf(ficlog," %lf",param[i][j][k]); | fprintf(ficlog," %lf",param[i][j][k]); | 
| } | } | 
| else | else | 
| fprintf(ficlog," %lf",param[i][j][k]); | fprintf(ficlog," %lf",param[i][j][k]); | 
| fprintf(ficparo," %lf",param[i][j][k]); | fprintf(ficparo," %lf",param[i][j][k]); | 
| } | } | 
| fscanf(ficpar,"\n"); | fscanf(ficpar,"\n"); | 
| numlinepar++; | numlinepar++; | 
| if(mle==1) | if(mle==1) | 
| printf("\n"); | printf("\n"); | 
| fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); | 
| fprintf(ficparo,"\n"); | fprintf(ficparo,"\n"); | 
| } | } | 
| } | } | 
| fflush(ficlog); | fflush(ficlog); | 
| /* Reads scales values */ | /* Reads scales values */ | 
| p=param[1][1]; | p=param[1][1]; | 
| Line 8989 run imach with mle=-1 to get a correct t | Line 9705 run imach with mle=-1 to get a correct t | 
| for(i=1; i <=nlstate; i++){ | for(i=1; i <=nlstate; i++){ | 
| for(j=1; j <=nlstate+ndeath-1; j++){ | for(j=1; j <=nlstate+ndeath-1; j++){ | 
| fscanf(ficpar,"%1d%1d",&i1,&j1); | fscanf(ficpar,"%1d%1d",&i1,&j1); | 
| if ( (i1-i) * (j1-j) != 0){ | if ( (i1-i) * (j1-j) != 0){ | 
| printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1); | printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1); | 
| exit(1); | exit(1); | 
| } | } | 
| printf("%1d%1d",i,j); | printf("%1d%1d",i,j); | 
| fprintf(ficparo,"%1d%1d",i1,j1); | fprintf(ficparo,"%1d%1d",i1,j1); | 
| fprintf(ficlog,"%1d%1d",i1,j1); | fprintf(ficlog,"%1d%1d",i1,j1); | 
| for(k=1; k<=ncovmodel;k++){ | for(k=1; k<=ncovmodel;k++){ | 
| fscanf(ficpar,"%le",&delti3[i][j][k]); | fscanf(ficpar,"%le",&delti3[i][j][k]); | 
| printf(" %le",delti3[i][j][k]); | printf(" %le",delti3[i][j][k]); | 
| fprintf(ficparo," %le",delti3[i][j][k]); | fprintf(ficparo," %le",delti3[i][j][k]); | 
| fprintf(ficlog," %le",delti3[i][j][k]); | fprintf(ficlog," %le",delti3[i][j][k]); | 
| } | } | 
| fscanf(ficpar,"\n"); | fscanf(ficpar,"\n"); | 
| numlinepar++; | numlinepar++; | 
| printf("\n"); | printf("\n"); | 
| fprintf(ficparo,"\n"); | fprintf(ficparo,"\n"); | 
| fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); | 
| } | } | 
| } | } | 
| fflush(ficlog); | fflush(ficlog); | 
| /* Reads covariance matrix */ | /* Reads covariance matrix */ | 
| delti=delti3[1][1]; | delti=delti3[1][1]; | 
| Line 9036 run imach with mle=-1 to get a correct t | Line 9752 run imach with mle=-1 to get a correct t | 
| /* Scans npar lines */ | /* Scans npar lines */ | 
| for(i=1; i <=npar; i++){ | for(i=1; i <=npar; i++){ | 
| count=fscanf(ficpar,"%1d%1d%1d",&i1,&j1,&jk); | count=fscanf(ficpar,"%1d%1d%d",&i1,&j1,&jk); | 
| if(count != 3){ | if(count != 3){ | 
| printf("Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\ | printf("Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\ | 
| This is probably because your covariance matrix doesn't \n contain exactly %d lines corresponding to your model line '1+age+%s'.\n\ | This is probably because your covariance matrix doesn't \n contain exactly %d lines corresponding to your model line '1+age+%s'.\n\ | 
| Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model); | Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model); | 
| fprintf(ficlog,"Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\ | fprintf(ficlog,"Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\ | 
| This is probably because your covariance matrix doesn't \n contain exactly %d lines corresponding to your model line '1+age+%s'.\n\ | This is probably because your covariance matrix doesn't \n contain exactly %d lines corresponding to your model line '1+age+%s'.\n\ | 
| Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model); | Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model); | 
| exit(1); | exit(1); | 
| }else{ | }else{ | 
| if(mle==1) | if(mle==1) | 
| printf("%1d%1d%1d",i1,j1,jk); | printf("%1d%1d%d",i1,j1,jk); | 
| } | } | 
| fprintf(ficlog,"%1d%1d%1d",i1,j1,jk); | fprintf(ficlog,"%1d%1d%d",i1,j1,jk); | 
| fprintf(ficparo,"%1d%1d%1d",i1,j1,jk); | fprintf(ficparo,"%1d%1d%d",i1,j1,jk); | 
| for(j=1; j <=i; j++){ | for(j=1; j <=i; j++){ | 
| fscanf(ficpar," %le",&matcov[i][j]); | fscanf(ficpar," %le",&matcov[i][j]); | 
| if(mle==1){ | if(mle==1){ | 
| printf(" %.5le",matcov[i][j]); | printf(" %.5le",matcov[i][j]); | 
| } | } | 
| fprintf(ficlog," %.5le",matcov[i][j]); | fprintf(ficlog," %.5le",matcov[i][j]); | 
| fprintf(ficparo," %.5le",matcov[i][j]); | fprintf(ficparo," %.5le",matcov[i][j]); | 
| } | } | 
| fscanf(ficpar,"\n"); | fscanf(ficpar,"\n"); | 
| numlinepar++; | numlinepar++; | 
| Line 9069 Please run with mle=-1 to get a correct | Line 9785 Please run with mle=-1 to get a correct | 
| /* End of read covariance matrix npar lines */ | /* End of read covariance matrix npar lines */ | 
| for(i=1; i <=npar; i++) | for(i=1; i <=npar; i++) | 
| for(j=i+1;j<=npar;j++) | for(j=i+1;j<=npar;j++) | 
| matcov[i][j]=matcov[j][i]; | matcov[i][j]=matcov[j][i]; | 
| if(mle==1) | if(mle==1) | 
| printf("\n"); | printf("\n"); | 
| Line 9101 Please run with mle=-1 to get a correct | Line 9817 Please run with mle=-1 to get a correct | 
| agedc=vector(1,n); | agedc=vector(1,n); | 
| cod=ivector(1,n); | cod=ivector(1,n); | 
| for(i=1;i<=n;i++){ | for(i=1;i<=n;i++){ | 
| num[i]=0; | num[i]=0; | 
| moisnais[i]=0; | moisnais[i]=0; | 
| annais[i]=0; | annais[i]=0; | 
| moisdc[i]=0; | moisdc[i]=0; | 
| andc[i]=0; | andc[i]=0; | 
| agedc[i]=0; | agedc[i]=0; | 
| cod[i]=0; | cod[i]=0; | 
| weight[i]=1.0; /* Equal weights, 1 by default */ | weight[i]=1.0; /* Equal weights, 1 by default */ | 
| } | } | 
| mint=matrix(1,maxwav,1,n); | mint=matrix(1,maxwav,1,n); | 
| anint=matrix(1,maxwav,1,n); | anint=matrix(1,maxwav,1,n); | 
| s=imatrix(1,maxwav+1,1,n); /* s[i][j] health state for wave i and individual j */ | s=imatrix(1,maxwav+1,1,n); /* s[i][j] health state for wave i and individual j */ | 
| Line 9122 Please run with mle=-1 to get a correct | Line 9838 Please run with mle=-1 to get a correct | 
| goto end; | goto end; | 
| /* Calculation of the number of parameters from char model */ | /* Calculation of the number of parameters from char model */ | 
| /* 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 | 
| k=4 (age*V3) Tvar[k=4]= 3 (from V3) Tag[cptcovage=1]=4 | k=4 (age*V3) Tvar[k=4]= 3 (from V3) Tag[cptcovage=1]=4 | 
| k=3 V4 Tvar[k=3]= 4 (from V4) | k=3 V4 Tvar[k=3]= 4 (from V4) | 
| k=2 V1 Tvar[k=2]= 1 (from V1) | k=2 V1 Tvar[k=2]= 1 (from V1) | 
| k=1 Tvar[1]=2 (from V2) | k=1 Tvar[1]=2 (from V2) | 
| */ | */ | 
| Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */ | Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */ | 
| Typevar=ivector(1,NCOVMAX); /* -1 to 4 */ | TvarsDind=ivector(1,NCOVMAX); /* */ | 
| TvarsD=ivector(1,NCOVMAX); /* */ | |
| TvarsQind=ivector(1,NCOVMAX); /* */ | |
| TvarsQ=ivector(1,NCOVMAX); /* */ | |
| TvarF=ivector(1,NCOVMAX); /* */ | |
| TvarFind=ivector(1,NCOVMAX); /* */ | |
| TvarV=ivector(1,NCOVMAX); /* */ | |
| TvarVind=ivector(1,NCOVMAX); /* */ | |
| TvarA=ivector(1,NCOVMAX); /* */ | |
| TvarAind=ivector(1,NCOVMAX); /* */ | |
| TvarFD=ivector(1,NCOVMAX); /* */ | |
| TvarFDind=ivector(1,NCOVMAX); /* */ | |
| TvarFQ=ivector(1,NCOVMAX); /* */ | |
| TvarFQind=ivector(1,NCOVMAX); /* */ | |
| TvarVD=ivector(1,NCOVMAX); /* */ | |
| TvarVDind=ivector(1,NCOVMAX); /* */ | |
| TvarVQ=ivector(1,NCOVMAX); /* */ | |
| TvarVQind=ivector(1,NCOVMAX); /* */ | |
| Tvalsel=vector(1,NCOVMAX); /* */ | |
| Tvarsel=ivector(1,NCOVMAX); /* */ | |
| Typevar=ivector(-1,NCOVMAX); /* -1 to 2 */ | |
| Fixed=ivector(-1,NCOVMAX); /* -1 to 3 */ | |
| Dummy=ivector(-1,NCOVMAX); /* -1 to 3 */ | |
| /* V2+V1+V4+age*V3 is a model with 4 covariates (3 plus signs). | /* V2+V1+V4+age*V3 is a model with 4 covariates (3 plus signs). | 
| For each model-covariate stores the data-covariate id. Tvar[1]=2, Tvar[2]=1, Tvar[3]=4, | For each model-covariate stores the data-covariate id. Tvar[1]=2, Tvar[2]=1, Tvar[3]=4, | 
| Tvar[4=age*V3] is 3 and 'age' is recorded in Tage. | Tvar[4=age*V3] is 3 and 'age' is recorded in Tage. | 
| Line 9139 Please run with mle=-1 to get a correct | Line 9879 Please run with mle=-1 to get a correct | 
| 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,NCOVMAX); /* Gives the position of a product */ | Tprod=ivector(1,NCOVMAX); /* Gives the k position of the k1 product */ | 
| Tposprod=ivector(1,NCOVMAX); /* Gives the k1 product from the k position */ | |
| /* 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) | 
| Tposprod[k]=k1 , Tposprod[3]=1, Tposprod[5]=2 | |
| */ | */ | 
| Tvaraff=ivector(1,NCOVMAX); /* Unclear */ | Tvaraff=ivector(1,NCOVMAX); /* Unclear */ | 
| 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 | 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 | 
| Line 9151 Please run with mle=-1 to get a correct | Line 9893 Please run with mle=-1 to get a correct | 
| 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 | 
| */ | */ | 
| Tmodelind=ivector(1,NCOVMAX);/** gives the k model position of an | |
| * individual dummy, fixed or varying: | |
| * Tmodelind[Tvaraff[3]]=9,Tvaraff[1]@9={4, | |
| * 3, 1, 0, 0, 0, 0, 0, 0}, | |
| * model=V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 , | |
| * V1 df, V2 qf, V3 & V4 dv, V5 qv | |
| * Tmodelind[1]@9={9,0,3,2,}*/ | |
| TmodelInvind=ivector(1,NCOVMAX); /* TmodelInvind=Tvar[k]- ncovcol-nqv={5-2-1=2,*/ | |
| TmodelInvQind=ivector(1,NCOVMAX);/** gives the k model position of an | |
| * individual quantitative, fixed or varying: | |
| * Tmodelqind[1]=1,Tvaraff[1]@9={4, | |
| * 3, 1, 0, 0, 0, 0, 0, 0}, | |
| * model=V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1*/ | |
| /* Main decodemodel */ | /* Main decodemodel */ | 
| Line 9213 Please run with mle=-1 to get a correct | Line 9967 Please run with mle=-1 to get a correct | 
| cptcoveff=0; | cptcoveff=0; | 
| if (ncovmodel-nagesqr > 2 ){ /* That is if covariate other than cst, age and age*age */ | if (ncovmodel-nagesqr > 2 ){ /* That is if covariate other than cst, age and age*age */ | 
| tricode(&cptcoveff,Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */ | tricode(&cptcoveff,Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */ | 
| } | } | 
| ncovcombmax=pow(2,cptcoveff); | ncovcombmax=pow(2,cptcoveff); | 
| invalidvarcomb=ivector(1, ncovcombmax); | invalidvarcomb=ivector(1, ncovcombmax); | 
| for(i=1;i<ncovcombmax;i++) | for(i=1;i<ncovcombmax;i++) | 
| invalidvarcomb[i]=0; | invalidvarcomb[i]=0; | 
| /* Nbcode gives the value of the lth modality (currently 1 to 2) of jth covariate, in | /* Nbcode gives the value of the lth modality (currently 1 to 2) of jth covariate, in | 
| V2+V1*age, there are 3 covariates Tvar[2]=1 (V1).*/ | V2+V1*age, there are 3 covariates Tvar[2]=1 (V1).*/ | 
| /* 1 to ncodemax[j] which is the maximum value of this jth covariate */ | /* 1 to ncodemax[j] which is the maximum value of this jth covariate */ | 
| /* codtab=imatrix(1,100,1,10);*/ /* codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) */ | /* 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],codtabm(100,10));*/ | /*printf(" codtab[1,1],codtab[100,10]=%d,%d\n", codtab[1][1],codtabm(100,10));*/ | 
| /* codtab gives the value 1 or 2 of the hth combination of k covariates (1 or 2).*/ | /* codtab gives the value 1 or 2 of the hth combination of k covariates (1 or 2).*/ | 
| Line 9382 Title=%s <br>Datafile=%s Firstpass=%d La | Line 10136 Title=%s <br>Datafile=%s Firstpass=%d La | 
| /* Calculates basic frequencies. Computes observed prevalence at single age | /* Calculates basic frequencies. Computes observed prevalence at single age | 
| and for any valid combination of covariates | and for any valid combination of covariates | 
| and prints on file fileres'p'. */ | and prints on file fileres'p'. */ | 
| freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx, Tvaraff, invalidvarcomb, nbcode, ncodemax,mint,anint,strstart, \ | freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx, Tvaraff, invalidvarcomb, nbcode, ncodemax,mint,anint,strstart, \ | 
| firstpass, lastpass, stepm, weightopt, model); | firstpass, lastpass, stepm, weightopt, model); | 
| fprintf(fichtm,"\n"); | fprintf(fichtm,"\n"); | 
| fprintf(fichtm,"<br>Total number of observations=%d <br>\n\ | fprintf(fichtm,"<br>Total number of observations=%d <br>\n\ | 
| Line 9416 Interval (in months) between two waves: | Line 10170 Interval (in months) between two waves: | 
| for (i=1; i<=imx; i++){ | for (i=1; i<=imx; i++){ | 
| dcwave[i]=-1; | dcwave[i]=-1; | 
| for (m=firstpass; m<=lastpass; m++) | for (m=firstpass; m<=lastpass; m++) | 
| if (s[m][i]>nlstate) { | if (s[m][i]>nlstate) { | 
| dcwave[i]=m; | dcwave[i]=m; | 
| /* printf("i=%d j=%d s=%d dcwave=%d\n",i,j, s[j][i],dcwave[i]);*/ | /* printf("i=%d j=%d s=%d dcwave=%d\n",i,j, s[j][i],dcwave[i]);*/ | 
| break; | break; | 
| } | } | 
| } | } | 
| for (i=1; i<=imx; i++) { | for (i=1; i<=imx; i++) { | 
| if (wav[i]>0){ | if (wav[i]>0){ | 
| ageexmed[i]=agev[mw[1][i]][i]; | ageexmed[i]=agev[mw[1][i]][i]; | 
| j=wav[i]; | j=wav[i]; | 
| agecens[i]=1.; | agecens[i]=1.; | 
| if (ageexmed[i]> 1 && wav[i] > 0){ | if (ageexmed[i]> 1 && wav[i] > 0){ | 
| agecens[i]=agev[mw[j][i]][i]; | agecens[i]=agev[mw[j][i]][i]; | 
| cens[i]= 1; | cens[i]= 1; | 
| }else if (ageexmed[i]< 1) | }else if (ageexmed[i]< 1) | 
| cens[i]= -1; | cens[i]= -1; | 
| if (agedc[i]< AGESUP && agedc[i]>1 && dcwave[i]>firstpass && dcwave[i]<=lastpass) | if (agedc[i]< AGESUP && agedc[i]>1 && dcwave[i]>firstpass && dcwave[i]<=lastpass) | 
| cens[i]=0 ; | cens[i]=0 ; | 
| } | } | 
| else cens[i]=-1; | else cens[i]=-1; | 
| } | } | 
| for (i=1;i<=NDIM;i++) { | for (i=1;i<=NDIM;i++) { | 
| for (j=1;j<=NDIM;j++) | for (j=1;j<=NDIM;j++) | 
| ximort[i][j]=(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;*/ | 
| Line 9917 Please run with mle=-1 to get a correct | Line 10671 Please run with mle=-1 to get a correct | 
| fprintf(ficres,"backcast=%d starting-back-date=%.lf/%.lf/%.lf final-back-date=%.lf/%.lf/%.lf mobil_average=%d\n",backcast,jback1,mback1,anback1,jback2,mback2,anback2,mobilavproj); | fprintf(ficres,"backcast=%d starting-back-date=%.lf/%.lf/%.lf final-back-date=%.lf/%.lf/%.lf mobil_average=%d\n",backcast,jback1,mback1,anback1,jback2,mback2,anback2,mobilavproj); | 
| /* day and month of proj2 are not used but only year anproj2.*/ | /* day and month of proj2 are not used but only year anproj2.*/ | 
| /* Results */ | |
| nresult=0; | |
| while(fgets(line, MAXLINE, ficpar)) { | |
| /* If line starts with a # it is a comment */ | |
| if (line[0] == '#') { | |
| numlinepar++; | |
| fputs(line,stdout); | |
| fputs(line,ficparo); | |
| fputs(line,ficlog); | |
| continue; | |
| }else | |
| break; | |
| } | |
| while((num_filled=sscanf(line,"result:%[^\n]\n",resultline)) !=EOF){ | |
| if (num_filled == 0) | |
| resultline[0]='\0'; | |
| else if (num_filled != 1){ | |
| printf("ERROR %d: result line should be at minimum 'result=' %s\n",num_filled, line); | |
| } | |
| nresult++; /* Sum of resultlines */ | |
| printf("Result %d: result=%s\n",nresult, resultline); | |
| if(nresult > MAXRESULTLINES){ | |
| printf("ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult); | |
| fprintf(ficlog,"ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult); | |
| goto end; | |
| } | |
| decoderesult(resultline, nresult); /* Fills TKresult[nresult] combination and Tresult[nresult][k4+1] combination values */ | |
| while(fgets(line, MAXLINE, ficpar)) { | |
| /* If line starts with a # it is a comment */ | |
| if (line[0] == '#') { | |
| numlinepar++; | |
| fputs(line,stdout); | |
| fputs(line,ficparo); | |
| fputs(line,ficlog); | |
| continue; | |
| }else | |
| break; | |
| } | |
| if (feof(ficpar)) | |
| break; | |
| else{ /* Processess output results for this combination of covariate values */ | |
| } | |
| } | |
| /* 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 / */ | 
| if(ageminpar == AGEOVERFLOW ||agemaxpar == -AGEOVERFLOW){ | if(ageminpar == AGEOVERFLOW ||agemaxpar == -AGEOVERFLOW){ | 
| printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\ | printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\ | 
| This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\ | This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\ | 
| Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar); | Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar); | 
| fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\ | fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\ | 
| This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\ | This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\ | 
| Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar); | Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar); | 
| }else{ | }else{ | 
| Line 9964 Please run with mle=-1 to get a correct | Line 10763 Please run with mle=-1 to get a correct | 
| /*#include "hpijx.h"*/ | /*#include "hpijx.h"*/ | 
| hPijx(p, bage, fage); | hPijx(p, bage, fage); | 
| fclose(ficrespij); | fclose(ficrespij); | 
| /* ncovcombmax= pow(2,cptcoveff); */ | /* ncovcombmax= pow(2,cptcoveff); */ | 
| /*-------------- Variance of one-step probabilities---*/ | /*-------------- Variance of one-step probabilities---*/ | 
| k=1; | 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); | 
| /* Prevalence for each covariates in probs[age][status][cov] */ | /* Prevalence for each covariates in probs[age][status][cov] */ | 
| probs= ma3x(1,AGESUP,1,nlstate+ndeath, 1,ncovcombmax); | probs= ma3x(1,AGESUP,1,nlstate+ndeath, 1,ncovcombmax); | 
| for(i=1;i<=AGESUP;i++) | for(i=1;i<=AGESUP;i++) | 
| Line 9979 Please run with mle=-1 to get a correct | Line 10778 Please run with mle=-1 to get a correct | 
| prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); | prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); | 
| if (mobilav!=0 ||mobilavproj !=0 ) { | if (mobilav!=0 ||mobilavproj !=0 ) { | 
| mobaverages= ma3x(1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax); | mobaverages= ma3x(1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax); | 
| for(i=1;i<=AGESUP;i++) | for(i=1;i<=AGESUP;i++) | 
| for(j=1;j<=nlstate;j++) | for(j=1;j<=nlstate;j++) | 
| for(k=1;k<=ncovcombmax;k++) | for(k=1;k<=ncovcombmax;k++) | 
| mobaverages[i][j][k]=0.; | mobaverages[i][j][k]=0.; | 
| mobaverage=mobaverages; | mobaverage=mobaverages; | 
| if (mobilav!=0) { | if (mobilav!=0) { | 
| if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilav)!=0){ | printf("Movingaveraging observed prevalence\n"); | 
| fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav); | if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilav)!=0){ | 
| printf(" Error in movingaverage mobilav=%d\n",mobilav); | fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav); | 
| } | printf(" Error in movingaverage mobilav=%d\n",mobilav); | 
| } | |
| } | } | 
| /* /\* Prevalence for each covariates in probs[age][status][cov] *\/ */ | /* /\* Prevalence for each covariates in probs[age][status][cov] *\/ */ | 
| /* prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); */ | /* prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); */ | 
| else if (mobilavproj !=0) { | else if (mobilavproj !=0) { | 
| if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilavproj)!=0){ | printf("Movingaveraging projected observed prevalence\n"); | 
| fprintf(ficlog," Error in movingaverage mobilavproj=%d\n",mobilavproj); | if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilavproj)!=0){ | 
| printf(" Error in movingaverage mobilavproj=%d\n",mobilavproj); | fprintf(ficlog," Error in movingaverage mobilavproj=%d\n",mobilavproj); | 
| } | printf(" Error in movingaverage mobilavproj=%d\n",mobilavproj); | 
| } | |
| } | } | 
| }/* end if moving average */ | }/* end if moving average */ | 
| /*---------- Forecasting ------------------*/ | /*---------- Forecasting ------------------*/ | 
| /*if((stepm == 1) && (strcmp(model,".")==0)){*/ | /*if((stepm == 1) && (strcmp(model,".")==0)){*/ | 
| if(prevfcast==1){ | if(prevfcast==1){ | 
| Line 10048 Please run with mle=-1 to get a correct | Line 10849 Please run with mle=-1 to get a correct | 
| printf("Computing Health Expectancies: result on file '%s' ...", filerese);fflush(stdout); | printf("Computing Health Expectancies: result on file '%s' ...", filerese);fflush(stdout); | 
| fprintf(ficlog,"Computing Health Expectancies: result on file '%s' ...", filerese);fflush(ficlog); | fprintf(ficlog,"Computing Health Expectancies: result on file '%s' ...", filerese);fflush(ficlog); | 
| for (k=1; k <= (int) pow(2,cptcoveff); k++){ | i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */ | 
| if (cptcovn < 1){i1=1;} | |
| for(nres=1; nres <= nresult; nres++) /* For each resultline */ | |
| for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */ | |
| if(TKresult[nres]!= k) | |
| continue; | |
| fprintf(ficreseij,"\n#****** "); | fprintf(ficreseij,"\n#****** "); | 
| printf("\n#****** "); | |
| for(j=1;j<=cptcoveff;j++) { | for(j=1;j<=cptcoveff;j++) { | 
| fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| } | |
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficreseij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | } | 
| fprintf(ficreseij,"******\n"); | fprintf(ficreseij,"******\n"); | 
| printf("******\n"); | |
| eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | 
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; | 
| evsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart); | evsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart, nres); | 
| free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | 
| } | } | 
| Line 10065 Please run with mle=-1 to get a correct | Line 10879 Please run with mle=-1 to get a correct | 
| printf("done evsij\n");fflush(stdout); | printf("done evsij\n");fflush(stdout); | 
| fprintf(ficlog,"done evsij\n");fflush(ficlog); | fprintf(ficlog,"done evsij\n");fflush(ficlog); | 
| /*---------- Health expectancies and variances ------------*/ | /*---------- State-specific expectancies and variances ------------*/ | 
| strcpy(filerest,"T_"); | strcpy(filerest,"T_"); | 
| Line 10081 Please run with mle=-1 to get a correct | Line 10895 Please run with mle=-1 to get a correct | 
| strcpy(fileresstde,"STDE_"); | strcpy(fileresstde,"STDE_"); | 
| strcat(fileresstde,fileresu); | strcat(fileresstde,fileresu); | 
| if((ficresstdeij=fopen(fileresstde,"w"))==NULL) { | if((ficresstdeij=fopen(fileresstde,"w"))==NULL) { | 
| printf("Problem with Health Exp. and std errors resultfile: %s\n", fileresstde); exit(0); | printf("Problem with State specific Exp. and std errors resultfile: %s\n", fileresstde); exit(0); | 
| fprintf(ficlog,"Problem with Health Exp. and std errors resultfile: %s\n", fileresstde); exit(0); | fprintf(ficlog,"Problem with State specific Exp. and std errors resultfile: %s\n", fileresstde); exit(0); | 
| } | } | 
| printf(" Computing Health Expectancies and standard errors: result on file '%s' \n", fileresstde); | printf(" Computing State-specific Expectancies and standard errors: result on file '%s' \n", fileresstde); | 
| fprintf(ficlog," Computing Health Expectancies and standard errors: result on file '%s' \n", fileresstde); | fprintf(ficlog," Computing State-specific Expectancies and standard errors: result on file '%s' \n", fileresstde); | 
| strcpy(filerescve,"CVE_"); | strcpy(filerescve,"CVE_"); | 
| strcat(filerescve,fileresu); | strcat(filerescve,fileresu); | 
| if((ficrescveij=fopen(filerescve,"w"))==NULL) { | if((ficrescveij=fopen(filerescve,"w"))==NULL) { | 
| printf("Problem with Covar. Health Exp. resultfile: %s\n", filerescve); exit(0); | printf("Problem with Covar. State-specific Exp. resultfile: %s\n", filerescve); exit(0); | 
| fprintf(ficlog,"Problem with Covar. Health Exp. resultfile: %s\n", filerescve); exit(0); | fprintf(ficlog,"Problem with Covar. State-specific Exp. resultfile: %s\n", filerescve); exit(0); | 
| } | } | 
| printf(" Computing Covar. of Health Expectancies: result on file '%s' \n", filerescve); | printf(" Computing Covar. of State-specific Expectancies: result on file '%s' \n", filerescve); | 
| fprintf(ficlog," Computing Covar. of Health Expectancies: result on file '%s' \n", filerescve); | fprintf(ficlog," Computing Covar. of State-specific Expectancies: result on file '%s' \n", filerescve); | 
| strcpy(fileresv,"V_"); | strcpy(fileresv,"V_"); | 
| strcat(fileresv,fileresu); | strcat(fileresv,fileresu); | 
| Line 10102 Please run with mle=-1 to get a correct | Line 10916 Please run with mle=-1 to get a correct | 
| printf("Problem with variance resultfile: %s\n", fileresv);exit(0); | printf("Problem with variance resultfile: %s\n", fileresv);exit(0); | 
| fprintf(ficlog,"Problem with variance resultfile: %s\n", fileresv);exit(0); | fprintf(ficlog,"Problem with variance resultfile: %s\n", fileresv);exit(0); | 
| } | } | 
| printf(" Computing Variance-covariance of DFLEs: file '%s' ... ", fileresv);fflush(stdout); | printf(" Computing Variance-covariance of State-specific Expectancies: file '%s' ... ", fileresv);fflush(stdout); | 
| fprintf(ficlog," Computing Variance-covariance of DFLEs: file '%s' ... ", fileresv);fflush(ficlog); | fprintf(ficlog," Computing Variance-covariance of State-specific Expectancies: file '%s' ... ", fileresv);fflush(ficlog); | 
| /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | 
| for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ | for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ | 
| for (k=1; k <= (int) pow(2,cptcoveff); k++){ | i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */ | 
| fprintf(ficrest,"\n#****** "); | if (cptcovn < 1){i1=1;} | 
| for(j=1;j<=cptcoveff;j++) | |
| fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | for(nres=1; nres <= nresult; nres++) /* For each resultline */ | 
| for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */ | |
| if(TKresult[nres]!= k) | |
| continue; | |
| printf("\n#****** Selected:"); | |
| fprintf(ficrest,"\n#****** Selected:"); | |
| fprintf(ficlog,"\n#****** Selected:"); | |
| for(j=1;j<=cptcoveff;j++){ | |
| printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| } | |
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficrest," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| fprintf(ficrest,"******\n"); | fprintf(ficrest,"******\n"); | 
| fprintf(ficlog,"******\n"); | |
| printf("******\n"); | |
| fprintf(ficresstdeij,"\n#****** "); | fprintf(ficresstdeij,"\n#****** "); | 
| fprintf(ficrescveij,"\n#****** "); | fprintf(ficrescveij,"\n#****** "); | 
| for(j=1;j<=cptcoveff;j++) { | for(j=1;j<=cptcoveff;j++) { | 
| fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| } | } | 
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| fprintf(ficresstdeij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficrescveij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| fprintf(ficresstdeij,"******\n"); | fprintf(ficresstdeij,"******\n"); | 
| fprintf(ficrescveij,"******\n"); | fprintf(ficrescveij,"******\n"); | 
| fprintf(ficresvij,"\n#****** "); | fprintf(ficresvij,"\n#****** "); | 
| for(j=1;j<=cptcoveff;j++) | for(j=1;j<=cptcoveff;j++) | 
| fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | 
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| fprintf(ficresvij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| fprintf(ficresvij,"******\n"); | fprintf(ficresvij,"******\n"); | 
| eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | 
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; | 
| printf(" cvevsij %d, ",k); | printf(" cvevsij "); | 
| fprintf(ficlog, " cvevsij %d, ",k); | fprintf(ficlog, " cvevsij "); | 
| cvevsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart); | cvevsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart, nres); | 
| printf(" end cvevsij \n "); | printf(" end cvevsij \n "); | 
| fprintf(ficlog, " end cvevsij \n "); | fprintf(ficlog, " end cvevsij \n "); | 
| Line 10145 Please run with mle=-1 to get a correct | Line 10984 Please run with mle=-1 to get a correct | 
| 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; /* ZZ Segmentation fault */ | oldm=oldms;savm=savms; /* ZZ Segmentation fault */ | 
| cptcod= 0; /* To be deleted */ | cptcod= 0; /* To be deleted */ | 
| printf("varevsij %d \n",vpopbased); | printf("varevsij vpopbased=%d \n",vpopbased); | 
| fprintf(ficlog, "varevsij %d \n",vpopbased); | fprintf(ficlog, "varevsij vpopbased=%d \n",vpopbased); | 
| varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); /* cptcod not initialized Intel */ | varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart, nres); /* cptcod not initialized Intel */ | 
| fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n# (weighted average of eij where weights are "); | fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n# (weighted average of eij where weights are "); | 
| if(vpopbased==1) | if(vpopbased==1) | 
| fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav); | fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav); | 
| else | else | 
| fprintf(ficrest,"the age specific period (stable) prevalences in each health state \n"); | fprintf(ficrest,"the age specific period (stable) prevalences in each health state \n"); | 
| fprintf(ficrest,"# Age popbased mobilav e.. (std) "); | fprintf(ficrest,"# Age popbased mobilav e.. (std) "); | 
| for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i); | for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i); | 
| fprintf(ficrest,"\n"); | fprintf(ficrest,"\n"); | 
| /* printf("Which p?\n"); for(i=1;i<=npar;i++)printf("p[i=%d]=%lf,",i,p[i]);printf("\n"); */ | /* printf("Which p?\n"); for(i=1;i<=npar;i++)printf("p[i=%d]=%lf,",i,p[i]);printf("\n"); */ | 
| epj=vector(1,nlstate+1); | epj=vector(1,nlstate+1); | 
| printf("Computing age specific period (stable) prevalences in each health state \n"); | printf("Computing age specific period (stable) prevalences in each health state \n"); | 
| fprintf(ficlog,"Computing age specific period (stable) prevalences in each health state \n"); | fprintf(ficlog,"Computing age specific period (stable) prevalences in each health state \n"); | 
| for(age=bage; age <=fage ;age++){ | for(age=bage; age <=fage ;age++){ | 
| prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, &ncvyear, k); /*ZZ Is it the correct prevalim */ | prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, &ncvyear, k, nres); /*ZZ Is it the correct prevalim */ | 
| if (vpopbased==1) { | if (vpopbased==1) { | 
| if(mobilav ==0){ | if(mobilav ==0){ | 
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) | 
| prlim[i][i]=probs[(int)age][i][k]; | prlim[i][i]=probs[(int)age][i][k]; | 
| }else{ /* mobilav */ | }else{ /* mobilav */ | 
| for(i=1; i<=nlstate;i++) | for(i=1; i<=nlstate;i++) | 
| prlim[i][i]=mobaverage[(int)age][i][k]; | prlim[i][i]=mobaverage[(int)age][i][k]; | 
| } | } | 
| } | } | 
| fprintf(ficrest," %4.0f %d %d",age, vpopbased, mobilav); | fprintf(ficrest," %4.0f %d %d",age, vpopbased, mobilav); | 
| /* fprintf(ficrest," %4.0f %d %d %d %d",age, vpopbased, mobilav,Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); */ /* to be done */ | /* fprintf(ficrest," %4.0f %d %d %d %d",age, vpopbased, mobilav,Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); */ /* to be done */ | 
| /* printf(" age %4.0f ",age); */ | /* printf(" age %4.0f ",age); */ | 
| for(j=1, epj[nlstate+1]=0.;j <=nlstate;j++){ | for(j=1, epj[nlstate+1]=0.;j <=nlstate;j++){ | 
| for(i=1, epj[j]=0.;i <=nlstate;i++) { | for(i=1, epj[j]=0.;i <=nlstate;i++) { | 
| epj[j] += prlim[i][i]*eij[i][j][(int)age]; | epj[j] += prlim[i][i]*eij[i][j][(int)age]; | 
| /*ZZZ printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/ | /*ZZZ printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/ | 
| /* printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]); */ | /* printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]); */ | 
| } | } | 
| epj[nlstate+1] +=epj[j]; | epj[nlstate+1] +=epj[j]; | 
| } | } | 
| /* printf(" age %4.0f \n",age); */ | /* printf(" age %4.0f \n",age); */ | 
| for(i=1, vepp=0.;i <=nlstate;i++) | for(i=1, vepp=0.;i <=nlstate;i++) | 
| for(j=1;j <=nlstate;j++) | for(j=1;j <=nlstate;j++) | 
| vepp += vareij[i][j][(int)age]; | vepp += vareij[i][j][(int)age]; | 
| fprintf(ficrest," %7.3f (%7.3f)", epj[nlstate+1],sqrt(vepp)); | fprintf(ficrest," %7.3f (%7.3f)", epj[nlstate+1],sqrt(vepp)); | 
| for(j=1;j <=nlstate;j++){ | for(j=1;j <=nlstate;j++){ | 
| fprintf(ficrest," %7.3f (%7.3f)", epj[j],sqrt(vareij[j][j][(int)age])); | fprintf(ficrest," %7.3f (%7.3f)", epj[j],sqrt(vareij[j][j][(int)age])); | 
| } | } | 
| fprintf(ficrest,"\n"); | fprintf(ficrest,"\n"); | 
| } | } | 
| } /* End vpopbased */ | } /* End vpopbased */ | 
| free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | 
| free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage); | 
| free_vector(epj,1,nlstate+1); | free_vector(epj,1,nlstate+1); | 
| printf("done \n");fflush(stdout); | printf("done selection\n");fflush(stdout); | 
| fprintf(ficlog,"done\n");fflush(ficlog); | fprintf(ficlog,"done selection\n");fflush(ficlog); | 
| /*}*/ | /*}*/ | 
| } /* End k */ | } /* End k selection */ | 
| free_vector(weight,1,n); | |
| free_imatrix(Tvard,1,NCOVMAX,1,2); | |
| free_imatrix(s,1,maxwav+1,1,n); | |
| free_matrix(anint,1,maxwav,1,n); | |
| free_matrix(mint,1,maxwav,1,n); | |
| free_ivector(cod,1,n); | |
| free_ivector(tab,1,NCOVMAX); | |
| fclose(ficresstdeij); | |
| fclose(ficrescveij); | |
| fclose(ficresvij); | |
| fclose(ficrest); | |
| printf("done Health expectancies\n");fflush(stdout); | |
| fprintf(ficlog,"done Health expectancies\n");fflush(ficlog); | |
| fclose(ficpar); | |
| /*------- Variance of period (stable) prevalence------*/ | |
| printf("done State-specific expectancies\n");fflush(stdout); | |
| fprintf(ficlog,"done State-specific expectancies\n");fflush(ficlog); | |
| /*------- Variance of period (stable) prevalence------*/ | |
| strcpy(fileresvpl,"VPL_"); | strcpy(fileresvpl,"VPL_"); | 
| strcat(fileresvpl,fileresu); | strcat(fileresvpl,fileresu); | 
| if((ficresvpl=fopen(fileresvpl,"w"))==NULL) { | if((ficresvpl=fopen(fileresvpl,"w"))==NULL) { | 
| Line 10230 Please run with mle=-1 to get a correct | Line 11058 Please run with mle=-1 to get a correct | 
| } | } | 
| printf("Computing Variance-covariance of period (stable) prevalence: file '%s' ...", fileresvpl);fflush(stdout); | printf("Computing Variance-covariance of period (stable) prevalence: file '%s' ...", fileresvpl);fflush(stdout); | 
| fprintf(ficlog, "Computing Variance-covariance of period (stable) prevalence: file '%s' ...", fileresvpl);fflush(ficlog); | fprintf(ficlog, "Computing Variance-covariance of period (stable) prevalence: file '%s' ...", fileresvpl);fflush(ficlog); | 
| /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | 
| for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ | for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ | 
| for (k=1; k <= (int) pow(2,cptcoveff); k++){ | i1=pow(2,cptcoveff); | 
| fprintf(ficresvpl,"\n#****** "); | if (cptcovn < 1){i1=1;} | 
| for(j=1;j<=cptcoveff;j++) | |
| fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | for(nres=1; nres <= nresult; nres++) /* For each resultline */ | 
| fprintf(ficresvpl,"******\n"); | for(k=1; k<=i1;k++){ | 
| if(TKresult[nres]!= k) | |
| varpl=matrix(1,nlstate,(int) bage, (int) fage); | continue; | 
| oldm=oldms;savm=savms; | fprintf(ficresvpl,"\n#****** "); | 
| varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, strstart); | printf("\n#****** "); | 
| free_matrix(varpl,1,nlstate,(int) bage, (int)fage); | fprintf(ficlog,"\n#****** "); | 
| for(j=1;j<=cptcoveff;j++) { | |
| fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); | |
| } | |
| for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ | |
| printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficresvpl," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]); | |
| } | |
| fprintf(ficresvpl,"******\n"); | |
| printf("******\n"); | |
| fprintf(ficlog,"******\n"); | |
| varpl=matrix(1,nlstate,(int) bage, (int) fage); | |
| oldm=oldms;savm=savms; | |
| varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, strstart, nres); | |
| free_matrix(varpl,1,nlstate,(int) bage, (int)fage); | |
| /*}*/ | /*}*/ | 
| } | } | 
| fclose(ficresvpl); | fclose(ficresvpl); | 
| printf("done variance-covariance of period prevalence\n");fflush(stdout); | printf("done variance-covariance of period prevalence\n");fflush(stdout); | 
| fprintf(ficlog,"done variance-covariance of period prevalence\n");fflush(ficlog); | fprintf(ficlog,"done variance-covariance of period prevalence\n");fflush(ficlog); | 
| free_vector(weight,1,n); | |
| free_imatrix(Tvard,1,NCOVMAX,1,2); | |
| free_imatrix(s,1,maxwav+1,1,n); | |
| free_matrix(anint,1,maxwav,1,n); | |
| free_matrix(mint,1,maxwav,1,n); | |
| free_ivector(cod,1,n); | |
| free_ivector(tab,1,NCOVMAX); | |
| fclose(ficresstdeij); | |
| fclose(ficrescveij); | |
| fclose(ficresvij); | |
| fclose(ficrest); | |
| fclose(ficpar); | |
| /*---------- End : free ----------------*/ | /*---------- End : free ----------------*/ | 
| if (mobilav!=0 ||mobilavproj !=0) | if (mobilav!=0 ||mobilavproj !=0) | 
| free_ma3x(mobaverages,1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax); /* We need to have a squared matrix with prevalence of the dead! */ | free_ma3x(mobaverages,1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax); /* We need to have a squared matrix with prevalence of the dead! */ | 
| Line 10258 Please run with mle=-1 to get a correct | Line 11118 Please run with mle=-1 to get a correct | 
| free_matrix(prlim,1,nlstate,1,nlstate); /*here or after loop ? */ | free_matrix(prlim,1,nlstate,1,nlstate); /*here or after loop ? */ | 
| free_matrix(pmmij,1,nlstate+ndeath,1,nlstate+ndeath); | free_matrix(pmmij,1,nlstate+ndeath,1,nlstate+ndeath); | 
| } /* mle==-3 arrives here for freeing */ | } /* mle==-3 arrives here for freeing */ | 
| /* endfree:*/ | /* endfree:*/ | 
| free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath); | free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath); | 
| free_matrix(newms, 1,nlstate+ndeath,1,nlstate+ndeath); | free_matrix(newms, 1,nlstate+ndeath,1,nlstate+ndeath); | 
| free_matrix(savms, 1,nlstate+ndeath,1,nlstate+ndeath); | free_matrix(savms, 1,nlstate+ndeath,1,nlstate+ndeath); | 
| free_ma3x(cotqvar,1,maxwav,1,nqtv,1,n); | free_ma3x(cotqvar,1,maxwav,1,nqtv,1,n); | 
| free_ma3x(cotvar,1,maxwav,1,ntv,1,n); | free_ma3x(cotvar,1,maxwav,1,ntv+nqtv,1,n); | 
| free_matrix(coqvar,1,maxwav,1,n); | free_matrix(coqvar,1,maxwav,1,n); | 
| free_matrix(covar,0,NCOVMAX,1,n); | free_matrix(covar,0,NCOVMAX,1,n); | 
| free_matrix(matcov,1,npar,1,npar); | free_matrix(matcov,1,npar,1,npar); | 
| free_matrix(hess,1,npar,1,npar); | free_matrix(hess,1,npar,1,npar); | 
| /*free_vector(delti,1,npar);*/ | /*free_vector(delti,1,npar);*/ | 
| free_ma3x(delti3,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); | free_ma3x(delti3,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); | 
| 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,NCOVMAX); | free_ivector(ncodemax,1,NCOVMAX); | 
| free_ivector(ncodemaxwundef,1,NCOVMAX); | free_ivector(ncodemaxwundef,1,NCOVMAX); | 
| free_ivector(Typevar,-1,NCOVMAX); | free_ivector(Dummy,-1,NCOVMAX); | 
| free_ivector(Tvar,1,NCOVMAX); | free_ivector(Fixed,-1,NCOVMAX); | 
| free_ivector(Tprod,1,NCOVMAX); | free_ivector(Typevar,-1,NCOVMAX); | 
| free_ivector(Tvaraff,1,NCOVMAX); | free_ivector(Tvar,1,NCOVMAX); | 
| free_ivector(invalidvarcomb,1,ncovcombmax); | free_ivector(TvarsQ,1,NCOVMAX); | 
| free_ivector(Tage,1,NCOVMAX); | free_ivector(TvarsQind,1,NCOVMAX); | 
| free_ivector(TvarsD,1,NCOVMAX); | |
| free_imatrix(nbcode,0,NCOVMAX,0,NCOVMAX); | free_ivector(TvarsDind,1,NCOVMAX); | 
| /* free_imatrix(codtab,1,100,1,10); */ | free_ivector(TvarFD,1,NCOVMAX); | 
| free_ivector(TvarFDind,1,NCOVMAX); | |
| free_ivector(TvarF,1,NCOVMAX); | |
| free_ivector(TvarFind,1,NCOVMAX); | |
| free_ivector(TvarV,1,NCOVMAX); | |
| free_ivector(TvarVind,1,NCOVMAX); | |
| free_ivector(TvarA,1,NCOVMAX); | |
| free_ivector(TvarAind,1,NCOVMAX); | |
| free_ivector(TvarFQ,1,NCOVMAX); | |
| free_ivector(TvarFQind,1,NCOVMAX); | |
| free_ivector(TvarVD,1,NCOVMAX); | |
| free_ivector(TvarVDind,1,NCOVMAX); | |
| free_ivector(TvarVQ,1,NCOVMAX); | |
| free_ivector(TvarVQind,1,NCOVMAX); | |
| free_ivector(Tvarsel,1,NCOVMAX); | |
| free_vector(Tvalsel,1,NCOVMAX); | |
| free_ivector(Tposprod,1,NCOVMAX); | |
| free_ivector(Tprod,1,NCOVMAX); | |
| free_ivector(Tvaraff,1,NCOVMAX); | |
| free_ivector(invalidvarcomb,1,ncovcombmax); | |
| free_ivector(Tage,1,NCOVMAX); | |
| free_ivector(Tmodelind,1,NCOVMAX); | |
| free_ivector(TmodelInvind,1,NCOVMAX); | |
| free_ivector(TmodelInvQind,1,NCOVMAX); | |
| free_imatrix(nbcode,0,NCOVMAX,0,NCOVMAX); | |
| /* free_imatrix(codtab,1,100,1,10); */ | |
| fflush(fichtm); | fflush(fichtm); | 
| fflush(ficgp); | fflush(ficgp); | 
| if((nberr >0) || (nbwarn>0)){ | if((nberr >0) || (nbwarn>0)){ | 
| printf("End of Imach with %d errors and/or %d warnings. Please look at the log file for details.\n",nberr,nbwarn); | printf("End of Imach with %d errors and/or %d warnings. Please look at the log file for details.\n",nberr,nbwarn); | 
| fprintf(ficlog,"End of Imach with %d errors and/or warnings %d. Please look at the log file for details.\n",nberr,nbwarn); | fprintf(ficlog,"End of Imach with %d errors and/or warnings %d. Please look at the log file for details.\n",nberr,nbwarn); | 
| Line 10305 Please run with mle=-1 to get a correct | Line 11191 Please run with mle=-1 to get a correct | 
| printf("Local time at start %s\nLocal time at end %s",strstart, strtend); | printf("Local time at start %s\nLocal time at end %s",strstart, strtend); | 
| fprintf(ficlog,"Local time at start %s\nLocal time at end %s\n",strstart, strtend); | fprintf(ficlog,"Local time at start %s\nLocal time at end %s\n",strstart, strtend); | 
| printf("Total time used %s\n", asc_diff_time(rend_time -rstart_time,tmpout)); | printf("Total time used %s\n", asc_diff_time(rend_time -rstart_time,tmpout)); | 
| printf("Total time was %.0lf Sec.\n", difftime(rend_time,rstart_time)); | printf("Total time was %.0lf Sec.\n", difftime(rend_time,rstart_time)); | 
| fprintf(ficlog,"Total time used %s\n", asc_diff_time(rend_time -rstart_time,tmpout)); | fprintf(ficlog,"Total time used %s\n", asc_diff_time(rend_time -rstart_time,tmpout)); | 
| fprintf(ficlog,"Total time was %.0lf Sec.\n", difftime(rend_time,rstart_time)); | fprintf(ficlog,"Total time was %.0lf Sec.\n", difftime(rend_time,rstart_time)); | 
| Line 10318 Please run with mle=-1 to get a correct | Line 11204 Please run with mle=-1 to get a correct | 
| fclose(ficgp); | fclose(ficgp); | 
| fclose(ficlog); | fclose(ficlog); | 
| /*------ End -----------*/ | /*------ End -----------*/ | 
| printf("Before Current directory %s!\n",pathcd); | printf("Before Current directory %s!\n",pathcd); | 
| #ifdef WIN32 | #ifdef WIN32 | 
| if (_chdir(pathcd) != 0) | if (_chdir(pathcd) != 0) | 
| printf("Can't move to directory %s!\n",path); | printf("Can't move to directory %s!\n",path); | 
| if(_getcwd(pathcd,MAXLINE) > 0) | if(_getcwd(pathcd,MAXLINE) > 0) | 
| #else | #else | 
| if(chdir(pathcd) != 0) | if(chdir(pathcd) != 0) | 
| printf("Can't move to directory %s!\n", path); | printf("Can't move to directory %s!\n", path); | 
| if (getcwd(pathcd, MAXLINE) > 0) | if (getcwd(pathcd, MAXLINE) > 0) | 
| #endif | #endif | 
| printf("Current directory %s!\n",pathcd); | printf("Current directory %s!\n",pathcd); | 
| /*strcat(plotcmd,CHARSEPARATOR);*/ | /*strcat(plotcmd,CHARSEPARATOR);*/ | 
| Line 10354 Please run with mle=-1 to get a correct | Line 11240 Please run with mle=-1 to get a correct | 
| sprintf(plotcmd,"%s %s",pplotcmd, optionfilegnuplot); | sprintf(plotcmd,"%s %s",pplotcmd, optionfilegnuplot); | 
| printf("Starting graphs with: '%s'\n",plotcmd);fflush(stdout); | printf("Starting graphs with: '%s'\n",plotcmd);fflush(stdout); | 
| if((outcmd=system(plotcmd)) != 0){ | if((outcmd=system(plotcmd)) != 0){ | 
| printf("gnuplot command might not be in your path: '%s', err=%d\n", plotcmd, outcmd); | printf("gnuplot command might not be in your path: '%s', err=%d\n", plotcmd, outcmd); | 
| printf("\n Trying if gnuplot resides on the same directory that IMaCh\n"); | printf("\n Trying if gnuplot resides on the same directory that IMaCh\n"); | 
| Line 10382 Please run with mle=-1 to get a correct | Line 11268 Please run with mle=-1 to get a correct | 
| else if (z[0] == 'g') system(plotcmd); | else if (z[0] == 'g') system(plotcmd); | 
| else if (z[0] == 'q') exit(0); | else if (z[0] == 'q') exit(0); | 
| } | } | 
| end: | end: | 
| while (z[0] != 'q') { | while (z[0] != 'q') { | 
| printf("\nType q for exiting: "); fflush(stdout); | printf("\nType q for exiting: "); fflush(stdout); | 
| scanf("%s",z); | scanf("%s",z); |