--- imach/src/imach.c 2022/08/21 09:10:30 1.333
+++ imach/src/imach.c 2022/08/25 09:08:41 1.334
@@ -1,6 +1,9 @@
-/* $Id: imach.c,v 1.333 2022/08/21 09:10:30 brouard Exp $
+/* $Id: imach.c,v 1.334 2022/08/25 09:08:41 brouard Exp $
$State: Exp $
$Log: imach.c,v $
+ Revision 1.334 2022/08/25 09:08:41 brouard
+ Summary: In progress for quantitative
+
Revision 1.333 2022/08/21 09:10:30 brouard
* src/imach.c (Module): Version 0.99r33 A lot of changes in
reassigning covariates: my first idea was that people will always
@@ -1278,12 +1281,12 @@ typedef struct {
#define ODIRSEPARATOR '\\'
#endif
-/* $Id: imach.c,v 1.333 2022/08/21 09:10:30 brouard Exp $ */
+/* $Id: imach.c,v 1.334 2022/08/25 09:08:41 brouard Exp $ */
/* $State: Exp $ */
#include "version.h"
char version[]=__IMACH_VERSION__;
char copyright[]="August 2022,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2020, Nihon University 2021-202, INED 2000-2022";
-char fullversion[]="$Revision: 1.333 $ $Date: 2022/08/21 09:10:30 $";
+char fullversion[]="$Revision: 1.334 $ $Date: 2022/08/25 09:08:41 $";
char strstart[80];
char optionfilext[10], optionfilefiname[FILENAMELENGTH];
int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */
@@ -1296,7 +1299,7 @@ int cptcovs=0; /**< cptcovs number of si
int cptcovsnq=0; /**< cptcovsnq number of simple covariates in the model but non quantitative V2+V1 =2 */
int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */
int cptcovprodnoage=0; /**< Number of covariate products without age */
-int cptcoveff=0; /* Total number of covariates to vary for printing results (2**cptcoveff combinations of dummies)(computed in tricode as cptcov) */
+int cptcoveff=0; /* Total number of single dummy covariates to vary for printing results (2**cptcoveff combinations of dummies)(computed in tricode as cptcov) */
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 */
@@ -1307,6 +1310,7 @@ int nqfveff=0; /**< nqfveff Number of Qu
int ntveff=0; /**< ntveff number of effective time varying variables */
int nqtveff=0; /**< ntqveff number of effective time varying quantitative variables */
int cptcov=0; /* Working variable */
+int firstobs=1, lastobs=10; /* nobs = lastobs-firstobs+1 declared globally ;*/
int nobs=10; /* Number of observations in the data lastobs-firstobs */
int ncovcombmax=NCOVMAX; /* Maximum calculated number of covariate combination = pow(2, cptcoveff) */
int npar=NPARMAX; /* Number of parameters (nlstate+ndeath-1)*nlstate*ncovmodel; */
@@ -1524,12 +1528,13 @@ int *TvarsQind;
#define MAXRESULTLINESPONE 10+1
int nresult=0;
int parameterline=0; /* # of the parameter (type) line */
-int TKresult[MAXRESULTLINESPONE];
-int resultmodel[MAXRESULTLINESPONE][NCOVMAX];/* resultmodel[k1]=k3: k1th position in the model correspond to the k3 position in the resultline */
-int Tresult[MAXRESULTLINESPONE][NCOVMAX];/* For dummy variable , value (output) */
+int TKresult[MAXRESULTLINESPONE]; /* TKresult[nres]=k for each resultline nres give the corresponding combination of dummies */
+int resultmodel[MAXRESULTLINESPONE][NCOVMAX];/* resultmodel[k1]=k3: k1th position in the model corresponds to the k3 position in the resultline */
+int modelresult[MAXRESULTLINESPONE][NCOVMAX];/* modelresult[k3]=k1: k1th position in the model corresponds to the k3 position in the resultline */
+int Tresult[MAXRESULTLINESPONE][NCOVMAX];/* Tresult[nres][result_position]= value of the dummy variable at the result_position in the nres resultline */
int Tinvresult[MAXRESULTLINESPONE][NCOVMAX];/* Tinvresult[nres][Name of a dummy variable]= value of the variable in the result line */
double TinvDoQresult[MAXRESULTLINESPONE][NCOVMAX];/* TinvDoQresult[nres][Name of a Dummy or Q variable]= value of the variable in the result line */
-int Tvresult[MAXRESULTLINESPONE][NCOVMAX]; /* For dummy variable , variable # (output) */
+int Tvresult[MAXRESULTLINESPONE][NCOVMAX]; /* Tvresult[nres][result_position]= name of the dummy variable at the result_position in the nres resultline */
double Tqresult[MAXRESULTLINESPONE][NCOVMAX]; /* Tqresult[nres][result_position]= value of the variable at the result_position in the nres resultline */
double Tqinvresult[MAXRESULTLINESPONE][NCOVMAX]; /* For quantitative variable , value (output) */
int Tvqresult[MAXRESULTLINESPONE][NCOVMAX]; /* Tvqresult[nres][result_position]= id of the variable at the result_position in the nres resultline */
@@ -4975,7 +4980,7 @@ Title=%s
Datafile=%s Firstpass=%d La
j1=0;
/* j=ncoveff; /\* Only fixed dummy covariates *\/ */
- j=cptcoveff; /* Only dummy covariates of the model */
+ j=cptcoveff; /* Only dummy covariates used in the model */
/* j=cptcovn; /\* Only dummy covariates of the model *\/ */
if (cptcovn<1) {j=1;ncodemax[1]=1;}
@@ -5090,7 +5095,12 @@ Title=%s
Datafile=%s Firstpass=%d La
constant and age model which counts them. */
bool=0; /* not selected */
}else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */
- if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]) {
+ /* i1=Tvaraff[z1]; */
+ /* i2=TnsdVar[i1]; */
+ /* i3=nbcode[i1][i2]; */
+ /* i4=covar[i1][iind]; */
+ /* if(i4 != i3){ */
+ if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]) { /* Bug valgrind */
bool=0;
}
}
@@ -6018,7 +6028,7 @@ void concatwav(int wav[], int **dh, int
break;
} /* end switch */
} /* end dummy test */
- if(Dummy[k]==1 && Typevar[k] !=1){ /* Dummy covariate and not age product */
+ if(Dummy[k]==1 && Typevar[k] !=1){ /* Quantitative covariate and not age product */
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*/
if(isnan(covar[Tvar[k]][i])){
printf("ERROR, IMaCh doesn't treat fixed quantitative covariate with missing values V%d=., individual %d will be skipped.\n",Tvar[k],i);
@@ -6464,11 +6474,11 @@ void concatwav(int wav[], int **dh, int
pstamp(ficresprobmorprev);
fprintf(ficresprobmorprev,"# probabilities of dying before estepm=%d months for people of exact age and weighted probabilities w1*p1j+w2*p2j+... stand dev in()\n",estepm);
fprintf(ficresprobmorprev,"# Selected quantitative variables and dummies");
- for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
+ for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ /* To be done*/
fprintf(ficresprobmorprev," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);
}
for(j=1;j<=cptcoveff;j++)
- fprintf(ficresprobmorprev,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(ij,TnsdVar[Tvaraff[j]])]);
+ fprintf(ficresprobmorprev," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(ij,TnsdVar[Tvaraff[j]])]);
fprintf(ficresprobmorprev,"\n");
fprintf(ficresprobmorprev,"# Age cov=%-d",ij);
@@ -7099,7 +7109,7 @@ To be simple, these graphs help to under
for(nres=1;nres <=nresult; nres++){ /* For each resultline */
for(j1=1; j1<=tj;j1++){ /* For any combination of dummy covariates, fixed and varying */
- printf("Varprob TKresult[nres]=%d j1=%d, nres=%d, cptcovn=%d, cptcoveff=%d tj=%d \n", TKresult[nres], j1, nres, cptcovn, cptcoveff, tj);
+ printf("Varprob TKresult[nres]=%d j1=%d, nres=%d, cptcovn=%d, cptcoveff=%d tj=%d cptcovs=%d\n", TKresult[nres], j1, nres, cptcovn, cptcoveff, tj, cptcovs);
if(tj != 1 && TKresult[nres]!= j1)
continue;
@@ -7107,25 +7117,63 @@ To be simple, these graphs help to under
/* for(nres=1;nres <=1; nres++){ /\* For each resultline *\/ */
/* /\* for(nres=1;nres <=nresult; nres++){ /\\* For each resultline *\\/ *\/ */
if (cptcovn>0) {
- fprintf(ficresprob, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]);
- fprintf(ficresprob, "**********\n#\n");
+ fprintf(ficresprob, "\n#********** Variable ");
fprintf(ficresprobcov, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]);
+ fprintf(ficgp, "\n#********** Variable ");
+ fprintf(fichtmcov, "\n
********** Variable ");
+ fprintf(ficresprobcor, "\n#********** Variable ");
+
+ /* Including quantitative variables of the resultline to be done */
+ for (z1=1; z1<=cptcovs; z1++){ /* Loop on each variable of this resultline */
+ printf("Varprob modelresult[%d][%d]=%d model=%s \n",nres, z1, modelresult[nres][z1], model);
+ fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=%s \n",nres, z1, modelresult[nres][z1], model);
+ /* fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=%s resultline[%d]=%s \n",nres, z1, modelresult[nres][z1], model, nres, resultline[nres]); */
+ if(Dummy[modelresult[nres][z1]]==0){/* Dummy variable of the variable in position modelresult in the model corresponding to z1 in resultline */
+ if(Fixed[modelresult[nres][z1]]==0){ /* Fixed referenced to model equation */
+ fprintf(ficresprob,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */
+ fprintf(ficresprobcov,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */
+ fprintf(ficgp,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */
+ fprintf(fichtmcov,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */
+ fprintf(ficresprobcor,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */
+ fprintf(ficresprob,"fixed ");
+ fprintf(ficresprobcov,"fixed ");
+ fprintf(ficgp,"fixed ");
+ fprintf(fichtmcov,"fixed ");
+ fprintf(ficresprobcor,"fixed ");
+ }else{
+ fprintf(ficresprob,"varyi ");
+ fprintf(ficresprobcov,"varyi ");
+ fprintf(ficgp,"varyi ");
+ fprintf(fichtmcov,"varyi ");
+ fprintf(ficresprobcor,"varyi ");
+ }
+ }else if(Dummy[modelresult[nres][z1]]==1){ /* Quanti variable */
+ /* For each selected (single) quantitative value */
+ fprintf(ficresprob," V%d=%f ",Tvqresult[nres][z1],Tqresult[nres][z1]);
+ if(Fixed[modelresult[nres][z1]]==0){ /* Fixed */
+ fprintf(ficresprob,"fixed ");
+ fprintf(ficresprobcov,"fixed ");
+ fprintf(ficgp,"fixed ");
+ fprintf(fichtmcov,"fixed ");
+ fprintf(ficresprobcor,"fixed ");
+ }else{
+ fprintf(ficresprob,"varyi ");
+ fprintf(ficresprobcov,"varyi ");
+ fprintf(ficgp,"varyi ");
+ fprintf(fichtmcov,"varyi ");
+ fprintf(ficresprobcor,"varyi ");
+ }
+ }else{
+ printf("Error in varprob() Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=V%d cptcovs=%d, cptcoveff=%d \n", nres, z1, Dummy[modelresult[nres][z1]],nres,z1,modelresult[nres][z1],cptcovs, cptcoveff); /* end if dummy or quanti */
+ fprintf(ficlog,"Error in varprob() Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=V%d cptcovs=%d, cptcoveff=%d \n", nres, z1, Dummy[modelresult[nres][z1]],nres,z1,modelresult[nres][z1],cptcovs, cptcoveff); /* end if dummy or quanti */
+ exit(1);
+ }
+ } /* End loop on variable of this resultline */
+ /* for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]); */
+ fprintf(ficresprob, "**********\n#\n");
fprintf(ficresprobcov, "**********\n#\n");
-
- fprintf(ficgp, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficgp, " V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]);
fprintf(ficgp, "**********\n#\n");
-
-
- fprintf(fichtmcov, "\n
********** Variable ");
- /* for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); */
- for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtmcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]);
fprintf(fichtmcov, "**********\n
");
-
- fprintf(ficresprobcor, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]);
fprintf(ficresprobcor, "**********\n#");
if(invalidvarcomb[j1]){
fprintf(ficgp,"\n#Combination (%d) ignored because no cases \n",j1);
@@ -7137,57 +7185,66 @@ To be simple, these graphs help to under
trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar);
gp=vector(1,(nlstate)*(nlstate+ndeath));
gm=vector(1,(nlstate)*(nlstate+ndeath));
- for (age=bage; age<=fage; age ++){
+ for (age=bage; age<=fage; age ++){ /* Fo each age we feed the model equation with covariates, using precov as in hpxij() ? */
cov[2]=age;
if(nagesqr==1)
cov[3]= age*age;
- /* for (k=1; k<=cptcovn;k++) { */
- /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,k)]; */
- for (k=1; k<=nsd;k++) { /* For single dummy covariates only */
- /* Here comes the value of the covariate 'j1' after renumbering k with single dummy covariates */
- cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(j1,TnsdVar[TvarsD[k]])];
- /*cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,Tvar[k])];*//* j1 1 2 3 4
- * 1 1 1 1 1
- * 2 2 1 1 1
- * 3 1 2 1 1
- */
- /* nbcode[1][1]=0 nbcode[1][2]=1;*/
- }
- /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1, Tage[1]=2 */
- /* ) p nbcode[Tvar[Tage[k]]][(1 & (ij-1) >> (k-1))+1] */
- /*for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */
- for (k=1; k<=cptcovage;k++){ /* For product with age */
- if(Dummy[Tage[k]]==2){ /* dummy with age */
- cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(j1,TnsdVar[Tvar[Tage[k]]])]*cov[2];
- /* cov[++k1]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; */
- } else if(Dummy[Tage[k]]==3){ /* quantitative with age */
- printf("Internal IMaCh error, don't know which value for quantitative covariate with age, Tage[k]%d, k=%d, Tvar[Tage[k]]=V%d, age=%d\n",Tage[k],k ,Tvar[Tage[k]], (int)cov[2]);
- /* cov[2+nagesqr+Tage[k]]=meanq[k]/idq[k]*cov[2];/\* Using the mean of quantitative variable Tvar[Tage[k]] /\* Tqresult[nres][k]; *\/ */
- /* exit(1); */
- /* cov[++k1]=Tqresult[nres][k]; */
- }
- /* cov[2+Tage[k]+nagesqr]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; */
- }
- for (k=1; k<=cptcovprod;k++){/* For product without age */
- if(Dummy[Tvard[k][1]]==0){
- if(Dummy[Tvard[k][2]]==0){
- cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(j1,TnsdVar[Tvard[k][1]])] * nbcode[Tvard[k][2]][codtabm(j1,TnsdVar[Tvard[k][2]])];
- /* cov[++k1]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; */
- }else{ /* Should we use the mean of the quantitative variables? */
- cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(j1,TnsdVar[Tvard[k][1]])] * Tqresult[nres][resultmodel[nres][k]];
- /* cov[++k1]=nbcode[Tvard[k][1]][codtabm(ij,k)] * Tqresult[nres][k]; */
- }
+ /* New code end of combination but for each resultline */
+ for(k1=1;k1<=cptcovt;k1++){ /* loop on model equation (including products) */
+ if(Typevar[k1]==1){ /* A product with age */
+ cov[2+nagesqr+k1]=precov[nres][k1]*cov[2];
}else{
- if(Dummy[Tvard[k][2]]==0){
- cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][2]][codtabm(j1,TnsdVar[Tvard[k][2]])] * Tqinvresult[nres][TnsdVar[Tvard[k][1]]];
- /* cov[++k1]=nbcode[Tvard[k][2]][codtabm(ij,k)] * Tqinvresult[nres][Tvard[k][1]]; */
- }else{
- cov[2+nagesqr+Tprod[k]]=Tqinvresult[nres][TnsdVar[Tvard[k][1]]]* Tqinvresult[nres][TnsdVar[Tvard[k][2]]];
- /* cov[++k1]=Tqinvresult[nres][Tvard[k][1]]* Tqinvresult[nres][Tvard[k][2]]; */
- }
+ cov[2+nagesqr+k1]=precov[nres][k1];
}
- /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; */
- }
+ }/* End of loop on model equation */
+/* Old code */
+ /* /\* for (k=1; k<=cptcovn;k++) { *\/ */
+ /* /\* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,k)]; *\/ */
+ /* for (k=1; k<=nsd;k++) { /\* For single dummy covariates only *\/ */
+ /* /\* Here comes the value of the covariate 'j1' after renumbering k with single dummy covariates *\/ */
+ /* cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(j1,TnsdVar[TvarsD[k]])]; */
+ /* /\*cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,Tvar[k])];*\//\* j1 1 2 3 4 */
+ /* * 1 1 1 1 1 */
+ /* * 2 2 1 1 1 */
+ /* * 3 1 2 1 1 */
+ /* *\/ */
+ /* /\* nbcode[1][1]=0 nbcode[1][2]=1;*\/ */
+ /* } */
+ /* /\* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1, Tage[1]=2 *\/ */
+ /* /\* ) p nbcode[Tvar[Tage[k]]][(1 & (ij-1) >> (k-1))+1] *\/ */
+ /* /\*for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; *\/ */
+ /* for (k=1; k<=cptcovage;k++){ /\* For product with age *\/ */
+ /* if(Dummy[Tage[k]]==2){ /\* dummy with age *\/ */
+ /* cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(j1,TnsdVar[Tvar[Tage[k]]])]*cov[2]; */
+ /* /\* cov[++k1]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; *\/ */
+ /* } else if(Dummy[Tage[k]]==3){ /\* quantitative with age *\/ */
+ /* printf("Internal IMaCh error, don't know which value for quantitative covariate with age, Tage[k]%d, k=%d, Tvar[Tage[k]]=V%d, age=%d\n",Tage[k],k ,Tvar[Tage[k]], (int)cov[2]); */
+ /* /\* cov[2+nagesqr+Tage[k]]=meanq[k]/idq[k]*cov[2];/\\* Using the mean of quantitative variable Tvar[Tage[k]] /\\* Tqresult[nres][k]; *\\/ *\/ */
+ /* /\* exit(1); *\/ */
+ /* /\* cov[++k1]=Tqresult[nres][k]; *\/ */
+ /* } */
+ /* /\* cov[2+Tage[k]+nagesqr]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; *\/ */
+ /* } */
+ /* for (k=1; k<=cptcovprod;k++){/\* For product without age *\/ */
+ /* if(Dummy[Tvard[k][1]]==0){ */
+ /* if(Dummy[Tvard[k][2]]==0){ */
+ /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(j1,TnsdVar[Tvard[k][1]])] * nbcode[Tvard[k][2]][codtabm(j1,TnsdVar[Tvard[k][2]])]; */
+ /* /\* cov[++k1]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; *\/ */
+ /* }else{ /\* Should we use the mean of the quantitative variables? *\/ */
+ /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(j1,TnsdVar[Tvard[k][1]])] * Tqresult[nres][resultmodel[nres][k]]; */
+ /* /\* cov[++k1]=nbcode[Tvard[k][1]][codtabm(ij,k)] * Tqresult[nres][k]; *\/ */
+ /* } */
+ /* }else{ */
+ /* if(Dummy[Tvard[k][2]]==0){ */
+ /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][2]][codtabm(j1,TnsdVar[Tvard[k][2]])] * Tqinvresult[nres][TnsdVar[Tvard[k][1]]]; */
+ /* /\* cov[++k1]=nbcode[Tvard[k][2]][codtabm(ij,k)] * Tqinvresult[nres][Tvard[k][1]]; *\/ */
+ /* }else{ */
+ /* cov[2+nagesqr+Tprod[k]]=Tqinvresult[nres][TnsdVar[Tvard[k][1]]]* Tqinvresult[nres][TnsdVar[Tvard[k][2]]]; */
+ /* /\* cov[++k1]=Tqinvresult[nres][Tvard[k][1]]* Tqinvresult[nres][Tvard[k][2]]; *\/ */
+ /* } */
+ /* } */
+ /* /\* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; *\/ */
+ /* } */
/* For each age and combination of dummy covariates we slightly move the parameters of delti in order to get the gradient*/
for(theta=1; theta <=npar; theta++){
for(i=1; i<=npar; i++)
@@ -10265,7 +10322,7 @@ int decoderesult( char resultline[], int
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];
+ /* int modelresult[MAXLINE]; */
char stra[80], strb[80], strc[80], strd[80],stre[80];
removefirstspace(&resultline);
@@ -10274,18 +10331,18 @@ int decoderesult( char resultline[], int
strcpy(resultsav,resultline);
printf("Decoderesult resultsav=\"%s\" resultline=\"%s\"\n", resultsav, resultline);
if (strlen(resultsav) >1){
- j=nbocc(resultsav,'='); /**< j=Number of covariate values'=' */
+ j=nbocc(resultsav,'='); /**< j=Number of covariate values'=' in this resultline */
}
if(j == 0){ /* Resultline but no = */
TKresult[nres]=0; /* Combination for the nresult and the model */
return (0);
}
if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */
- printf("ERROR: the number of variables in the resultline which is %d, differs from the number %d of variables used in the model line, %s.\n",j, cptcovs, model);
- fprintf(ficlog,"ERROR: the number of variables in the resultline which is %d, differs from the number %d of variables used in the model line, %s.\n",j, cptcovs, model);
+ printf("ERROR: the number of variables in the resultline which is %d, differs from the number %d of single variables used in the model line, %s.\n",j, cptcovs, model);
+ fprintf(ficlog,"ERROR: the number of variables in the resultline which is %d, differs from the number %d of single variables used in the model line, %s.\n",j, cptcovs, model);
/* return 1;*/
}
- for(k=1; k<=j;k++){ /* Loop on any covariate of the result line */
+ 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 ' ' (stra is the rest of the resultline to be analyzed in the next loop *//* resultsav= "V4=1 V5=25.1 V3=0" stra= "V5=25.1 V3=0" strb= "V4=1" */
/* If resultsav= "V4= 1 V5=25.1 V3=0" with a blank then strb="V4=" and stra="1 V5=25.1 V3=0" */
@@ -10309,13 +10366,13 @@ int decoderesult( char resultline[], int
}
/* Checking for missing or useless values in comparison of current model needs */
/* Feeds resultmodel[nres][k1]=k2 for k1th product covariate with age in the model equation fed by the index k2 of the resutline*/
- for(k1=1; k1<= cptcovt ;k1++){ /* Loop on model. model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
+ for(k1=1; k1<= cptcovt ;k1++){ /* Loop on MODEL LINE V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
if(Typevar[k1]==0){ /* Single covariate in model */
/* 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for product */
match=0;
for(k2=1; k2 <=j;k2++){/* Loop on resultline. In result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */
if(Tvar[k1]==Tvarsel[k2]) {/* Tvar is coming from the model, Tvarsel from the result. Tvar[1]=5 == Tvarsel[2]=5 */
- modelresult[k2]=k1;/* modelresult[2]=1 modelresult[1]=2 modelresult[3]=3 modelresult[6]=4 modelresult[9]=5 */
+ modelresult[nres][k2]=k1;/* modelresult[2]=1 modelresult[1]=2 modelresult[3]=3 modelresult[6]=4 modelresult[9]=5 */
match=1; /* modelresult of k2 variable of resultline is identical to k1 variable of the model good */
break;
}
@@ -10330,7 +10387,7 @@ int decoderesult( char resultline[], int
match=0;
for(k2=1; k2 <=j;k2++){/* Loop on resultline. jth occurence of = signs in the result line. In result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */
if(Tvar[k1]==Tvarsel[k2]) {/* Tvar is coming from the model, Tvarsel from the result. Tvar[1]=5 == Tvarsel[2]=5 */
- modelresult[k2]=k1;/* we found a Vn=1 corrresponding to Vn*age in the model modelresult[2]=1 modelresult[1]=2 modelresult[3]=3 modelresult[6]=4 modelresult[9]=5 */
+ modelresult[nres][k2]=k1;/* we found a Vn=1 corrresponding to Vn*age in the model modelresult[2]=1 modelresult[1]=2 modelresult[3]=3 modelresult[6]=4 modelresult[9]=5 */
resultmodel[nres][k1]=k2; /* Added here */
printf("Decoderesult first modelresult[k2=%d]=%d (k1) V%d*AGE\n",k2,k1,Tvar[k1]);
match=1; /* modelresult of k2 variable of resultline is identical to k1 variable of the model good */
@@ -10376,12 +10433,14 @@ int decoderesult( char resultline[], int
}/* End loop cptcovt */
/* Checking for missing or useless values in comparison of current model needs */
/* Feeds resultmodel[nres][k1]=k2 for single covariate (k1) in the model equation */
- for(k2=1; k2 <=j;k2++){ /* Loop on resultline variables: result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */
+ for(k2=1; k2 <=j;k2++){ /* j or cptcovs is the number of single covariates used either in the model line as well as in the result line (dummy or quantitative)
+ * Loop on resultline variables: result line V4=1 V5=24.1 V3=1 V2=8 V1=0 */
match=0;
for(k1=1; k1<= cptcovt ;k1++){ /* loop on model: model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
if(Typevar[k1]==0){ /* Single only */
if(Tvar[k1]==Tvarsel[k2]) { /* Tvar[2]=4 == Tvarsel[1]=4 */
resultmodel[nres][k1]=k2; /* k1th position in the model equation corresponds to k2th position in the result line. resultmodel[2]=1 resultmodel[1]=2 resultmodel[3]=3 resultmodel[6]=4 resultmodel[9]=5 */
+ modelresult[nres][k2]=k1; /* k1th position in the model equation corresponds to k2th position in the result line. modelresult[1]=2 modelresult[2]=1 modelresult[3]=3 remodelresult[4]=6 modelresult[5]=9 */
++match;
}
}
@@ -10396,7 +10455,7 @@ int decoderesult( char resultline[], int
return 1;
}
}
-
+ /* cptcovres=j /\* Number of variables in the resultline is equal to cptcovs and thus useless *\/ */
/* 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 */
/* nres=1st result line: V4=1 V5=25.1 V3=0 V2=8 V1=1 */
@@ -10415,12 +10474,13 @@ int decoderesult( char resultline[], int
/* V(Tvqresult)=Tqresult V5=25.1 V2=8 Tqresult[nres=1][1]=25.1 */
/* V5*age V5 known which value for nres? */
/* Tqinvresult[2]=8 Tqinvresult[1]=25.1 */
- for(k1=1, k=0, k4=0, k4q=0; k1 <=cptcovt;k1++){ /* loop k1 on position in the model line (excluding product) */
+ for(k1=1, k=0, k4=0, k4q=0; k1 <=cptcovt;k1++){ /* cptcovt number of covariates (excluding 1 and age or age*age) in the MODEL equation.
+ * loop on position k1 in the MODEL LINE */
/* k counting number of combination of single dummies in the equation model */
/* k4 counting single dummies in the equation model */
/* k4q counting single quantitatives in the equation model */
- if( Dummy[k1]==0 && Typevar[k1]==0 ){ /* Dummy and Single */
- /* k4+1= position in the resultline V(Tvarsel)=Tvalsel=Tresult[nres][pos](value); V(Tvresult[nres][pos] (variable): V(variable)=value) */
+ if( Dummy[k1]==0 && Typevar[k1]==0 ){ /* Dummy and Single, k1 is sorting according to MODEL, but k3 to resultline */
+ /* k4+1= (not always if quant in model) position in the resultline V(Tvarsel)=Tvalsel=Tresult[nres][pos](value); V(Tvresult[nres][pos] (variable): V(variable)=value) */
/* modelresult[k3]=k1: k3th position in the result line corresponds to the k1 position in the model line (doesn't work with products)*/
/* Value in the (current nres) resultline of the variable at the k1th position in the model equation resultmodel[nres][k1]= k3 */
/* resultmodel[nres][k1]=k3: k1th position in the model correspond to the k3 position in the resultline */
@@ -10428,19 +10488,21 @@ int decoderesult( char resultline[], int
/* Tvarsel[k3]: Name of the variable at the k3th position in the result line. */
/* Tvalsel[k3]: Value of the variable at the k3th position in the result line. */
/* Tresult[nres][result_position]= value of the dummy variable at the result_position in the nres resultline */
- /* Tvresult[nres][result_position]= id of the dummy variable at the result_position in the nres resultline */
+ /* Tvresult[nres][result_position]= name of the dummy variable at the result_position in the nres resultline */
/* Tinvresult[nres][Name of a dummy variable]= value of the variable in the result line */
/* TinvDoQresult[nres][Name of a Dummy or Q variable]= value of the variable in the result line */
k3= resultmodel[nres][k1]; /* From position k1 in model get position k3 in result line */
/* nres=1 k1=2 resultmodel[2(V4)] = 1=k3 ; k1=3 resultmodel[3(V3)] = 2=k3*/
k2=(int)Tvarsel[k3]; /* from position k3 in resultline get name k2: nres=1 k1=2=>k3=1 Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 (V4); k1=3=>k3=2 Tvarsel[2]=3 (V3)*/
k+=Tvalsel[k3]*pow(2,k4); /* nres=1 k1=2 Tvalsel[1]=1 (V4=1); k1=3 k3=2 Tvalsel[2]=0 (V3=0) */
- TinvDoQresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* Stores the value into the name of the variable. */
+ TinvDoQresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* TinvDoQresult[nres][Name]=Value; stores the value into the name of the variable. */
/* Tinvresult[nres][4]=1 */
- Tresult[nres][k4+1]=Tvalsel[k3];/* Tresult[nres=2][1]=1(V4=1) Tresult[nres=2][2]=0(V3=0) */
- Tvresult[nres][k4+1]=(int)Tvarsel[k3];/* Tvresult[nres][1]=4 Tvresult[nres][3]=1 */
+ /* Tresult[nres][k4+1]=Tvalsel[k3];/\* Tresult[nres=2][1]=1(V4=1) Tresult[nres=2][2]=0(V3=0) *\/ */
+ Tresult[nres][k3]=Tvalsel[k3];/* Tresult[nres=2][1]=1(V4=1) Tresult[nres=2][2]=0(V3=0) */
+ /* Tvresult[nres][k4+1]=(int)Tvarsel[k3];/\* Tvresult[nres][1]=4 Tvresult[nres][3]=1 *\/ */
+ Tvresult[nres][k3]=(int)Tvarsel[k3];/* Tvresult[nres][1]=4 Tvresult[nres][3]=1 */
Tinvresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* Tinvresult[nres][4]=1 */
- precov[nres][k1]=Tvalsel[k3];
+ precov[nres][k1]=Tvalsel[k3]; /* Value from resultline of the variable at the k1 position in the model */
printf("Decoderesult Dummy k=%d, k1=%d precov[nres=%d][k1=%d]=%.f V(k2=V%d)= Tvalsel[%d]=%d, 2**(%d)\n",k, k1, nres, k1,precov[nres][k1], k2, k3, (int)Tvalsel[k3], k4);
k4++;;
}else if( Dummy[k1]==1 && Typevar[k1]==0 ){ /* Quantitative and single */
@@ -10450,8 +10512,12 @@ int decoderesult( char resultline[], int
k3q= resultmodel[nres][k1]; /* resultmodel[1(V5)] = 5 =k3q */
k2q=(int)Tvarsel[k3q]; /* Name of variable at k3q th position in the resultline */
/* Tvarsel[resultmodel[1]]= Tvarsel[1] = 4=k2 */
- Tqresult[nres][k4q+1]=Tvalsel[k3q]; /* Tqresult[nres][1]=25.1 */
- Tvqresult[nres][k4q+1]=(int)Tvarsel[k3q]; /* Tvqresult[nres][1]=5 */
+ /* Tqresult[nres][k4q+1]=Tvalsel[k3q]; /\* Tqresult[nres][1]=25.1 *\/ */
+ /* Tvresult[nres][k4q+1]=(int)Tvarsel[k3q];/\* Tvresult[nres][1]=4 Tvresult[nres][3]=1 *\/ */
+ /* Tvqresult[nres][k4q+1]=(int)Tvarsel[k3q]; /\* Tvqresult[nres][1]=5 *\/ */
+ Tqresult[nres][k3q]=Tvalsel[k3q]; /* Tqresult[nres][1]=25.1 */
+ Tvresult[nres][k3q]=(int)Tvarsel[k3q];/* Tvresult[nres][1]=4 Tvresult[nres][3]=1 */
+ Tvqresult[nres][k3q]=(int)Tvarsel[k3q]; /* Tvqresult[nres][1]=5 */
Tqinvresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */
TinvDoQresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */
precov[nres][k1]=Tvalsel[k3q];
@@ -10463,15 +10529,15 @@ int decoderesult( char resultline[], int
k3= resultmodel[nres][k1]; /* nres=1 k1=2 resultmodel[2(V4)] = 1=k3 ; k1=3 resultmodel[3(V3)] = 2=k3*/
k2=(int)Tvarsel[k3]; /* nres=1 k1=2=>k3=1 Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 (V4); k1=3=>k3=2 Tvarsel[2]=3 (V3)*/
- TinvDoQresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* Tinvresult[nres][4]=1 */
+ TinvDoQresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* TinvDoQresult[nres][4]=1 */
precov[nres][k1]=Tvalsel[k3];
printf("Decoderesult Dummy with age k=%d, k1=%d precov[nres=%d][k1=%d]=%.f Tvar[%d]=V%d k2=Tvarsel[%d]=%d Tvalsel[%d]=%d\n",k, k1, nres, k1,precov[nres][k1], k1, Tvar[k1], k3,(int)Tvarsel[k3], k3, (int)Tvalsel[k3]);
}else if( Dummy[k1]==3 ){ /* For quant with age product */
k3q= resultmodel[nres][k1]; /* resultmodel[1(V5)] = 25.1=k3q */
k2q=(int)Tvarsel[k3q]; /* Tvarsel[resultmodel[1]]= Tvarsel[1] = 4=k2 */
- TinvDoQresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */
+ TinvDoQresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* TinvDoQresult[nres][5]=25.1 */
precov[nres][k1]=Tvalsel[k3q];
- printf("Decoderesult Quantitative with age nres=%d, k1=%d, precov[nres=%d][k1=%d]=%.f Tvar[%d]=V%d V(k2q=%d)= Tvarsel[%d]=%d, Tvalsel[%d]=%f\n",nres, k1, nres, k1,precov[nres][k1], k1, Tvar[k1], k2q, k3q, Tvarsel[k3q], k3q, Tvalsel[k3q]);
+ printf("Decoderesult Quantitative with age nres=%d, k1=%d, precov[nres=%d][k1=%d]=%f Tvar[%d]=V%d V(k2q=%d)= Tvarsel[%d]=%d, Tvalsel[%d]=%f\n",nres, k1, nres, k1,precov[nres][k1], k1, Tvar[k1], k2q, k3q, Tvarsel[k3q], k3q, Tvalsel[k3q]);
}else if(Typevar[k1]==2 ){ /* For product quant or dummy (not with age) */
precov[nres][k1]=TinvDoQresult[nres][Tvardk[k1][1]] * TinvDoQresult[nres][Tvardk[k1][2]];
printf("Decoderesult Quantitative or Dummy (not with age) nres=%d k1=%d precov[nres=%d][k1=%d]=%.f V%d(=%.f) * V%d(=%.f) \n",nres, k1, nres, k1,precov[nres][k1], Tvardk[k1][1], TinvDoQresult[nres][Tvardk[k1][1]], Tvardk[k1][2], TinvDoQresult[nres][Tvardk[k1][2]]);
@@ -10481,7 +10547,7 @@ int decoderesult( char resultline[], int
}
}
- TKresult[nres]=++k; /* Combination for the nresult and the model */
+ TKresult[nres]=++k; /* Number of combinations of dummies for the nresult and the model =Tvalsel[k3]*pow(2,k4) + 1*/
return (0);
}
@@ -10746,8 +10812,8 @@ Dummy[k] 0=dummy (0 1), 1 quantitative (
modell[k].maintype= FTYPE;
modell[k].subtype= FQ;
nsq++;
- TvarsQ[nsq]=Tvar[k];
- TvarsQind[nsq]=k;
+ TvarsQ[nsq]=Tvar[k]; /* Gives the variable name (extended to products) of first nsq simple quantitative covariates (fixed or time vary see below */
+ TvarsQind[nsq]=k; /* Gives the position in the model equation of the first nsq simple quantitative covariates (fixed or time vary) */
ncovf++;
TvarF[ncovf]=Tvar[k];
TvarFind[ncovf]=k;
@@ -10778,8 +10844,8 @@ Dummy[k] 0=dummy (0 1), 1 quantitative (
modell[k].subtype= VQ;
ncovv++; /* Only simple time varying variables */
nsq++;
- TvarsQ[nsq]=Tvar[k]; /* k=1 Tvar=5 nsq=1 TvarsQ[1]=5 */
- TvarsQind[nsq]=k; /* For single quantitative covariate gives the model position of each single quantitative covariate */
+ TvarsQ[nsq]=Tvar[k]; /* k=1 Tvar=5 nsq=1 TvarsQ[1]=5 */ /* Gives the variable name (extended to products) of first nsq simple quantitative covariates (fixed or time vary here) */
+ TvarsQind[nsq]=k; /* For single quantitative covariate gives the model position of each single quantitative covariate *//* Gives the position in the model equation of the first nsq simple quantitative covariates (fixed or time vary) */
TvarV[ncovv]=Tvar[k];
TvarVind[ncovv]=k; /* TvarVind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Any time varying singele */
TvarVQ[nqtveff]=Tvar[k]; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */
@@ -11722,7 +11788,7 @@ int main(int argc, char *argv[])
char pathr[MAXLINE], pathimach[MAXLINE];
char *tok, *val; /* pathtot */
- int firstobs=1, lastobs=10; /* nobs = lastobs-firstobs declared globally ;*/
+ /* int firstobs=1, lastobs=10; /\* nobs = lastobs-firstobs declared globally ;*\/ */
int c, h , cpt, c2;
int jl=0;
int i1, j1, jk, stepsize=0;
@@ -13631,8 +13697,8 @@ Please run with mle=-1 to get a correct
printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);
}
for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
- printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);
- fprintf(ficreseij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);
+ printf(" V%d=%f ",TvarsQ[j], TinvDoQresult[nres][TvarsQ[j]]); /* TvarsQ[j] gives the name of the jth quantitative (fixed or time v) */
+ fprintf(ficreseij,"V%d=%f ",TvarsQ[j], TinvDoQresult[nres][TvarsQ[j]]);
}
fprintf(ficreseij,"******\n");
printf("******\n");
@@ -13689,23 +13755,70 @@ Please run with mle=-1 to get a correct
i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */
if (cptcovn < 1){i1=1;}
- for(nres=1; nres <= nresult; nres++) /* For each resultline */
- for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */
- if(i1 != 1 && TKresult[nres]!= k)
+ for(nres=1; nres <= nresult; nres++) /* For each resultline, find the combination and output results according to the values of dummies and then quanti. */
+ for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying. For each nres and each value at position k
+ * we know Tresult[nres][result_position]= value of the dummy variable at the result_position in the nres resultline
+ * Tvqresult[nres][result_position]= id of the variable at the result_position in the nres resultline
+ * and Tqresult[nres][result_position]= value of the variable at the result_position in the nres resultline */
+ /* */
+ if(i1 != 1 && TKresult[nres]!= k) /* TKresult[nres] is the combination of this nres resultline. All the i1 combinations are not output */
continue;
printf("\n# model %s \n#****** Result for:", model);
fprintf(ficrest,"\n# model %s \n#****** Result for:", model);
fprintf(ficlog,"\n# model %s \n#****** Result for:", model);
- for(j=1;j<=cptcoveff;j++){
- printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);
- fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);
- fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);
+ /* It might not be a good idea to mix dummies and quantitative */
+ /* for(j=1;j<=cptcoveff;j++){ /\* j=resultpos. Could be a loop on cptcovs: number of single dummy covariate in the result line as well as in the model *\/ */
+ for(j=1;j<=cptcovs;j++){ /* j=resultpos. Could be a loop on cptcovs: number of single covariate (dummy or quantitative) in the result line as well as in the model */
+ /* printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); /\* Output by variables in the resultline *\/ */
+ /* Tvaraff[j] is the name of the dummy variable in position j in the equation model:
+ * Tvaraff[1]@9={4, 3, 0, 0, 0, 0, 0, 0, 0}, in model=V5+V4+V3+V4*V3+V5*age
+ * (V5 is quanti) V4 and V3 are dummies
+ * TnsdVar[4] is the position 1 and TnsdVar[3]=2 in codtabm(k,l)(V4 V3)=V4 V3
+ * l=1 l=2
+ * k=1 1 1 0 0
+ * k=2 2 1 1 0
+ * k=3 [1] [2] 0 1
+ * k=4 2 2 1 1
+ * If nres=1 result: V3=1 V4=0 then k=3 and outputs
+ * If nres=2 result: V4=1 V3=0 then k=2 and outputs
+ * nres=1 =>k=3 j=1 V4= nbcode[4][codtabm(3,1)=1)=0; j=2 V3= nbcode[3][codtabm(3,2)=2]=1
+ * nres=2 =>k=2 j=1 V4= nbcode[4][codtabm(2,1)=2)=1; j=2 V3= nbcode[3][codtabm(2,2)=1]=0
+ */
+ /* Tvresult[nres][j] Name of the variable at position j in this resultline */
+ /* Tresult[nres][j] Value of this variable at position j could be a float if quantitative */
+/* We give up with the combinations!! */
+ printf("\n j=%d In computing T_ Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=%d cptcovs=%d, cptcoveff=%d Fixed[modelresult[nres][j]]=%d\n", j, nres, j, Dummy[modelresult[nres][j]],nres,j,modelresult[nres][j],cptcovs, cptcoveff,Fixed[modelresult[nres][j]]); /* end if dummy or quanti */
+
+ if(Dummy[modelresult[nres][j]]==0){/* Dummy variable of the variable in position modelresult in the model corresponding to j in resultline */
+ printf("V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */
+ fprintf(ficlog,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */
+ fprintf(ficrest,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline */
+ if(Fixed[modelresult[nres][j]]==0){ /* Fixed */
+ printf("fixed ");fprintf(ficlog,"fixed ");fprintf(ficrest,"fixed ");
+ }else{
+ printf("varyi ");fprintf(ficlog,"varyi ");fprintf(ficrest,"varyi ");
+ }
+ /* fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */
+ /* fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */
+ }else if(Dummy[modelresult[nres][j]]==1){ /* Quanti variable */
+ /* For each selected (single) quantitative value */
+ printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
+ if(Fixed[modelresult[nres][j]]==0){ /* Fixed */
+ printf("fixed ");fprintf(ficlog,"fixed ");fprintf(ficrest,"fixed ");
+ }else{
+ printf("varyi ");fprintf(ficlog,"varyi ");fprintf(ficrest,"varyi ");
+ }
+ }else{
+ printf("Error in computing T_ Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=%d cptcovs=%d, cptcoveff=%d \n", nres, j, Dummy[modelresult[nres][j]],nres,j,modelresult[nres][j],cptcovs, cptcoveff); /* end if dummy or quanti */
+ fprintf(ficlog,"Error in computing T_ Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=%d cptcovs=%d, cptcoveff=%d \n", nres, j, Dummy[modelresult[nres][j]],nres,j,modelresult[nres][j],cptcovs, cptcoveff); /* end if dummy or quanti */
+ exit(1);
+ }
}
- for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
- printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);
- fprintf(ficrest," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);
- fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);
- }
+ /* for (j=1; j<= nsq; j++){ /\* For each selected (single) quantitative value *\/ */
+ /* printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); /\* Wrong j is not in the equation model *\/ */
+ /* fprintf(ficrest," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */
+ /* fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */
+ /* } */
fprintf(ficrest,"******\n");
fprintf(ficlog,"******\n");
printf("******\n");
@@ -13713,12 +13826,13 @@ Please run with mle=-1 to get a correct
fprintf(ficresstdeij,"\n#****** ");
fprintf(ficrescveij,"\n#****** ");
for(j=1;j<=cptcoveff;j++) {
- fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);
- fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);
- }
- for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
- fprintf(ficresstdeij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);
- fprintf(ficrescveij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);
+ fprintf(ficresstdeij,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]);
+ /* fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */
+ /* fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */
+ }
+ for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value, TvarsQind gives the position of a quantitative in model equation */
+ fprintf(ficresstdeij," V%d=%f ",Tvar[TvarsQind[j]],Tqresult[nres][resultmodel[nres][TvarsQind[j]]]);
+ fprintf(ficrescveij," V%d=%f ",Tvar[TvarsQind[j]],Tqresult[nres][resultmodel[nres][TvarsQind[j]]]);
}
fprintf(ficresstdeij,"******\n");
fprintf(ficrescveij,"******\n");