Diff for /imach/src/imach.c between versions 1.38 and 1.39

version 1.38, 2002/04/03 12:19:36 version 1.39, 2002/04/05 15:45:00
Line 14 Line 14
   model. More health states you consider, more time is necessary to reach the    model. More health states you consider, more time is necessary to reach the
   Maximum Likelihood of the parameters involved in the model.  The    Maximum Likelihood of the parameters involved in the model.  The
   simplest model is the multinomial logistic model where pij is the    simplest model is the multinomial logistic model where pij is the
   probabibility to be observed in state j at the second wave    probability to be observed in state j at the second wave
   conditional to be observed in state i at the first wave. Therefore    conditional to be observed in state i at the first wave. Therefore
   the model is: log(pij/pii)= aij + bij*age+ cij*sex + etc , where    the model is: log(pij/pii)= aij + bij*age+ cij*sex + etc , where
   'age' is age and 'sex' is a covariate. If you want to have a more    'age' is age and 'sex' is a covariate. If you want to have a more
Line 1503  void tricode(int *Tvar, int **nbcode, in Line 1503  void tricode(int *Tvar, int **nbcode, in
       for (k=0; k<=19; k++) {        for (k=0; k<=19; k++) {
         if (Ndum[k] != 0) {          if (Ndum[k] != 0) {
           nbcode[Tvar[j]][ij]=k;            nbcode[Tvar[j]][ij]=k;
           /*     printf("nbcodeaaaaaaaaaaa=%d Tvar[j]=%d ij=%d j=%d",nbcode[Tvar[j]][ij],Tvar[j],ij,j);*/           
           ij++;            ij++;
         }          }
         if (ij > ncodemax[j]) break;          if (ij > ncodemax[j]) break;
Line 1585  void evsij(char fileres[], double ***eij Line 1585  void evsij(char fileres[], double ***eij
     /* Computed by stepm unit matrices, product of hstepm matrices, stored      /* Computed by stepm unit matrices, product of hstepm matrices, stored
        in an array of nhstepm length: nhstepm=10, hstepm=4, stepm=6 months */         in an array of nhstepm length: nhstepm=10, hstepm=4, stepm=6 months */
     hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, ij);        hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, ij);  
    
       /*for (h=0, eij[i][j][(int)age]=0; h<=nhstepm-1; h++) printf("%f %.5f\n", age*12+h, p3mat[1][1][h]);*/
   
     hf=hstepm*stepm/YEARM;  /* Duration of hstepm expressed in year unit. */      hf=hstepm*stepm/YEARM;  /* Duration of hstepm expressed in year unit. */
     for(i=1; i<=nlstate;i++)      for(i=1; i<=nlstate;i++)
       for(j=1; j<=nlstate;j++)        for(j=1; j<=nlstate;j++)
Line 1822  void varprevlim(char fileres[], double * Line 1825  void varprevlim(char fileres[], double *
 }  }
   
 /************ Variance of one-step probabilities  ******************/  /************ Variance of one-step probabilities  ******************/
 void varprob(char fileres[], double **matcov, double x[], double delti[], int nlstate, double bage, double fage, int ij)  void varprob(char fileres[], double **matcov, double x[], double delti[], int nlstate, double bage, double fage, int ij, int *Tvar, int **nbcode, int *ncodemax)
 {  {
   int i, j;    int i, j, i1, k1, j1, z1;
   int k=0, cptcode;    int k=0, cptcode;
   double **dnewm,**doldm;    double **dnewm,**doldm;
   double *xp;    double *xp;
Line 1847  void varprob(char fileres[], double **ma Line 1850  void varprob(char fileres[], double **ma
   doldm=matrix(1,(nlstate+ndeath)*(nlstate+ndeath),1,(nlstate+ndeath)*(nlstate+ndeath));    doldm=matrix(1,(nlstate+ndeath)*(nlstate+ndeath),1,(nlstate+ndeath)*(nlstate+ndeath));
     
   cov[1]=1;    cov[1]=1;
   for (age=bage; age<=fage; age ++){    j=cptcoveff;
     cov[2]=age;    if (cptcovn<1) {j=1;ncodemax[1]=1;}
     gradg=matrix(1,npar,1,9);    j1=0;
     trgradg=matrix(1,9,1,npar);    for(k1=1; k1<=1;k1++){
     gp=vector(1,(nlstate+ndeath)*(nlstate+ndeath));      for(i1=1; i1<=ncodemax[k1];i1++){
     gm=vector(1,(nlstate+ndeath)*(nlstate+ndeath));      j1++;
   
       if  (cptcovn>0) {
         fprintf(ficresprob, "\n#********** Variable ");
         for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
         fprintf(ficresprob, "**********\n#");
       }
         
     for(theta=1; theta <=npar; theta++){        for (age=bage; age<=fage; age ++){
       for(i=1; i<=npar; i++)          cov[2]=age;
         xp[i] = x[i] + (i==theta ?delti[theta]:0);          for (k=1; k<=cptcovn;k++) {
                  cov[2+k]=nbcode[Tvar[k]][codtab[j1][Tvar[k]]];
       pmij(pmmij,cov,ncovmodel,xp,nlstate);           
      
       k=0;  
       for(i=1; i<= (nlstate+ndeath); i++){  
         for(j=1; j<=(nlstate+ndeath);j++){  
            k=k+1;  
           gp[k]=pmmij[i][j];  
         }          }
       }          for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2];
           for (k=1; k<=cptcovprod;k++)
       for(i=1; i<=npar; i++)            cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]];
         xp[i] = x[i] - (i==theta ?delti[theta]:0);         
           gradg=matrix(1,npar,1,9);
           trgradg=matrix(1,9,1,npar);
           gp=vector(1,(nlstate+ndeath)*(nlstate+ndeath));
           gm=vector(1,(nlstate+ndeath)*(nlstate+ndeath));
         
           for(theta=1; theta <=npar; theta++){
       pmij(pmmij,cov,ncovmodel,xp,nlstate);            for(i=1; i<=npar; i++)
       k=0;              xp[i] = x[i] + (i==theta ?delti[theta]:0);
       for(i=1; i<=(nlstate+ndeath); i++){           
         for(j=1; j<=(nlstate+ndeath);j++){            pmij(pmmij,cov,ncovmodel,xp,nlstate);
           k=k+1;           
           gm[k]=pmmij[i][j];            k=0;
         }            for(i=1; i<= (nlstate+ndeath); i++){
       }              for(j=1; j<=(nlstate+ndeath);j++){
                 k=k+1;
                 gp[k]=pmmij[i][j];
               }
             }
            
             for(i=1; i<=npar; i++)
               xp[i] = x[i] - (i==theta ?delti[theta]:0);
      
             pmij(pmmij,cov,ncovmodel,xp,nlstate);
             k=0;
             for(i=1; i<=(nlstate+ndeath); i++){
               for(j=1; j<=(nlstate+ndeath);j++){
                 k=k+1;
                 gm[k]=pmmij[i][j];
               }
             }
             
        for(i=1; i<= (nlstate+ndeath)*(nlstate+ndeath); i++)            for(i=1; i<= (nlstate+ndeath)*(nlstate+ndeath); i++)
            gradg[theta][i]=(gp[i]-gm[i])/2./delti[theta];                gradg[theta][i]=(gp[i]-gm[i])/2./delti[theta];  
     }          }
   
      for(j=1; j<=(nlstate+ndeath)*(nlstate+ndeath);j++)  
       for(theta=1; theta <=npar; theta++)  
       trgradg[j][theta]=gradg[theta][j];  
    
      matprod2(dnewm,trgradg,1,9,1,npar,1,npar,matcov);  
      matprod2(doldm,dnewm,1,9,1,npar,1,9,gradg);  
   
      pmij(pmmij,cov,ncovmodel,x,nlstate);  
   
      k=0;          for(j=1; j<=(nlstate+ndeath)*(nlstate+ndeath);j++)
      for(i=1; i<=(nlstate+ndeath); i++){            for(theta=1; theta <=npar; theta++)
        for(j=1; j<=(nlstate+ndeath);j++){              trgradg[j][theta]=gradg[theta][j];
          k=k+1;         
          gm[k]=pmmij[i][j];          matprod2(dnewm,trgradg,1,9,1,npar,1,npar,matcov);
           matprod2(doldm,dnewm,1,9,1,npar,1,9,gradg);
          
           pmij(pmmij,cov,ncovmodel,x,nlstate);
          
           k=0;
           for(i=1; i<=(nlstate+ndeath); i++){
             for(j=1; j<=(nlstate+ndeath);j++){
               k=k+1;
               gm[k]=pmmij[i][j];
             }
         }          }
      }  
             
      /*printf("\n%d ",(int)age);       /*printf("\n%d ",(int)age);
      for (i=1; i<=(nlstate+ndeath)*(nlstate+ndeath-1);i++){       for (i=1; i<=(nlstate+ndeath)*(nlstate+ndeath-1);i++){
          
   
        printf("%e [%e ;%e] ",gm[i],gm[i]-2*sqrt(doldm[i][i]),gm[i]+2*sqrt(doldm[i][i]));         printf("%e [%e ;%e] ",gm[i],gm[i]-2*sqrt(doldm[i][i]),gm[i]+2*sqrt(doldm[i][i]));
      }*/       }*/
   
   fprintf(ficresprob,"\n%d ",(int)age);          fprintf(ficresprob,"\n%d ",(int)age);
   
   for (i=1; i<=(nlstate+ndeath)*(nlstate+ndeath-1);i++){  
     if (i== 2) fprintf(ficresprob,"%.3e %.3e ",gm[i],doldm[i][i]);  
 if (i== 4) fprintf(ficresprob,"%.3e %.3e ",gm[i],doldm[i][i]);  
   }  
   
           for (i=1; i<=(nlstate+ndeath)*(nlstate+ndeath-1);i++)
             fprintf(ficresprob,"%.3e (%.3e) ",gm[i],doldm[i][i]);
    
         }
       }
     free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath));      free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath));
     free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath));      free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath));
     free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);      free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);
     free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);      free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);
 }    }
  free_vector(xp,1,npar);    free_vector(xp,1,npar);
 fclose(ficresprob);    fclose(ficresprob);
    
 }  }
   
 /******************* Printing html file ***********/  /******************* Printing html file ***********/
Line 2751  while((c=getc(ficpar))=='#' && c!= EOF){ Line 2772  while((c=getc(ficpar))=='#' && c!= EOF){
     if ((s[2][i]==3) && (s[3][i]==2)) s[3][i]=3;      if ((s[2][i]==3) && (s[3][i]==2)) s[3][i]=3;
     if ((s[3][i]==3) && (s[4][i]==2)) s[4][i]=3;      if ((s[3][i]==3) && (s[4][i]==2)) s[4][i]=3;
     }*/      }*/
       /*  for (i=1; i<=imx; i++){
   /* for (i=1; i<=imx; i++){  
      if (s[4][i]==9)  s[4][i]=-1;       if (s[4][i]==9)  s[4][i]=-1;
      printf("%d %.lf %.lf %.lf %.lf/%.lf %.lf/%.lf %.lf/%.lf %d %.lf/%.lf %d %.lf/%.lf %d %.lf/%.lf %d\n",num[i],(covar[1][i]), (covar[2][i]), (weight[i]), (moisnais[i]), (annais[i]), (moisdc[i]), (andc[i]), (mint[1][i]), (anint[1][i]), (s[1][i]),  (mint[2][i]), (anint[2][i]), (s[2][i]),  (mint[3][i]), (anint[3][i]), (s[3][i]),  (mint[4][i]), (anint[4][i]), (s[4][i]));}       printf("%d %.lf %.lf %.lf %.lf/%.lf %.lf/%.lf %.lf/%.lf %d %.lf/%.lf %d %.lf/%.lf %d %.lf/%.lf %d\n",num[i],(covar[1][i]), (covar[2][i]), (weight[i]), (moisnais[i]), (annais[i]), (moisdc[i]), (andc[i]), (mint[1][i]), (anint[1][i]), (s[1][i]),  (mint[2][i]), (anint[2][i]), (s[2][i]),  (mint[3][i]), (anint[3][i]), (s[3][i]),  (mint[4][i]), (anint[4][i]), (s[4][i]));}*/
   */   
     
   /* Calculation of the number of parameter from char model*/    /* Calculation of the number of parameter from char model*/
   Tvar=ivector(1,15);    Tvar=ivector(1,15);
Line 3220  while((c=getc(ficpar))=='#' && c!= EOF){ Line 3240  while((c=getc(ficpar))=='#' && c!= EOF){
     }      }
   }    }
   
   /* varprob(fileres, matcov, p, delti, nlstate, (int) bage, (int) fage,k);*/    varprob(fileres, matcov, p, delti, nlstate, (int) bage, (int) fage,k,Tvar,nbcode, ncodemax);
   
   fclose(ficrespij);    fclose(ficrespij);
   

Removed from v.1.38  
changed lines
  Added in v.1.39


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>