| 
 |   
| version 1.284, 2018/04/20 05:22:13 | version 1.287, 2018/05/01 17:57:25 | 
|---|---|
| Line 1 | Line 1 | 
| /* $Id$ | /* $Id$ | 
| $State$ | $State$ | 
| $Log$ | $Log$ | 
| Revision 1.287 2018/05/01 17:57:25 brouard | |
| Summary: Bug fixed by providing frequencies only for non missing covariates | |
| Revision 1.286 2018/04/27 14:27:04 brouard | |
| Summary: some minor bugs | |
| Revision 1.285 2018/04/21 21:02:16 brouard | |
| Summary: Some bugs fixed, valgrind tested | |
| Revision 1.284 2018/04/20 05:22:13 brouard | Revision 1.284 2018/04/20 05:22:13 brouard | 
| Summary: Computing mean and stdeviation of fixed quantitative variables | Summary: Computing mean and stdeviation of fixed quantitative variables | 
| Line 4640 Title=%s <br>Datafile=%s Firstpass=%d La | Line 4649 Title=%s <br>Datafile=%s Firstpass=%d La | 
| Printing means of quantitative variables if any | Printing means of quantitative variables if any | 
| */ | */ | 
| for (z1=1; z1<= nqfveff; z1++) { | for (z1=1; z1<= nqfveff; z1++) { | 
| fprintf(ficlog,"Mean of quantitative variable V%d on %.0f individuals sum=%f", ncovcol+z1, idq[z1], meanq[z1]); | fprintf(ficlog,"Mean of fixed quantitative variable V%d on %.0f individuals sum=%f", ncovcol+z1, idq[z1], meanq[z1]); | 
| fprintf(ficlog,", mean=%.3g\n",meanq[z1]/idq[z1]); | fprintf(ficlog,", mean=%.3g\n",meanq[z1]/idq[z1]); | 
| if(weightopt==1){ | if(weightopt==1){ | 
| printf(" Weighted mean and standard deviation of"); | printf(" Weighted mean and standard deviation of"); | 
| fprintf(ficlog," Weighted mean and standard deviation of"); | fprintf(ficlog," Weighted mean and standard deviation of"); | 
| fprintf(ficresphtmfr," Weighted mean and standard deviation of"); | fprintf(ficresphtmfr," Weighted mean and standard deviation of"); | 
| } | } | 
| printf(" quantitative variable V%d on %.0f representatives of the population : %6.3g (%6.3g)\n", ncovcol+z1, idq[z1],meanq[z1]/idq[z1], sqrt((stdq[z1]-meanq[z1]*meanq[z1]/idq[z1])/idq[z1])); | printf(" fixed quantitative variable V%d on %.0f representatives of the population : %6.3g (%6.3g)\n", ncovcol+z1, idq[z1],meanq[z1]/idq[z1], sqrt((stdq[z1]-meanq[z1]*meanq[z1]/idq[z1])/idq[z1])); | 
| fprintf(ficlog," quantitative variable V%d on %.0f representatives of the population : %6.3g (%6.3g)\n", ncovcol+z1, idq[z1],meanq[z1]/idq[z1], sqrt((stdq[z1]-meanq[z1]*meanq[z1]/idq[z1])/idq[z1])); | fprintf(ficlog," fixed quantitative variable V%d on %.0f representatives of the population : %6.3g (%6.3g)\n", ncovcol+z1, idq[z1],meanq[z1]/idq[z1], sqrt((stdq[z1]-meanq[z1]*meanq[z1]/idq[z1])/idq[z1])); | 
| fprintf(ficresphtmfr," quantitative variable V%d on %.0f representatives of the population : %6.3g (%6.3g)<p>\n", ncovcol+z1, idq[z1],meanq[z1]/idq[z1], sqrt((stdq[z1]-meanq[z1]*meanq[z1]/idq[z1])/idq[z1])); | fprintf(ficresphtmfr," fixed quantitative variable V%d on %.0f representatives of the population : %6.3g (%6.3g)<p>\n", ncovcol+z1, idq[z1],meanq[z1]/idq[z1], sqrt((stdq[z1]-meanq[z1]*meanq[z1]/idq[z1])/idq[z1])); | 
| } | } | 
| /* for (z1=1; z1<= nqtveff; z1++) { */ | /* for (z1=1; z1<= nqtveff; z1++) { */ | 
| /* for(m=1;m<=lastpass;m++){ */ | /* for(m=1;m<=lastpass;m++){ */ | 
| Line 5355 void concatwav(int wav[], int **dh, int | Line 5364 void concatwav(int wav[], int **dh, int | 
| /* *cptcov=0; */ | /* *cptcov=0; */ | 
| for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ | for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ | 
| for (k=1; k <= maxncov; k++) | |
| for(j=1; j<=2; j++) | |
| nbcode[k][j]=0; /* Valgrind */ | |
| /* 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 (k=1; k<=cptcovt; k++) { /* From model V1 + V2*age + V3 + V3*V4 keeps V1 + V3 = 2 only */ | for (k=1; k<=cptcovt; k++) { /* From model V1 + V2*age + V3 + V3*V4 keeps V1 + V3 = 2 only */ | 
| for (j=-1; (j < maxncov); j++) Ndum[j]=0; | for (j=-1; (j < maxncov); j++) Ndum[j]=0; | 
| if(Dummy[k]==0 && Typevar[k] !=1){ /* Dummy covariate and not age product */ | if(Dummy[k]==0 && Typevar[k] !=1){ /* Dummy covariate and not age product */ | 
| Line 5375 void concatwav(int wav[], int **dh, int | Line 5386 void concatwav(int wav[], int **dh, int | 
| modmaxcovj=ij; | modmaxcovj=ij; | 
| else if (ij < modmincovj) | else if (ij < modmincovj) | 
| modmincovj=ij; | modmincovj=ij; | 
| if ((ij < -1) && (ij > NCOVMAX)){ | if (ij <0 || ij >1 ){ | 
| printf("Information, IMaCh doesn't treat covariate with missing values (-1), individual %d will be skipped.\n",i); | |
| fprintf(ficlog,"Information, currently IMaCh doesn't treat covariate with missing values (-1), individual %d will be skipped.\n",i); | |
| } | |
| if ((ij < -1) || (ij > NCOVMAX)){ | |
| printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); | printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); | 
| exit(1); | exit(1); | 
| }else | }else | 
| Line 5421 void concatwav(int wav[], int **dh, int | Line 5436 void concatwav(int wav[], int **dh, int | 
| /* nbcode[Tvar[j]][3]=2; */ | /* nbcode[Tvar[j]][3]=2; */ | 
| /* To be continued (not working yet). */ | /* To be continued (not working yet). */ | 
| ij=0; /* ij is similar to i but can jump over null modalities */ | ij=0; /* ij is similar to i but can jump over null modalities */ | 
| for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/ | |
| /* for (i=modmincovj; i<=modmaxcovj; i++) { */ /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/ | |
| /* Skipping the case of missing values by reducing nbcode to 0 and 1 and not -1, 0, 1 */ | |
| /* model=V1+V2+V3, if V2=-1, 0 or 1, then nbcode[2][1]=0 and nbcode[2][2]=1 instead of | |
| * nbcode[2][1]=-1, nbcode[2][2]=0 and nbcode[2][3]=1 */ | |
| /*, could be restored in the future */ | |
| for (i=0; i<=1; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/ | |
| if (Ndum[i] == 0) { /* If nobody responded to this modality k */ | if (Ndum[i] == 0) { /* If nobody responded to this modality k */ | 
| break; | break; | 
| } | } | 
| ij++; | ij++; | 
| nbcode[Tvar[k]][ij]=i; /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality. nbcode[1][1]=0 nbcode[1][2]=1*/ | nbcode[Tvar[k]][ij]=i; /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality. nbcode[1][1]=0 nbcode[1][2]=1 . Could be -1*/ | 
| cptcode = ij; /* New max modality for covar j */ | cptcode = ij; /* New max modality for covar j */ | 
| } /* end of loop on modality i=-1 to 1 or more */ | } /* end of loop on modality i=-1 to 1 or more */ | 
| break; | break; | 
| Line 5442 void concatwav(int wav[], int **dh, int | Line 5463 void concatwav(int wav[], int **dh, int | 
| break; | break; | 
| } /* end switch */ | } /* end switch */ | 
| } /* end dummy test */ | } /* end dummy test */ | 
| } /* end of loop on model-covariate k. nbcode[Tvark][1]=-1, nbcode[Tvark][1]=0 and nbcode[Tvark][2]=1 sets the value of covariate k*/ | |
| /* for (k=0; k<= cptcode; k++) { /\* k=-1 ? k=0 to 1 *\//\* Could be 1 to 4 *\//\* cptcode=modmaxcovj *\/ */ | |
| /* /\*recode from 0 *\/ */ | |
| /* k is a modality. If we have model=V1+V1*sex */ | |
| /* then: nbcode[1][1]=0 ; nbcode[1][2]=1; nbcode[2][1]=0 ; nbcode[2][2]=1; */ | |
| /* But if some modality were not used, it is recoded from 0 to a newer modmaxcovj=cptcode *\/ */ | |
| /* } */ | |
| /* /\* cptcode = ij; *\/ /\* New max modality for covar j *\/ */ | |
| /* if (ij > ncodemax[j]) { */ | |
| /* printf( " Error ij=%d > ncodemax[%d]=%d\n", ij, j, ncodemax[j]); */ | |
| /* fprintf(ficlog, " Error ij=%d > ncodemax[%d]=%d\n", ij, j, ncodemax[j]); */ | |
| /* break; */ | |
| /* } */ | |
| /* } /\* end of loop on modality k *\/ */ | |
| } /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ | |
| for (k=-1; k< maxncov; k++) Ndum[k]=0; | for (k=-1; k< maxncov; k++) Ndum[k]=0; | 
| /* Look at fixed dummy (single or product) covariates to check empty modalities */ | /* Look at fixed dummy (single or product) covariates to check empty modalities */ | 
| Line 9730 Dummy[k] 0=dummy (0 1), 1 quantitative ( | Line 9737 Dummy[k] 0=dummy (0 1), 1 quantitative ( | 
| Typevar: 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product \n\ | Typevar: 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product \n\ | 
| Fixed[k] 0=fixed (product or simple), 1 varying, 2 fixed with age product, 3 varying with age product \n\ | Fixed[k] 0=fixed (product or simple), 1 varying, 2 fixed with age product, 3 varying with age product \n\ | 
| Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product\n",model); | Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product\n",model); | 
| for(k=1;k<=cptcovt; k++){ Fixed[k]=0; Dummy[k]=0;} | for(k=-1;k<=cptcovt; k++){ Fixed[k]=0; Dummy[k]=0;} | 
| for(k=1, ncovf=0, nsd=0, nsq=0, ncovv=0, ncova=0, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */ | for(k=1, ncovf=0, nsd=0, nsq=0, ncovv=0, ncova=0, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */ | 
| if (Tvar[k] <=ncovcol && Typevar[k]==0 ){ /* Simple fixed dummy (<=ncovcol) covariates */ | if (Tvar[k] <=ncovcol && Typevar[k]==0 ){ /* Simple fixed dummy (<=ncovcol) covariates */ | 
| Fixed[k]= 0; | Fixed[k]= 0; | 
| Line 9980 Dummy[k] 0=dummy (0 1), 1 quantitative ( | Line 9987 Dummy[k] 0=dummy (0 1), 1 quantitative ( | 
| /* Searching for doublons in the model */ | /* Searching for doublons in the model */ | 
| for(k1=1; k1<= cptcovt;k1++){ | for(k1=1; k1<= cptcovt;k1++){ | 
| for(k2=1; k2 <k1;k2++){ | 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]==Typevar[k2]) && (Fixed[Tvar[k1]]==Fixed[Tvar[k2]]) && (Dummy[Tvar[k1]]==Dummy[Tvar[k2]] )){ */ | 
| if((Typevar[k1]==Typevar[k2]) && (Fixed[k1]==Fixed[k2]) && (Dummy[k1]==Dummy[k2] )){ | |
| if((Typevar[k1] == 0 || Typevar[k1] == 1)){ /* Simple or age product */ | if((Typevar[k1] == 0 || Typevar[k1] == 1)){ /* Simple or age product */ | 
| if(Tvar[k1]==Tvar[k2]){ | 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]]); | printf("Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[k1],Dummy[k1]); | 
| fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog); | fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[k1],Dummy[k1]); fflush(ficlog); | 
| return(1); | return(1); | 
| } | } | 
| }else if (Typevar[k1] ==2){ | }else if (Typevar[k1] ==2){ | 
| Line 10295 void syscompilerinfo(int logged) | Line 10303 void syscompilerinfo(int logged) | 
| #endif | #endif | 
| #endif | #endif | 
| // void main() | // void main () | 
| // { | // { | 
| #if defined(_MSC_VER) | #if defined(_MSC_VER) | 
| if (IsWow64()){ | if (IsWow64()){ | 
| Line 11019 int main(int argc, char *argv[]) | Line 11027 int main(int argc, char *argv[]) | 
| fprintf(ficlog,"Not 11 parameters, for example:ftol=1.e-8 stepm=12 ncovcol=2 nqv=1 ntv=2 nqtv=1 nlstate=2 ndeath=1 maxwav=3 mle=1 weight=1\n"); | fprintf(ficlog,"Not 11 parameters, for example:ftol=1.e-8 stepm=12 ncovcol=2 nqv=1 ntv=2 nqtv=1 nlstate=2 ndeath=1 maxwav=3 mle=1 weight=1\n"); | 
| fprintf(ficlog,"but line=%s\n",line); | fprintf(ficlog,"but line=%s\n",line); | 
| } | } | 
| printf("ftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n",ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, mle, weightopt); | if( lastpass > maxwav){ | 
| printf("Error (lastpass = %d) > (maxwav = %d)\n",lastpass, maxwav); | |
| fprintf(ficlog,"Error (lastpass = %d) > (maxwav = %d)\n",lastpass, maxwav); | |
| fflush(ficlog); | |
| goto end; | |
| } | |
| printf("ftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n",ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, mle, weightopt); | |
| fprintf(ficparo,"ftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n",ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, mle, weightopt); | fprintf(ficparo,"ftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n",ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, mle, weightopt); | 
| fprintf(ficres,"ftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n",ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, mle, weightopt); | fprintf(ficres,"ftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n",ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, 0, weightopt); | 
| fprintf(ficlog,"ftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n",ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, mle, weightopt); | fprintf(ficlog,"ftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\n",ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, mle, weightopt); | 
| } | } | 
| /* ftolpl=6*ftol*1.e5; /\* 6.e-3 make convergences in less than 80 loops for the prevalence limit *\/ */ | /* ftolpl=6*ftol*1.e5; /\* 6.e-3 make convergences in less than 80 loops for the prevalence limit *\/ */ | 
| Line 11630 Title=%s <br>Datafile=%s Firstpass=%d La | Line 11644 Title=%s <br>Datafile=%s Firstpass=%d La | 
| firstpass, lastpass, stepm, weightopt, model); | firstpass, lastpass, stepm, weightopt, model); | 
| fprintf(fichtm,"\n"); | fprintf(fichtm,"\n"); | 
| fprintf(fichtm,"<h4>Parameter line 2</h4><ul><li>Tolerance for the convergence of the likelihood: ftol=%f \n<li>Interval for the elementary matrix (in month): stepm=%d",\ | fprintf(fichtm,"<h4>Parameter line 2</h4><ul><li>Tolerance for the convergence of the likelihood: ftol=%g \n<li>Interval for the elementary matrix (in month): stepm=%d",\ | 
| ftol, stepm); | ftol, stepm); | 
| fprintf(fichtm,"\n<li>Number of fixed dummy covariates: ncovcol=%d ", ncovcol); | fprintf(fichtm,"\n<li>Number of fixed dummy covariates: ncovcol=%d ", ncovcol); | 
| ncurrv=1; | ncurrv=1; |