From 5f9cee19dfc2877dafd3c958ba9de7e680f11b5f Mon Sep 17 00:00:00 2001 From: "N. Brouard" Date: Wed, 7 Sep 2016 17:14:18 +0000 Subject: [PATCH] Summary: Starting values from frequencies --- src/imach.c | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/imach.c b/src/imach.c index 94de963..141a1da 100644 --- a/src/imach.c +++ b/src/imach.c @@ -1,6 +1,9 @@ /* $Id$ $State$ $Log$ + Revision 1.248 2016/09/07 14:10:18 brouard + *** empty log message *** + Revision 1.247 2016/09/02 11:11:21 brouard *** empty log message *** @@ -4246,7 +4249,6 @@ Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age j=cptcoveff; /* Only dummy covariates of the model */ if (cptcovn<1) {j=1;ncodemax[1]=1;} - first=1; /* Detects if a combination j1 is empty: for a multinomial variable like 3 education levels: reference=low_education V1=0,V2=0 @@ -4254,7 +4256,11 @@ Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age 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 */ - + dateintsum=0; + k2cpt=0; + + for (j = 0; j <= cptcoveff; j+=cptcoveff){ + first=1; 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.; /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]); @@ -4277,11 +4283,13 @@ Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age /* } */ /* } */ - dateintsum=0; - k2cpt=0; + /* dateintsum=0; */ + /* k2cpt=0; */ + /* 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 */ bool=1; + 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++) { */ @@ -4304,16 +4312,18 @@ Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age } /* end z1 */ } /* cptcovn > 0 */ } /* end any */ + }/* end j==0 */ if (bool==1){ /* We selected an individual iind satisfying combination j1 or all fixed */ /* for(m=firstpass; m<=lastpass; m++){ */ for(mi=1; miDatafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age } } }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop */ + } /* end j==0 */ /* bool =0 we keep that guy which corresponds to the combination of dummy values */ if(bool==1){ /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind] @@ -4344,8 +4355,8 @@ Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age 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 */ } } /* end if between passes */ - if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) { - dateintsum=dateintsum+k2; + 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 ?*/ k2cpt++; /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */ } @@ -4359,7 +4370,7 @@ Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ pstamp(ficresp); - if (cptcoveff>0){ + if (cptcoveff>0 && j!=0){ fprintf(ficresp, "\n#********** Variable "); fprintf(ficresphtm, "\n

********** Variable "); fprintf(ficresphtmfr, "\n

********** Variable "); @@ -4525,6 +4536,20 @@ Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age } fprintf(ficresphtmfr,"\n"); } /* end selected combination of covariate j1 */ + if(j==0){ /* We can estimate starting values from the occurences in each case */ + for(jk=-1; jk <=nlstate+ndeath; jk++){ + for(m=-1; m <=nlstate+ndeath; m++){ + /* param[i]|j][k]= freq[jk][m][iagemax+3] */ + if(freq[jk][m][iage] !=0 ) { /* minimizing output */ + if(first==1){ + printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]); + } + fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]); + } + } + } /* end loop jk */ + } + } /* end j */ dateintmean=dateintsum/k2cpt; fclose(ficresp); -- 2.43.0