--- imach/src/imach.c 2018/02/27 22:50:02 1.282
+++ imach/src/imach.c 2018/04/19 14:49:16 1.283
@@ -1,6 +1,9 @@
-/* $Id: imach.c,v 1.282 2018/02/27 22:50:02 brouard Exp $
+/* $Id: imach.c,v 1.283 2018/04/19 14:49:16 brouard Exp $
$State: Exp $
$Log: imach.c,v $
+ Revision 1.283 2018/04/19 14:49:16 brouard
+ Summary: Some minor bugs fixed
+
Revision 1.282 2018/02/27 22:50:02 brouard
*** empty log message ***
@@ -1051,12 +1054,12 @@ typedef struct {
#define ODIRSEPARATOR '\\'
#endif
-/* $Id: imach.c,v 1.282 2018/02/27 22:50:02 brouard Exp $ */
+/* $Id: imach.c,v 1.283 2018/04/19 14:49:16 brouard Exp $ */
/* $State: Exp $ */
#include "version.h"
char version[]=__IMACH_VERSION__;
-char copyright[]="February 2016,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2018";
-char fullversion[]="$Revision: 1.282 $ $Date: 2018/02/27 22:50:02 $";
+char copyright[]="April 2018,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2018";
+char fullversion[]="$Revision: 1.283 $ $Date: 2018/04/19 14:49:16 $";
char strstart[80];
char optionfilext[10], optionfilefiname[FILENAMELENGTH];
int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */
@@ -4368,7 +4371,7 @@ void freqsummary(char fileres[], double
double ***freq; /* Frequencies */
double *x, *y, a=0.,b=0.,r=1., sa=0., sb=0.; /* for regression, y=b+m*x and r is the correlation coefficient */
int no=0, linreg(int ifi, int ila, int *no, const double x[], const double y[], double* a, double* b, double* r, double* sa, double * sb);
- double *meanq;
+ double *meanq, *idq;
double **meanqt;
double *pp, **prop, *posprop, *pospropt;
double pos=0., posproptt=0., pospropta=0., k2, dateintsum=0,k2cpt=0;
@@ -4381,6 +4384,7 @@ void freqsummary(char fileres[], double
pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */
/* prop=matrix(1,nlstate,iagemin,iagemax+3); */
meanq=vector(1,nqfveff); /* Number of Quantitative Fixed Variables Effective */
+ idq=vector(1,nqfveff); /* Number of Quantitative Fixed Variables Effective */
meanqt=matrix(1,lastpass,1,nqtveff);
strcpy(fileresp,"P_");
strcat(fileresp,fileresu);
@@ -4489,13 +4493,15 @@ Title=%s
Datafile=%s Firstpass=%d La
posprop[i]=0;
pospropt[i]=0;
}
- /* for (z1=1; z1<= nqfveff; z1++) { */
- /* meanq[z1]+=0.; */
+ for (z1=1; z1<= nqfveff; z1++) { /* zeroing for each combination j1 as well as for the total */
+ idq[z1]+=0.;
+ meanq[z1]+=0.;
+ }
+ /* for (z1=1; z1<= nqtveff; z1++) { */
/* for(m=1;m<=lastpass;m++){ */
- /* meanqt[m][z1]=0.; */
- /* } */
- /* } */
-
+ /* meanqt[m][z1]=0.; */
+ /* } */
+ /* } */
/* dateintsum=0; */
/* k2cpt=0; */
@@ -4505,7 +4511,7 @@ Title=%s
Datafile=%s Firstpass=%d La
if(j !=0){
if(anyvaryingduminmodel==0){ /* If All fixed covariates */
if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
- /* for (z1=1; z1<= nqfveff; z1++) { */
+ /* for (z1=1; z1<= nqfveff; z1++) { */
/* meanq[z1]+=coqvar[Tvar[z1]][iind]; /\* Computes mean of quantitative with selected filter *\/ */
/* } */
for (z1=1; z1<=cptcoveff; z1++) { /* loops on covariates in the model */
@@ -4571,6 +4577,11 @@ Title=%s
Datafile=%s Firstpass=%d La
/* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */
freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */
}
+ for (z1=1; z1<= nqfveff; z1++) {
+ idq[z1]++;
+ meanq[z1]+=covar[ncovcol+z1][iind]; /* *weight[iind];*/ /* Computes mean of quantitative with selected filter */
+ /* meanq[z1]+=coqvar[Tvar[z1]][iind]; /\* Computes mean of quantitative with selected filter *\/ */
+ }
} /* end if between passes */
if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99) && (j==0)) {
dateintsum=dateintsum+k2; /* on all covariates ?*/
@@ -4618,6 +4629,19 @@ Title=%s
Datafile=%s Firstpass=%d La
fprintf(ficresphtmfr, "**********\n");
fprintf(ficlog, "**********\n");
}
+ /*
+ Printing means of quantitative variables if any
+ */
+ for (z1=1; z1<= nqfveff; z1++) {
+ fprintf(ficresphtmfr,"V quantitative id %d, number of idividuals= %f, sum=%f", z1, idq[z1], meanq[z1]);
+ fprintf(ficresphtmfr,", mean=%f
\n",meanq[z1]/idq[z1]);
+ }
+ /* for (z1=1; z1<= nqtveff; z1++) { */
+ /* for(m=1;m<=lastpass;m++){ */
+ /* fprintf(ficresphtmfr,"V quantitative id %d, pass id=%d, mean=%f
\n", z1, m, meanqt[m][z1]); */
+ /* } */
+ /* } */
+
fprintf(ficresphtm,"
");
if((cptcoveff==0 && nj==1)|| nj==2 ) /* no covariate and first pass */
fprintf(ficresp, " Age");
@@ -4898,6 +4922,7 @@ Title=%s
Datafile=%s Firstpass=%d La
fclose(ficresp);
fclose(ficresphtm);
fclose(ficresphtmfr);
+ free_vector(idq,1,nqfveff);
free_vector(meanq,1,nqfveff);
free_matrix(meanqt,1,lastpass,1,nqtveff);
free_vector(x, iagemin-AGEMARGE, iagemax+4+AGEMARGE);
@@ -6865,7 +6890,7 @@ divided by h: hPij
for(cpt=1; cpt<=nlstate;cpt++){
fprintf(fichtm,"
\n- Survival functions from state %d in each live state and total.\
Or probability to survive in various states (1 to %d) being in state %d at different ages. \
- %s_%d%d-%d.svg
", cpt, nlstate, cpt, subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres,subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres,subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres);
+ %s_%d-%d-%d.svg
", cpt, nlstate, cpt, subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres,subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres,subdirf2(optionfilefiname,"LIJT_"),cpt,k1,nres);
}
/* Period (stable) prevalence in each health state */
for(cpt=1; cpt<=nlstate;cpt++){
@@ -10948,19 +10973,24 @@ int main(int argc, char *argv[])
title, datafile, &lastobs, &firstpass,&lastpass)) !=EOF){
if (num_filled != 5) {
printf("Should be 5 parameters\n");
+ fprintf(ficlog,"Should be 5 parameters\n");
}
numlinepar++;
printf("title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\n", title, datafile, lastobs, firstpass,lastpass);
+ fprintf(ficparo,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\n", title, datafile, lastobs, firstpass,lastpass);
+ fprintf(ficres,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\n", title, datafile, lastobs, firstpass,lastpass);
+ fprintf(ficlog,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\n", title, datafile, lastobs, firstpass,lastpass);
}
/* Second parameter line */
while(fgets(line, MAXLINE, ficpar)) {
- /* If line starts with a # it is a comment */
+ /* while(fscanf(ficpar,"%[^\n]", line)) { */
+ /* If line starts with a # it is a comment. Strangely fgets reads the EOL and fputs doesn't */
if (line[0] == '#') {
numlinepar++;
- fputs(line,stdout);
- fputs(line,ficparo);
- fputs(line,ficres);
- fputs(line,ficlog);
+ printf("%s",line);
+ fprintf(ficres,"%s",line);
+ fprintf(ficparo,"%s",line);
+ fprintf(ficlog,"%s",line);
continue;
}else
break;
@@ -10970,8 +11000,13 @@ int main(int argc, char *argv[])
if (num_filled != 11) {
printf("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");
printf("but line=%s\n",line);
+ 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);
}
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(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(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.e-4; *//* 6.e-3 make convergences in less than 80 loops for the prevalence limit */
@@ -10980,10 +11015,10 @@ int main(int argc, char *argv[])
/* If line starts with a # it is a comment */
if (line[0] == '#') {
numlinepar++;
- fputs(line,stdout);
- fputs(line,ficparo);
- fputs(line,ficres);
- fputs(line,ficlog);
+ printf("%s",line);
+ fprintf(ficres,"%s",line);
+ fprintf(ficparo,"%s",line);
+ fprintf(ficlog,"%s",line);
continue;
}else
break;
@@ -11004,12 +11039,15 @@ int main(int argc, char *argv[])
}
/* printf(" model=1+age%s modeltemp= %s, model=%s\n",model, modeltemp, model);fflush(stdout); */
printf("model=1+age+%s\n",model);fflush(stdout);
+ fprintf(ficparo,"model=1+age+%s\n",model);fflush(stdout);
+ fprintf(ficres,"model=1+age+%s\n",model);fflush(stdout);
+ fprintf(ficlog,"model=1+age+%s\n",model);fflush(stdout);
}
/* fscanf(ficpar,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%lf stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d model=1+age+%s\n",title, datafile, &lastobs, &firstpass,&lastpass,&ftol, &stepm, &ncovcol, &nlstate,&ndeath, &maxwav, &mle, &weightopt,model); */
/* numlinepar=numlinepar+3; /\* In general *\/ */
/* printf("title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=1+age+%s\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncovcol, nlstate,ndeath, maxwav, mle, weightopt,model); */
- fprintf(ficparo,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncovcol, nqv, ntv, nqtv, nlstate,ndeath,maxwav, mle, weightopt,model);
- fprintf(ficlog,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncovcol, nqv, ntv, nqtv, nlstate,ndeath,maxwav, mle, weightopt,model);
+ /* fprintf(ficparo,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncovcol, nqv, ntv, nqtv, nlstate,ndeath,maxwav, mle, weightopt,model); */
+ /* fprintf(ficlog,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncovcol, nqv, ntv, nqtv, nlstate,ndeath,maxwav, mle, weightopt,model); */
fflush(ficlog);
/* if(model[0]=='#'|| model[0]== '\0'){ */
if(model[0]=='#'){
@@ -11872,7 +11910,7 @@ Please run with mle=-1 to get a correct
printf("\n");
/*--------- results files --------------*/
- fprintf(ficres,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle= 0 weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, weightopt,model);
+ /* fprintf(ficres,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle= 0 weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, weightopt,model); */
fprintf(ficres,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");
@@ -12740,5 +12778,6 @@ end:
printf("\nType q for exiting: "); fflush(stdout);
scanf("%s",z);
}
+ printf("End\n");
exit(0);
}