]> henry.ined.fr Git - .git/commitdiff
(Module): Yes the sum of survivors was wrong since
authorN. Brouard <brouard@ined.fr>
Fri, 28 Apr 2006 18:11:50 +0000 (18:11 +0000)
committerN. Brouard <brouard@ined.fr>
Fri, 28 Apr 2006 18:11:50 +0000 (18:11 +0000)
imach-114 because nhstepm was no more computed in the age
loop. Now we define nhstepma in the age loop.
(Module): In order to speed up (in case of numerous covariates) we
compute health expectancies (without variances) in a first step
and then all the health expectancies with variances or standard
deviation (needs data from the Hessian matrices) which slows the
computation.
In the future we should be able to stop the program is only health
expectancies and graph are needed without standard deviations.

src/imach.c

index 7e1d3f03e53ebd6180f295c4a0fd64bdbd376005..f6cb878fa498efd95fa5cd8bc241c466907af506 100644 (file)
@@ -1,6 +1,12 @@
 /* $Id$
   $State$
   $Log$
+  Revision 1.126  2006/04/28 17:23:28  brouard
+  (Module): Yes the sum of survivors was wrong since
+  imach-114 because nhstepm was no more computed in the age
+  loop. Now we define nhstepma in the age loop.
+  Version 0.98h
+
   Revision 1.125  2006/04/04 15:20:31  lievre
   Errors in calculation of health expectancies. Age was not initialized.
   Forecasting file added.
@@ -2461,7 +2467,7 @@ void tricode(int *Tvar, int **nbcode, int imx)
 
 /*********** Health Expectancies ****************/
 
-void evsij(char fileres[], double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[] )
+void evsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[] )
 
 {
   /* Health expectancies, no variances */
@@ -2569,7 +2575,7 @@ void evsij(char fileres[], double ***eij, double x[], int nlstate, int stepm, in
   
 }
 
-void cvevsij(char fileres[], double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,double delti[],double **matcov,char strstart[] )
+void cvevsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,double delti[],double **matcov,char strstart[] )
 
 {
   /* Covariances of health expectancies eij and of total life expectancies according
@@ -5733,18 +5739,24 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
     }
   
 
-    /*---------- Health expectancies and variances ------------*/
+    /* Computes prevalence between agemin (i.e minimal age computed) and no more ageminpar */
 
-    strcpy(filerest,"t");
-    strcat(filerest,fileres);
-    if((ficrest=fopen(filerest,"w"))==NULL) {
-      printf("Problem with total LE resultfile: %s\n", filerest);goto end;
-      fprintf(ficlog,"Problem with total LE resultfile: %s\n", filerest);goto end;
+    prevalence(probs, agemin, agemax, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass);
+    /*  printf("ageminpar=%f, agemax=%f, s[lastpass][imx]=%d, agev[lastpass][imx]=%f, nlstate=%d, imx=%d,  mint[lastpass][imx]=%f, anint[lastpass][imx]=%f,dateprev1=%f, dateprev2=%f, firstpass=%d, lastpass=%d\n",\
+       ageminpar, agemax, s[lastpass][imx], agev[lastpass][imx], nlstate, imx, mint[lastpass][imx],anint[lastpass][imx], dateprev1, dateprev2, firstpass, lastpass);
+    */
+
+    if (mobilav!=0) {
+      mobaverage= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX);
+      if (movingaverage(probs, bage, fage, mobaverage,mobilav)!=0){
+       fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav);
+       printf(" Error in movingaverage mobilav=%d\n",mobilav);
+      }
     }
-    printf("Computing Total Life expectancies with their standard errors: file '%s' \n", filerest); 
-    fprintf(ficlog,"Computing Total Life expectancies with their standard errors: file '%s' \n", filerest); 
 
 
+    /*---------- Health expectancies, no variances ------------*/
+
     strcpy(filerese,"e");
     strcat(filerese,fileres);
     if((ficreseij=fopen(filerese,"w"))==NULL) {
@@ -5753,6 +5765,37 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
     }
     printf("Computing Health Expectancies: result on file '%s' \n", filerese);
     fprintf(ficlog,"Computing Health Expectancies: result on file '%s' \n", filerese);
+    for(cptcov=1,k=0;cptcov<=i1;cptcov++){
+      for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
+       k=k+1; 
+       fprintf(ficreseij,"\n#****** ");
+       for(j=1;j<=cptcoveff;j++) {
+         fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
+       }
+       fprintf(ficreseij,"******\n");
+
+       eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);
+       oldm=oldms;savm=savms;
+       evsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart);  
+      
+       free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage);
+      }
+    }
+    fclose(ficreseij);
+
+
+    /*---------- Health expectancies and variances ------------*/
+
+
+    strcpy(filerest,"t");
+    strcat(filerest,fileres);
+    if((ficrest=fopen(filerest,"w"))==NULL) {
+      printf("Problem with total LE resultfile: %s\n", filerest);goto end;
+      fprintf(ficlog,"Problem with total LE resultfile: %s\n", filerest);goto end;
+    }
+    printf("Computing Total Life expectancies with their standard errors: file '%s' \n", filerest); 
+    fprintf(ficlog,"Computing Total Life expectancies with their standard errors: file '%s' \n", filerest); 
+
 
     strcpy(fileresstde,"stde");
     strcat(fileresstde,fileres);
@@ -5781,20 +5824,6 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
     printf("Computing Variance-covariance of DFLEs: file '%s' \n", fileresv);
     fprintf(ficlog,"Computing Variance-covariance of DFLEs: file '%s' \n", fileresv);
 
-    /* Computes prevalence between agemin (i.e minimal age computed) and no more ageminpar */
-    prevalence(probs, agemin, agemax, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass);
-    /*  printf("ageminpar=%f, agemax=%f, s[lastpass][imx]=%d, agev[lastpass][imx]=%f, nlstate=%d, imx=%d,  mint[lastpass][imx]=%f, anint[lastpass][imx]=%f,dateprev1=%f, dateprev2=%f, firstpass=%d, lastpass=%d\n",\
-       ageminpar, agemax, s[lastpass][imx], agev[lastpass][imx], nlstate, imx, mint[lastpass][imx],anint[lastpass][imx], dateprev1, dateprev2, firstpass, lastpass);
-    */
-
-    if (mobilav!=0) {
-      mobaverage= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX);
-      if (movingaverage(probs, bage, fage, mobaverage,mobilav)!=0){
-       fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav);
-       printf(" Error in movingaverage mobilav=%d\n",mobilav);
-      }
-    }
-
     for(cptcov=1,k=0;cptcov<=i1;cptcov++){
       for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
        k=k+1; 
@@ -5803,15 +5832,12 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
          fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
        fprintf(ficrest,"******\n");
 
-       fprintf(ficreseij,"\n#****** ");
        fprintf(ficresstdeij,"\n#****** ");
        fprintf(ficrescveij,"\n#****** ");
        for(j=1;j<=cptcoveff;j++) {
-         fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
          fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
          fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
        }
-       fprintf(ficreseij,"******\n");
        fprintf(ficresstdeij,"******\n");
        fprintf(ficrescveij,"******\n");
 
@@ -5822,8 +5848,7 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
 
        eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);
        oldm=oldms;savm=savms;
-       evsij(fileres, eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart);  
-       cvevsij(fileres, eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart);  
+       cvevsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart);  
  
        vareij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);
        oldm=oldms;savm=savms;
@@ -5880,7 +5905,6 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
     free_matrix(mint,1,maxwav,1,n);
     free_ivector(cod,1,n);
     free_ivector(tab,1,NCOVMAX);
-    fclose(ficreseij);
     fclose(ficresstdeij);
     fclose(ficrescveij);
     fclose(ficresvij);