--- imach/src/imach.c 2016/09/02 11:11:21 1.247
+++ imach/src/imach.c 2016/09/07 17:14:18 1.249
@@ -1,6 +1,12 @@
-/* $Id: imach.c,v 1.247 2016/09/02 11:11:21 brouard Exp $
+/* $Id: imach.c,v 1.249 2016/09/07 17:14:18 brouard Exp $
$State: Exp $
$Log: imach.c,v $
+ Revision 1.249 2016/09/07 17:14:18 brouard
+ Summary: Starting values from frequencies
+
+ 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 ***
@@ -943,12 +949,12 @@ typedef struct {
#define ODIRSEPARATOR '\\'
#endif
-/* $Id: imach.c,v 1.247 2016/09/02 11:11:21 brouard Exp $ */
+/* $Id: imach.c,v 1.249 2016/09/07 17:14:18 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.247 $ $Date: 2016/09/02 11:11:21 $";
+char fullversion[]="$Revision: 1.249 $ $Date: 2016/09/07 17:14:18 $";
char strstart[80];
char optionfilext[10], optionfilefiname[FILENAMELENGTH];
int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */
@@ -4246,7 +4252,6 @@ Title=%s
Datafile=%s Firstpass=%d La
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 +4259,11 @@ Title=%s
Datafile=%s Firstpass=%d La
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 +4286,13 @@ Title=%s
Datafile=%s Firstpass=%d La
/* } */
/* } */
- 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 +4315,18 @@ Title=%s
Datafile=%s Firstpass=%d La
} /* 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 La
}
}
}/* 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 +4358,8 @@ Title=%s
Datafile=%s Firstpass=%d La
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 +4373,7 @@ Title=%s
Datafile=%s Firstpass=%d La
/* 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 +4539,20 @@ Title=%s
Datafile=%s Firstpass=%d La
}
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);
@@ -8843,7 +8871,7 @@ Dummy[k] 0=dummy (0 1), 1 quantitative (
}
int calandcheckages(int imx, int maxwav, double *agemin, double *agemax, int *nberr, int *nbwarn )
-{
+{/* Check ages at death */
int i, m;
int firstone=0;
@@ -9901,6 +9929,11 @@ int main(int argc, char *argv[])
fclose (ficlog);
goto end;
exit(0);
+ } else if(mle==-2) { /* Guessing from means */
+ prwizard(ncovmodel, nlstate, ndeath, model, ficparo);
+ printf(" You chose mle=-2, look at file %s for a template of covariance matrix \n",filereso);
+ fprintf(ficlog," You chose mle=-2, look at file %s for a template of covariance matrix \n",filereso);
+
} else if(mle==-5) { /* Main Wizard */
prwizard(ncovmodel, nlstate, ndeath, model, ficparo);
printf(" You chose mle=-3, look at file %s for a template of covariance matrix \n",filereso);
@@ -10224,7 +10257,7 @@ Please run with mle=-1 to get a correct
*/
concatwav(wav, dh, bh, mw, s, agedc, agev, firstpass, lastpass, imx, nlstate, stepm);
- /* */
+ /* Concatenates waves */
free_vector(moisdc,1,n);
free_vector(andc,1,n);
@@ -10427,9 +10460,9 @@ Interval (in months) between two waves:
/* For mortality only */
if (mle==-3){
ximort=matrix(1,NDIM,1,NDIM);
- for(i=1;i<=NDIM;i++)
- for(j=1;j<=NDIM;j++)
- ximort[i][j]=0.;
+ for(i=1;i<=NDIM;i++)
+ for(j=1;j<=NDIM;j++)
+ ximort[i][j]=0.;
/* ximort=gsl_matrix_alloc(1,NDIM,1,NDIM); */
cens=ivector(1,n);
ageexmed=vector(1,n);