Diff for /imach064/src/imach.c between versions 1.3 and 1.8

version 1.3, 2001/05/02 17:21:42 version 1.8, 2001/05/02 17:54:31
Line 51 Line 51
 #define FILENAMELENGTH 80  #define FILENAMELENGTH 80
 /*#define DEBUG*/  /*#define DEBUG*/
 #define windows  #define windows
   #define GLOCK_ERROR_NOPATH              -1      /* empty path */
   #define GLOCK_ERROR_GETCWD              -2      /* cannot get cwd */
   
 #define MAXPARM 30 /* Maximum number of parameters for the optimization */  #define MAXPARM 30 /* Maximum number of parameters for the optimization */
 #define NPARMAX 64 /* (nlstate+ndeath-1)*nlstate*ncovmodel */  #define NPARMAX 64 /* (nlstate+ndeath-1)*nlstate*ncovmodel */
Line 66 Line 68
   
   
 int nvar;  int nvar;
 static int cptcov;  int cptcovn, cptcovage=0, cptcoveff=0,cptcov;
 int cptcovn;  
 int npar=NPARMAX;  int npar=NPARMAX;
 int nlstate=2; /* Number of live states */  int nlstate=2; /* Number of live states */
 int ndeath=1; /* Number of dead states */  int ndeath=1; /* Number of dead states */
Line 75  int ncovmodel, ncov;     /* Total number Line 76  int ncovmodel, ncov;     /* Total number
   
 int *wav; /* Number of waves for this individuual 0 is possible */  int *wav; /* Number of waves for this individuual 0 is possible */
 int maxwav; /* Maxim number of waves */  int maxwav; /* Maxim number of waves */
   int jmin, jmax; /* min, max spacing between 2 waves */
 int mle, weightopt;  int mle, weightopt;
 int **mw; /* mw[mi][i] is number of the mi wave for this individual */  int **mw; /* mw[mi][i] is number of the mi wave for this individual */
 int **dh; /* dh[mi][i] is number of steps between mi,mi+1 for this individual */  int **dh; /* dh[mi][i] is number of steps between mi,mi+1 for this individual */
   double jmean; /* Mean space between 2 waves */
 double **oldm, **newm, **savm; /* Working pointers to matrices */  double **oldm, **newm, **savm; /* Working pointers to matrices */
 double **oldms, **newms, **savms; /* Fixed working pointers to matrices */  double **oldms, **newms, **savms; /* Fixed working pointers to matrices */
 FILE *fic,*ficpar, *ficparo,*ficres,  *ficrespl, *ficrespij, *ficrest;  FILE *fic,*ficpar, *ficparo,*ficres,  *ficrespl, *ficrespij, *ficrest;
Line 89  FILE *ficreseij; Line 92  FILE *ficreseij;
  FILE  *ficresvpl;   FILE  *ficresvpl;
   char fileresvpl[FILENAMELENGTH];    char fileresvpl[FILENAMELENGTH];
   
   
   
   
 #define NR_END 1  #define NR_END 1
 #define FREE_ARG char*  #define FREE_ARG char*
 #define FTOL 1.0e-10  #define FTOL 1.0e-10
Line 125  int stepm; Line 125  int stepm;
 /* Stepm, step in month: minimum step interpolation*/  /* Stepm, step in month: minimum step interpolation*/
   
 int m,nb;  int m,nb;
 int *num, firstpass=0, lastpass=4,*cod, *ncodemax;  int *num, firstpass=0, lastpass=4,*cod, *ncodemax, *Tage;
 double **agev,*moisnais, *annais, *moisdc, *andc,**mint, **anint;  double **agev,*moisnais, *annais, *moisdc, *andc,**mint, **anint;
 double **pmmij;  double **pmmij;
   
 double *weight;  double *weight;
 int **s; /* Status */  int **s; /* Status */
 double *agedc, **covar, idx;  double *agedc, **covar, idx;
 int **nbcode, *Tcode, *Tvar, **codtab;  int **nbcode, *Tcode, *Tvar, **codtab, **Tvard, *Tprod, cptcovprod, *Tvaraff;
   
 double ftol=FTOL; /* Tolerance for computing Max Likelihood */  double ftol=FTOL; /* Tolerance for computing Max Likelihood */
 double ftolhess; /* Tolerance for computing hessian */  double ftolhess; /* Tolerance for computing hessian */
   
   /**************** split *************************/
   static  int split( char *path, char *dirc, char *name )
   {
      char *s;                             /* pointer */
      int  l1, l2;                         /* length counters */
   
      l1 = strlen( path );                 /* length of path */
      if ( l1 == 0 ) return( GLOCK_ERROR_NOPATH );
      s = strrchr( path, '\\' );           /* find last / */
      if ( s == NULL ) {                   /* no directory, so use current */
   #if     defined(__bsd__)                /* get current working directory */
         extern char       *getwd( );
   
         if ( getwd( dirc ) == NULL ) {
   #else
         extern char       *getcwd( );
   
         if ( getcwd( dirc, FILENAME_MAX ) == NULL ) {
   #endif
            return( GLOCK_ERROR_GETCWD );
         }
         strcpy( name, path );             /* we've got it */
      } else {                             /* strip direcotry from path */
         s++;                              /* after this, the filename */
         l2 = strlen( s );                 /* length of filename */
         if ( l2 == 0 ) return( GLOCK_ERROR_NOPATH );
         strcpy( name, s );                /* save file name */
         strncpy( dirc, path, l1 - l2 );   /* now the directory */
         dirc[l1-l2] = 0;                  /* add zero */
      }
      l1 = strlen( dirc );                 /* length of directory */
      if ( dirc[l1-1] != '\\' ) { dirc[l1] = '\\'; dirc[l1+1] = 0; }
      return( 0 );                         /* we're done */
   }
   
   
 /******************************************/  /******************************************/
   
Line 166  int nbocc(char *s, char occ) Line 201  int nbocc(char *s, char occ)
   
 void cutv(char *u,char *v, char*t, char occ)  void cutv(char *u,char *v, char*t, char occ)
 {  {
   int i,lg,j,p;    int i,lg,j,p=0;
   i=0;    i=0;
   for(j=0; j<=strlen(t)-1; j++) {    for(j=0; j<=strlen(t)-1; j++) {
     if((t[j]!= occ) && (t[j+1]== occ)) p=j+1;      if((t[j]!= occ) && (t[j+1]== occ)) p=j+1;
Line 175  void cutv(char *u,char *v, char*t, char Line 210  void cutv(char *u,char *v, char*t, char
   lg=strlen(t);    lg=strlen(t);
   for(j=0; j<p; j++) {    for(j=0; j<p; j++) {
     (u[j] = t[j]);      (u[j] = t[j]);
     u[p]='\0';  
   }    }
        u[p]='\0';
   
    for(j=0; j<= lg; j++) {     for(j=0; j<= lg; j++) {
     if (j>=(p+1))(v[j-p-1] = t[j]);      if (j>=(p+1))(v[j-p-1] = t[j]);
Line 613  double **prevalim(double **prlim, int nl Line 648  double **prevalim(double **prlim, int nl
     for (j=1;j<=nlstate+ndeath;j++){      for (j=1;j<=nlstate+ndeath;j++){
       oldm[ii][j]=(ii==j ? 1.0 : 0.0);        oldm[ii][j]=(ii==j ? 1.0 : 0.0);
     }      }
   /* Even if hstepm = 1, at least one multiplication by the unit matrix */  
      cov[1]=1.;
    
    /* Even if hstepm = 1, at least one multiplication by the unit matrix */
   for(agefin=age-stepm/YEARM; agefin>=age-delaymax; agefin=agefin-stepm/YEARM){    for(agefin=age-stepm/YEARM; agefin>=age-delaymax; agefin=agefin-stepm/YEARM){
     newm=savm;      newm=savm;
     /* Covariates have to be included here again */      /* Covariates have to be included here again */
     cov[1]=1.;       cov[2]=agefin;
     cov[2]=agefin;   
     if (cptcovn>0){        for (k=1; k<=cptcovn;k++) {
       for (k=1; k<=cptcovn;k++) {cov[2+k]=nbcode[Tvar[k]][codtab[ij][k]];/*printf("Tcode[ij]=%d nbcode=%d\n",Tcode[ij],nbcode[k][Tcode[ij]]);*/}          cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]];
     }          /*printf("ij=%d Tvar[k]=%d nbcode=%d cov=%lf\n",ij, Tvar[k],nbcode[Tvar[k]][codtab[ij][Tvar[k]]],cov[2+k]);*/
         }
         for (k=1; k<=cptcovage;k++)
           cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2];
         for (k=1; k<=cptcovprod;k++)
           cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]];
   
         /*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/
         /*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/
   
     out=matprod2(newm, pmij(pmmij,cov,ncovmodel,x,nlstate),1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm);      out=matprod2(newm, pmij(pmmij,cov,ncovmodel,x,nlstate),1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm);
   
     savm=oldm;      savm=oldm;
Line 756  double ***hpxij(double ***po, int nhstep Line 803  double ***hpxij(double ***po, int nhstep
       /* Covariates have to be included here again */        /* Covariates have to be included here again */
       cov[1]=1.;        cov[1]=1.;
       cov[2]=age+((h-1)*hstepm + (d-1))*stepm/YEARM;        cov[2]=age+((h-1)*hstepm + (d-1))*stepm/YEARM;
       if (cptcovn>0){        for (k=1; k<=cptcovn;k++) cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]];
       for (k=1; k<=cptcovn;k++) cov[2+k]=nbcode[Tvar[k]][codtab[ij][k]];  for (k=1; k<=cptcovage;k++)
     }          cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2];
      for (k=1; k<=cptcovprod;k++)
           cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]];
   
   
       /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/        /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/
       /*printf("h=%d d=%d age=%f cov=%f\n",h,d,age,cov[2]);*/        /*printf("h=%d d=%d age=%f cov=%f\n",h,d,age,cov[2]);*/
       out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath,        out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath,
Line 780  double ***hpxij(double ***po, int nhstep Line 831  double ***hpxij(double ***po, int nhstep
 /*************** log-likelihood *************/  /*************** log-likelihood *************/
 double func( double *x)  double func( double *x)
 {  {
   int i, ii, j, k, mi, d;    int i, ii, j, k, mi, d, kk;
   double l, ll[NLSTATEMAX], cov[NCOVMAX];    double l, ll[NLSTATEMAX], cov[NCOVMAX];
   double **out;    double **out;
   double sw; /* Sum of weights */    double sw; /* Sum of weights */
Line 790  double func( double *x) Line 841  double func( double *x)
   /* We are differentiating ll according to initial status */    /* We are differentiating ll according to initial status */
   /*  for (i=1;i<=npar;i++) printf("%f ", x[i]);*/    /*  for (i=1;i<=npar;i++) printf("%f ", x[i]);*/
   /*for(i=1;i<imx;i++)    /*for(i=1;i<imx;i++)
 printf(" %d\n",s[4][i]);      printf(" %d\n",s[4][i]);
   */    */
     cov[1]=1.;
   
   for(k=1; k<=nlstate; k++) ll[k]=0.;    for(k=1; k<=nlstate; k++) ll[k]=0.;
   for (i=1,ipmx=0, sw=0.; i<=imx; i++){    for (i=1,ipmx=0, sw=0.; i<=imx; i++){
        for(mi=1; mi<= wav[i]-1; mi++){      for (k=1; k<=cptcovn;k++) cov[2+k]=covar[Tvar[k]][i];
       for(mi=1; mi<= wav[i]-1; mi++){
       for (ii=1;ii<=nlstate+ndeath;ii++)        for (ii=1;ii<=nlstate+ndeath;ii++)
         for (j=1;j<=nlstate+ndeath;j++) oldm[ii][j]=(ii==j ? 1.0 : 0.0);          for (j=1;j<=nlstate+ndeath;j++) oldm[ii][j]=(ii==j ? 1.0 : 0.0);
             for(d=0; d<dh[mi][i]; d++){        for(d=0; d<dh[mi][i]; d++){
         newm=savm;          newm=savm;
           cov[1]=1.;          cov[2]=agev[mw[mi][i]][i]+d*stepm/YEARM;
           cov[2]=agev[mw[mi][i]][i]+d*stepm/YEARM;          for (kk=1; kk<=cptcovage;kk++) {
           if (cptcovn>0){            cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2];
             for (k=1; k<=cptcovn;k++) cov[2+k]=covar[1+k-1][i];          }
             }         
           out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,          out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,
                        1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));                       1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));
           savm=oldm;          savm=oldm;
           oldm=newm;          oldm=newm;
          
          
       } /* end mult */        } /* end mult */
           
       lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);        lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);
       /* printf(" %f ",out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/        /* printf(" %f ",out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/
       ipmx +=1;        ipmx +=1;
Line 1113  void  freqsummary(char fileres[], int ag Line 1166  void  freqsummary(char fileres[], int ag
   freq= ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,agemin,agemax+3);    freq= ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,agemin,agemax+3);
   j1=0;    j1=0;
   
   j=cptcovn;    j=cptcoveff;
   if (cptcovn<1) {j=1;ncodemax[1]=1;}    if (cptcovn<1) {j=1;ncodemax[1]=1;}
   
   for(k1=1; k1<=j;k1++){    for(k1=1; k1<=j;k1++){
    for(i1=1; i1<=ncodemax[k1];i1++){     for(i1=1; i1<=ncodemax[k1];i1++){
        j1++;         j1++;
          /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);
            scanf("%d", i);*/
         for (i=-1; i<=nlstate+ndeath; i++)            for (i=-1; i<=nlstate+ndeath; i++)  
          for (jk=-1; jk<=nlstate+ndeath; jk++)             for (jk=-1; jk<=nlstate+ndeath; jk++)  
            for(m=agemin; m <= agemax+3; m++)             for(m=agemin; m <= agemax+3; m++)
Line 1128  void  freqsummary(char fileres[], int ag Line 1182  void  freqsummary(char fileres[], int ag
        for (i=1; i<=imx; i++) {         for (i=1; i<=imx; i++) {
          bool=1;           bool=1;
          if  (cptcovn>0) {           if  (cptcovn>0) {
            for (z1=1; z1<=cptcovn; z1++)             for (z1=1; z1<=cptcoveff; z1++)
              if (covar[Tvar[z1]][i]!= nbcode[Tvar[z1]][codtab[j1][z1]]) bool=0;               if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtab[j1][z1]])
                  bool=0;
          }           }
           if (bool==1) {            if (bool==1) {
            for(m=firstpass; m<=lastpass-1; m++){             for(m=firstpass; m<=lastpass-1; m++){
Line 1141  void  freqsummary(char fileres[], int ag Line 1196  void  freqsummary(char fileres[], int ag
          }           }
        }         }
         if  (cptcovn>0) {          if  (cptcovn>0) {
          fprintf(ficresp, "\n#Variable");           fprintf(ficresp, "\n#********** Variable ");
          for (z1=1; z1<=cptcovn; z1++) fprintf(ficresp, " V%d=%d",Tvar[z1],nbcode[Tvar[z1]][codtab[j1][z1]]);           for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
        }         fprintf(ficresp, "**********\n#");
        fprintf(ficresp, "\n#");          }
        for(i=1; i<=nlstate;i++)         for(i=1; i<=nlstate;i++)
          fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i);           fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i);
        fprintf(ficresp, "\n");         fprintf(ficresp, "\n");
Line 1212  void  concatwav(int wav[], int **dh, int Line 1267  void  concatwav(int wav[], int **dh, int
      */       */
   
   int i, mi, m;    int i, mi, m;
   int j, k=0,jk, ju, jl,jmin=1e+5, jmax=-1;    /* int j, k=0,jk, ju, jl,jmin=1e+5, jmax=-1;
 float sum=0.;       double sum=0., jmean=0.;*/
   
   int j, k=0,jk, ju, jl;
        double sum=0.;
   jmin=1e+5;
    jmax=-1;
   jmean=0.;
   for(i=1; i<=imx; i++){    for(i=1; i<=imx; i++){
     mi=0;      mi=0;
     m=firstpass;      m=firstpass;
Line 1245  float sum=0.; Line 1305  float sum=0.;
       else{        else{
         if (s[mw[mi+1][i]][i] > nlstate) {          if (s[mw[mi+1][i]][i] > nlstate) {
           j= rint(agedc[i]*12-agev[mw[mi][i]][i]*12);            j= rint(agedc[i]*12-agev[mw[mi][i]][i]*12);
           if(j=0) j=1;  /* Survives at least one month after exam */            /*if ((j<0) || (j>28)) printf("j=%d num=%d ",j,i);*/
             if(j==0) j=1;  /* Survives at least one month after exam */
             k=k+1;
             if (j >= jmax) jmax=j;
             else if (j <= jmin)jmin=j;
             sum=sum+j;
         }          }
         else{          else{
           j= rint( (agev[mw[mi+1][i]][i]*12 - agev[mw[mi][i]][i]*12));            j= rint( (agev[mw[mi+1][i]][i]*12 - agev[mw[mi][i]][i]*12));
             /*if ((j<0) || (j>28)) printf("j=%d num=%d ",j,i);*/
           k=k+1;            k=k+1;
           if (j >= jmax) jmax=j;            if (j >= jmax) jmax=j;
           else if (j <= jmin)jmin=j;            else if (j <= jmin)jmin=j;
Line 1266  float sum=0.; Line 1332  float sum=0.;
       }        }
     }      }
   }    }
   printf("Delay (in months) between two waves Min=%d Max=%d Mean=%f\n\n ",jmin, jmax,sum/k);    jmean=sum/k;
     printf("Delay (in months) between two waves Min=%d Max=%d Mean=%f\n\n ",jmin, jmax,jmean);
 }  }
 /*********** Tricode ****************************/  /*********** Tricode ****************************/
 void tricode(int *Tvar, int **nbcode, int imx)  void tricode(int *Tvar, int **nbcode, int imx)
 {  {
   int Ndum[80],ij, k, j, i;    int Ndum[20],ij=1, k, j, i;
   int cptcode=0;    int cptcode=0;
   for (k=0; k<79; k++) Ndum[k]=0;    cptcoveff=0;
    
     for (k=0; k<19; k++) Ndum[k]=0;
   for (k=1; k<=7; k++) ncodemax[k]=0;    for (k=1; k<=7; k++) ncodemax[k]=0;
    
   for (j=1; j<=cptcovn; j++) {    for (j=1; j<=(cptcovn+2*cptcovprod); j++) {
     for (i=1; i<=imx; i++) {      for (i=1; i<=imx; i++) {
       ij=(int)(covar[Tvar[j]][i]);        ij=(int)(covar[Tvar[j]][i]);
       Ndum[ij]++;        Ndum[ij]++;
         /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/
       if (ij > cptcode) cptcode=ij;        if (ij > cptcode) cptcode=ij;
     }      }
     /*printf("cptcode=%d cptcovn=%d ",cptcode,cptcovn);*/  
     for (i=0; i<=cptcode; i++) {      for (i=0; i<=cptcode; i++) {
       if(Ndum[i]!=0) ncodemax[j]++;        if(Ndum[i]!=0) ncodemax[j]++;
     }      }
    
     ij=1;      ij=1;
   
   
     for (i=1; i<=ncodemax[j]; i++) {      for (i=1; i<=ncodemax[j]; i++) {
       for (k=0; k<=79; 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;
           ij++;            ij++;
Line 1297  void tricode(int *Tvar, int **nbcode, in Line 1368  void tricode(int *Tvar, int **nbcode, in
         if (ij > ncodemax[j]) break;          if (ij > ncodemax[j]) break;
       }          }  
     }      }
   }      }  
   
   }   for (k=0; k<19; k++) Ndum[k]=0;
   
    for (i=1; i<=ncovmodel; i++) {
         ij=Tvar[i];
         Ndum[ij]++;
       }
   
    ij=1;
    for (i=1; i<=10; i++) {
      if((Ndum[i]!=0) && (i<=ncov)){
        Tvaraff[ij]=i;
        ij++;
      }
    }
    
       cptcoveff=ij-1;
   }
   
 /*********** Health Expectancies ****************/  /*********** Health Expectancies ****************/
   
Line 1552  void varprevlim(char fileres[], double * Line 1639  void varprevlim(char fileres[], double *
 int main()  int main()
 {  {
   
   int i,j, k, n=MAXN,iter,m,size,cptcode, aaa, cptcod;    int i,j, k, n=MAXN,iter,m,size,cptcode, cptcod;
   double agedeb, agefin,hf;    double agedeb, agefin,hf;
   double agemin=1.e20, agemax=-1.e20;    double agemin=1.e20, agemax=-1.e20;
   
Line 1573  int main() Line 1660  int main()
   int sdeb, sfin; /* Status at beginning and end */    int sdeb, sfin; /* Status at beginning and end */
   int c,  h , cpt,l;    int c,  h , cpt,l;
   int ju,jl, mi;    int ju,jl, mi;
   int i1,j1, k1,jk,aa,bb, stepsize;    int i1,j1, k1,k2,k3,jk,aa,bb, stepsize, ij;
   int jnais,jdc,jint4,jint1,jint2,jint3,**outcome,**adl,*tab;    int jnais,jdc,jint4,jint1,jint2,jint3,**outcome,**adl,*tab;
     
   int hstepm, nhstepm;    int hstepm, nhstepm;
Line 1591  int main() Line 1678  int main()
   double *epj, vepp;    double *epj, vepp;
   char version[80]="Imach version 62c, May 1999, INED-EUROREVES ";    char version[80]="Imach version 62c, May 1999, INED-EUROREVES ";
   char *alph[]={"a","a","b","c","d","e"}, str[4];    char *alph[]={"a","a","b","c","d","e"}, str[4];
   
   char z[1]="c", occ;    char z[1]="c", occ;
 #include <sys/time.h>  #include <sys/time.h>
 #include <time.h>  #include <time.h>
Line 1601  int main() Line 1689  int main()
   gettimeofday(&start_time, (struct timezone*)0); */ /* at first time */    gettimeofday(&start_time, (struct timezone*)0); */ /* at first time */
   
   
   printf("\nIMACH, Version 0.63");    printf("\nIMACH, Version 0.64a");
   printf("\nEnter the parameter file name: ");    printf("\nEnter the parameter file name: ");
   
 #ifdef windows  #ifdef windows
   scanf("%s",pathtot);    scanf("%s",pathtot);
   getcwd(pathcd, size);    getcwd(pathcd, size);
   cutv(path,optionfile,pathtot,'\\');    /*cygwin_split_path(pathtot,path,optionfile);
       printf("pathtot=%s, path=%s, optionfile=%s\n",pathtot,path,optionfile);*/
     /* cutv(path,optionfile,pathtot,'\\');*/
   
   split(pathtot, path,optionfile);
   chdir(path);    chdir(path);
   replace(pathc,path);    replace(pathc,path);
 #endif  #endif
Line 1646  int main() Line 1738  int main()
   printf("title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncov=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=%s\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncov, nlstate,ndeath, maxwav, mle, weightopt,model);    printf("title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncov=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=%s\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncov, nlstate,ndeath, maxwav, mle, weightopt,model);
   fprintf(ficparo,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncov=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=%s\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncov,nlstate,ndeath,maxwav, mle, weightopt,model);    fprintf(ficparo,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncov=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=%s\n", title, datafile, lastobs, firstpass,lastpass,ftol,stepm,ncov,nlstate,ndeath,maxwav, mle, weightopt,model);
   
   covar=matrix(1,NCOVMAX,1,n);        covar=matrix(0,NCOVMAX,1,n);
   if (strlen(model)<=1) cptcovn=0;    cptcovn=0;
   else {    if (strlen(model)>1) cptcovn=nbocc(model,'+')+1;
     j=0;  
     j=nbocc(model,'+');  
     cptcovn=j+1;  
   }  
   
   ncovmodel=2+cptcovn;    ncovmodel=2+cptcovn;
   nvar=ncovmodel-1; /* Suppressing age as a basic covariate */    nvar=ncovmodel-1; /* Suppressing age as a basic covariate */
Line 1744  int main() Line 1832  int main()
   printf("\n");    printf("\n");
   
   
    if(mle==1){  
     /*-------- data file ----------*/      /*-------- data file ----------*/
     if((ficres =fopen(fileres,"w"))==NULL) {      if((ficres =fopen(fileres,"w"))==NULL) {
       printf("Problem with resultfile: %s\n", fileres);goto end;        printf("Problem with resultfile: %s\n", fileres);goto end;
Line 1797  int main() Line 1884  int main()
         }          }
         num[i]=atol(stra);          num[i]=atol(stra);
   
         /*printf("%d %.lf %.lf %.lf %.lf/%.lf %.lf/%.lf %.lf/%.lf %d %.lf/%.lf %d %.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]),  (mint[5][i]), (anint[5][i]), (s[5][i]),  (mint[6][i]), (anint[6][i]), (s[6][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]));*/
   
         i=i+1;          i=i+1;
       }        }
Line 1807  int main() Line 1894  int main()
   imx=i-1; /* Number of individuals */    imx=i-1; /* Number of individuals */
   
   /* Calculation of the number of parameter from char model*/    /* Calculation of the number of parameter from char model*/
   Tvar=ivector(1,8);        Tvar=ivector(1,15);
     Tprod=ivector(1,15);
     Tvaraff=ivector(1,15);
     Tvard=imatrix(1,15,1,2);
     Tage=ivector(1,15);      
         
   if (strlen(model) >1){    if (strlen(model) >1){
     j=0;      j=0, j1=0, k1=1, k2=1;
     j=nbocc(model,'+');      j=nbocc(model,'+');
       j1=nbocc(model,'*');
     cptcovn=j+1;      cptcovn=j+1;
       cptcovprod=j1;
      
         
     strcpy(modelsav,model);      strcpy(modelsav,model);
     if (j==0) {      if ((strcmp(model,"age")==0) || (strcmp(model,"age*age")==0)){
       cutv(stra,strb,modelsav,'V'); Tvar[1]=atoi(strb);        printf("Error. Non available option model=%s ",model);
         goto end;
     }      }
     else {     
       for(i=j; i>=1;i--){      for(i=(j+1); i>=1;i--){
         cutv(stra,strb,modelsav,'+');        cutv(stra,strb,modelsav,'+');
         if (strchr(strb,'*')) {        if (nbocc(modelsav,'+')==0) strcpy(strb,modelsav);
           cutv(strd,strc,strb,'*');        /*      printf("i=%d a=%s b=%s sav=%s\n",i, stra,strb,modelsav);*/
           cutv(strb,stre,strc,'V');Tvar[i+1]=ncov+1;        /*scanf("%d",i);*/
         if (strchr(strb,'*')) {
           cutv(strd,strc,strb,'*');
           if (strcmp(strc,"age")==0) {
             cptcovprod--;
             cutv(strb,stre,strd,'V');
             Tvar[i]=atoi(stre);
             cptcovage++;
               Tage[cptcovage]=i;
               /*printf("stre=%s ", stre);*/
           }
           else if (strcmp(strd,"age")==0) {
             cptcovprod--;
             cutv(strb,stre,strc,'V');
             Tvar[i]=atoi(stre);
             cptcovage++;
             Tage[cptcovage]=i;
           }
           else {
             cutv(strb,stre,strc,'V');
             Tvar[i]=ncov+k1;
           cutv(strb,strc,strd,'V');            cutv(strb,strc,strd,'V');
             Tprod[k1]=i;
             Tvard[k1][1]=atoi(strc);
             Tvard[k1][2]=atoi(stre);
             Tvar[cptcovn+k2]=Tvard[k1][1];
             Tvar[cptcovn+k2+1]=Tvard[k1][2];
           for (k=1; k<=lastobs;k++)            for (k=1; k<=lastobs;k++)
             covar[ncov+1][k]=covar[atoi(stre)][k]*covar[atoi(strc)][k];              covar[ncov+k1][k]=covar[atoi(stre)][k]*covar[atoi(strc)][k];
         }            k1++;
         else {cutv(strd,strc,strb,'V');            k2=k2+2;
         Tvar[i+1]=atoi(strc);  
         }          }
         strcpy(modelsav,stra);    
       }        }
       cutv(strd,strc,stra,'V');        else {
       Tvar[1]=atoi(strc);          /*printf("d=%s c=%s b=%s\n", strd,strc,strb);*/
          /*  scanf("%d",i);*/
         cutv(strd,strc,strb,'V');
         Tvar[i]=atoi(strc);
         }
         strcpy(modelsav,stra);  
         /*printf("a=%s b=%s sav=%s\n", stra,strb,modelsav);
           scanf("%d",i);*/
     }      }
   }  }
   /*printf("tvar=%d ",Tvar[1]);   
   scanf("%d ",i);*/    /*printf("tvar1=%d tvar2=%d tvar3=%d cptcovage=%d Tage=%d",Tvar[1],Tvar[2],Tvar[3],cptcovage,Tage[1]);
     printf("cptcovprod=%d ", cptcovprod);
     scanf("%d ",i);*/
     fclose(fic);      fclose(fic);
   
       /*  if(mle==1){*/
     if (weightopt != 1) { /* Maximisation without weights*/      if (weightopt != 1) { /* Maximisation without weights*/
       for(i=1;i<=n;i++) weight[i]=1.0;        for(i=1;i<=n;i++) weight[i]=1.0;
     }      }
Line 1855  int main() Line 1983  int main()
             if(agedc[i]>0)              if(agedc[i]>0)
               if(moisdc[i]!=99 && andc[i]!=9999)                if(moisdc[i]!=99 && andc[i]!=9999)
               agev[m][i]=agedc[i];                agev[m][i]=agedc[i];
             else{              else {
                 if (andc[i]!=9999){
               printf("Warning negative age at death: %d line:%d\n",num[i],i);                printf("Warning negative age at death: %d line:%d\n",num[i],i);
               agev[m][i]=-1;                agev[m][i]=-1;
                 }
             }              }
           }            }
           else if(s[m][i] !=9){ /* Should no more exist */            else if(s[m][i] !=9){ /* Should no more exist */
Line 1914  printf("Total number of individuals= %d, Line 2044  printf("Total number of individuals= %d,
       concatwav(wav, dh, mw, s, agedc, agev,  firstpass, lastpass, imx, nlstate, stepm);        concatwav(wav, dh, mw, s, agedc, agev,  firstpass, lastpass, imx, nlstate, stepm);
   
   
 Tcode=ivector(1,100);        Tcode=ivector(1,100);
    nbcode=imatrix(1,nvar,1,8);          nbcode=imatrix(0,NCOVMAX,0,NCOVMAX);
    ncodemax[1]=1;        ncodemax[1]=1;
    if (cptcovn > 0) tricode(Tvar,nbcode,imx);        if (cptcovn > 0) tricode(Tvar,nbcode,imx);
         
    codtab=imatrix(1,100,1,10);     codtab=imatrix(1,100,1,10);
    h=0;     h=0;
    m=pow(2,cptcovn);     m=pow(2,cptcoveff);
     
    for(k=1;k<=cptcovn; k++){     for(k=1;k<=cptcoveff; k++){
      for(i=1; i <=(m/pow(2,k));i++){       for(i=1; i <=(m/pow(2,k));i++){
        for(j=1; j <= ncodemax[k]; j++){         for(j=1; j <= ncodemax[k]; j++){
          for(cpt=1; cpt <=(m/pow(2,cptcovn+1-k)); cpt++){           for(cpt=1; cpt <=(m/pow(2,cptcoveff+1-k)); cpt++){
            h++;             h++;
            if (h>m) h=1;codtab[h][k]=j;             if (h>m) h=1;codtab[h][k]=j;
          }           }
Line 1934  Tcode=ivector(1,100); Line 2064  Tcode=ivector(1,100);
      }       }
    }     }
   
   
    /*for(i=1; i <=m ;i++){     /*for(i=1; i <=m ;i++){
      for(k=1; k <=cptcovn; k++){       for(k=1; k <=cptcovn; k++){
        printf("i=%d k=%d %d ",i,k,codtab[i][k]);         printf("i=%d k=%d %d %d",i,k,codtab[i][k], cptcoveff);
      }       }
      printf("\n");       printf("\n");
    }*/     }
    /*scanf("%d",i);*/     scanf("%d",i);*/
         
    /* Calculates basic frequencies. Computes observed prevalence at single age     /* Calculates basic frequencies. Computes observed prevalence at single age
        and prints on file fileres'p'. */         and prints on file fileres'p'. */
   freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvar,nbcode, ncodemax);    freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvar,nbcode, ncodemax);
   
   
   /*scanf("%d ",i);*/  
   
   
     pmmij= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */      pmmij= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
     oldms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */      oldms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
     newms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */      newms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
Line 1959  Tcode=ivector(1,100); Line 2086  Tcode=ivector(1,100);
     /* For Powell, parameters are in a vector p[] starting at p[1]      /* For Powell, parameters are in a vector p[] starting at p[1]
        so we point p on param[1][1] so that p[1] maps on param[1][1][1] */         so we point p on param[1][1] so that p[1] maps on param[1][1][1] */
     p=param[1][1]; /* *(*(*(param +1)+1)+0) */      p=param[1][1]; /* *(*(*(param +1)+1)+0) */
      
     mlikeli(ficres,p, npar, ncovmodel, nlstate, ftol, func);  
   
       if(mle==1){
       mlikeli(ficres,p, npar, ncovmodel, nlstate, ftol, func);
       }
         
     /*--------- results files --------------*/      /*--------- results files --------------*/
     fprintf(ficres,"\ntitle=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncov=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=%s\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncov, nlstate, ndeath, maxwav, mle,weightopt,model);      fprintf(ficres,"\ntitle=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncov=%d nlstate=%d ndeath=%d maxwav=%d mle=%d weight=%d\nmodel=%s\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncov, nlstate, ndeath, maxwav, mle,weightopt,model);
Line 1985  Tcode=ivector(1,100); Line 2113  Tcode=ivector(1,100);
          }           }
      }       }
    }     }
    if(mle==1){
     /* Computing hessian and covariance matrix */      /* Computing hessian and covariance matrix */
     ftolhess=ftol; /* Usually correct */      ftolhess=ftol; /* Usually correct */
     hesscov(matcov, p, npar, delti, ftolhess, func);      hesscov(matcov, p, npar, delti, ftolhess, func);
    }
     fprintf(ficres,"# Scales\n");      fprintf(ficres,"# Scales\n");
     printf("# Scales\n");      printf("# Scales\n");
      for(i=1,jk=1; i <=nlstate; i++){       for(i=1,jk=1; i <=nlstate; i++){
Line 2043  Tcode=ivector(1,100); Line 2172  Tcode=ivector(1,100);
   
     fprintf(ficres,"# agemin agemax for life expectancy, bage fage (if mle==0 ie no data nor Max likelihood).\n");      fprintf(ficres,"# agemin agemax for life expectancy, bage fage (if mle==0 ie no data nor Max likelihood).\n");
     fprintf(ficres,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f\n",agemin,agemax,bage,fage);      fprintf(ficres,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f\n",agemin,agemax,bage,fage);
   
      
 /*------------ gnuplot -------------*/  /*------------ gnuplot -------------*/
 chdir(pathcd);  chdir(pathcd);
   if((ficgp=fopen("graph.plt","w"))==NULL) {    if((ficgp=fopen("graph.plt","w"))==NULL) {
Line 2051  chdir(pathcd); Line 2182  chdir(pathcd);
 #ifdef windows  #ifdef windows
   fprintf(ficgp,"cd \"%s\" \n",pathc);    fprintf(ficgp,"cd \"%s\" \n",pathc);
 #endif  #endif
 m=pow(2,cptcovn);  m=pow(2,cptcoveff);
     
  /* 1eme*/   /* 1eme*/
   for (cpt=1; cpt<= nlstate ; cpt ++) {    for (cpt=1; cpt<= nlstate ; cpt ++) {
Line 2118  fprintf(ficgp,"\nset out \"v%s%d%d.gif\" Line 2249  fprintf(ficgp,"\nset out \"v%s%d%d.gif\"
     
   /*3eme*/    /*3eme*/
   
    for (k1=1; k1<= m ; k1 ++) {    for (k1=1; k1<= m ; k1 ++) {
     for (cpt=1; cpt<= nlstate ; cpt ++) {      for (cpt=1; cpt<= nlstate ; cpt ++) {
       k=2+nlstate*(cpt-1);        k=2+nlstate*(cpt-1);
       fprintf(ficgp,"set ter gif small size 400,300\nplot [%.f:%.f] \"e%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",agemin,fage,fileres,k1-1,k1-1,k,cpt);        fprintf(ficgp,"set ter gif small size 400,300\nplot [%.f:%.f] \"e%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",agemin,fage,fileres,k1-1,k1-1,k,cpt);
Line 2127  fprintf(ficgp,"\nset out \"v%s%d%d.gif\" Line 2258  fprintf(ficgp,"\nset out \"v%s%d%d.gif\"
       }        }
       fprintf(ficgp,"\nset out \"exp%s%d%d.gif\" \nreplot\n\n",strtok(optionfile, "."),cpt,k1);        fprintf(ficgp,"\nset out \"exp%s%d%d.gif\" \nreplot\n\n",strtok(optionfile, "."),cpt,k1);
     }      }
    }    }
     
   /* CV preval stat */    /* CV preval stat */
     for (k1=1; k1<= m ; k1 ++) {    for (k1=1; k1<= m ; k1 ++) {
     for (cpt=1; cpt<nlstate ; cpt ++) {      for (cpt=1; cpt<nlstate ; cpt ++) {
       k=3;        k=3;
       fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \nset ter gif small size 400,300\nplot [%.f:%.f] \"pij%s\" u ($1==%d ? ($3):1/0):($%d/($%d",agemin,agemax,fileres,k1,k+cpt+1,k+1);        fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \nset ter gif small size 400,300\nplot [%.f:%.f] \"pij%s\" u ($1==%d ? ($3):1/0):($%d/($%d",agemin,agemax,fileres,k1,k+cpt+1,k+1);
Line 2148  fprintf(ficgp,"\nset out \"v%s%d%d.gif\" Line 2279  fprintf(ficgp,"\nset out \"v%s%d%d.gif\"
       fprintf(ficgp,"set out \"p%s%d%d.gif\" \nreplot\n\n",strtok(optionfile, "."),cpt,k1);        fprintf(ficgp,"set out \"p%s%d%d.gif\" \nreplot\n\n",strtok(optionfile, "."),cpt,k1);
     }      }
   }    }
    
   /* proba elementaires */    /* proba elementaires */
   for(i=1,jk=1; i <=nlstate; i++){     for(i=1,jk=1; i <=nlstate; i++){
     for(k=1; k <=(nlstate+ndeath); k++){      for(k=1; k <=(nlstate+ndeath); k++){
       if (k != i) {        if (k != i) {
         /*  fprintf(ficgp,"%1d%1d ",i,k);*/  
         for(j=1; j <=ncovmodel; j++){          for(j=1; j <=ncovmodel; j++){
           fprintf(ficgp,"%s%1d%1d=%f ",alph[j],i,k,p[jk]);            /*fprintf(ficgp,"%s%1d%1d=%f ",alph[j],i,k,p[jk]);*/
             /*fprintf(ficgp,"%s",alph[1]);*/
             fprintf(ficgp,"p%d=%f ",jk,p[jk]);
           jk++;            jk++;
           fprintf(ficgp,"\n");            fprintf(ficgp,"\n");
         }          }
       }        }
     }      }
   }      }
   
   for(jk=1; jk <=m; jk++) {    for(jk=1; jk <=m; jk++) {
   fprintf(ficgp,"\nset ter gif small size 400,300\nset log y\nplot  [%.f:%.f] ",agemin,agemax);    fprintf(ficgp,"\nset ter gif small size 400,300\nset log y\nplot  [%.f:%.f] ",agemin,agemax);
   for(i=1; i <=nlstate; i++) {     i=1;
     for(k=1; k <=(nlstate+ndeath); k++){     for(k2=1; k2<=nlstate; k2++) {
       if (k != i) {       k3=i;
         fprintf(ficgp," exp(a%d%d+b%d%d*x",i,k,i,k);       for(k=1; k<=(nlstate+ndeath); k++) {
         for(j=3; j <=ncovmodel; j++)         if (k != k2){
           fprintf(ficgp,"+%s%d%d*%d",alph[j],i,k,nbcode[Tvar[j-2]][codtab[jk][j-2]]);          fprintf(ficgp," exp(p%d+p%d*x",i,i+1);
         fprintf(ficgp,")/(1");  ij=1;
         for(k1=1; k1 <=(nlstate+ndeath); k1++)          for(j=3; j <=ncovmodel; j++) {
           if (k1 != i) {            if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) {
             fprintf(ficgp,"+exp(a%d%d+b%d%d*x",i,k1,i,k1);              fprintf(ficgp,"+p%d*%d*x",i+j-1,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]);
             for(j=3; j <=ncovmodel; j++)              ij++;
               fprintf(ficgp,"+%s%d%d*%d",alph[j],i,k,nbcode[Tvar[j-2]][codtab[jk][j-2]]);  
             fprintf(ficgp,")");  
           }            }
         fprintf(ficgp,") t \"p%d%d\" ", i,k);            else
       if ((i+k)!= (nlstate*2+ndeath)) fprintf(ficgp,",");            fprintf(ficgp,"+p%d*%d",i+j-1,nbcode[Tvar[j-2]][codtab[jk][j-2]]);
       }          }
     }            fprintf(ficgp,")/(1");
   }         
 fprintf(ficgp,"\nset out \"pe%s%d.gif\" \nreplot\n\n",strtok(optionfile, "."),jk);            for(k1=1; k1 <=nlstate; k1++){  
             fprintf(ficgp,"+exp(p%d+p%d*x",k3+(k1-1)*ncovmodel,k3+(k1-1)*ncovmodel+1);
   ij=1;
             for(j=3; j <=ncovmodel; j++){
             if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) {
               fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]);
               ij++;
             }
             else
               fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][j-2]]);
             }
             fprintf(ficgp,")");
           }
           fprintf(ficgp,") t \"p%d%d\" ", k2,k);
           if ((k+k2)!= (nlstate*2+ndeath)) fprintf(ficgp,",");
           i=i+ncovmodel;
          }
        }
      }
      fprintf(ficgp,"\nset out \"pe%s%d.gif\" \nreplot\n\n",strtok(optionfile, "."),jk);
   }    }
       
  fclose(ficgp);    fclose(ficgp);
      
     chdir(path);  chdir(path);
     free_matrix(agev,1,maxwav,1,imx);      free_matrix(agev,1,maxwav,1,imx);
     free_ivector(wav,1,imx);      free_ivector(wav,1,imx);
     free_imatrix(dh,1,lastpass-firstpass+1,1,imx);      free_imatrix(dh,1,lastpass-firstpass+1,1,imx);
Line 2203  fprintf(ficgp,"\nset out \"pe%s%d.gif\" Line 2353  fprintf(ficgp,"\nset out \"pe%s%d.gif\"
     /*free_matrix(covar,1,NCOVMAX,1,n);*/      /*free_matrix(covar,1,NCOVMAX,1,n);*/
     fclose(ficparo);      fclose(ficparo);
     fclose(ficres);      fclose(ficres);
    }      /*  }*/
         
    /*________fin mle=1_________*/     /*________fin mle=1_________*/
         
Line 2219  fprintf(ficgp,"\nset out \"pe%s%d.gif\" Line 2369  fprintf(ficgp,"\nset out \"pe%s%d.gif\"
   }    }
   ungetc(c,ficpar);    ungetc(c,ficpar);
     
   
   fscanf(ficpar,"agemin=%lf agemax=%lf bage=%lf fage=%lf\n",&agemin,&agemax, &bage, &fage);    fscanf(ficpar,"agemin=%lf agemax=%lf bage=%lf fage=%lf\n",&agemin,&agemax, &bage, &fage);
   printf("agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f\n",agemin,agemax, bage, fage);    printf("agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f\n",agemin,agemax, bage, fage);
   fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f\n",agemin,agemax,bage,fage);    fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f\n",agemin,agemax,bage,fage);
Line 2229  fprintf(ficgp,"\nset out \"pe%s%d.gif\" Line 2378  fprintf(ficgp,"\nset out \"pe%s%d.gif\"
     printf("Problem with index.htm \n");goto end;      printf("Problem with index.htm \n");goto end;
   }    }
   
  fprintf(fichtm,"<body><ul> Imach, Version 0.63<hr> <li>Outputs files<br><br>\n   fprintf(fichtm,"<body><ul> <font size=\"6\">Imach, Version 0.64a </font> <hr size=\"2\" color=\"#EC5E5E\">
   Titre=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=%s<br>
   Total number of observations=%d <br>
   Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>
   <hr  size=\"2\" color=\"#EC5E5E\">
   <li>Outputs files<br><br>\n
         - Observed prevalence in each state: <a href=\"p%s\">p%s</a> <br>\n          - Observed prevalence in each state: <a href=\"p%s\">p%s</a> <br>\n
 - Estimated parameters and the covariance matrix: <a href=\"%s\">%s</a> <br>  - Estimated parameters and the covariance matrix: <a href=\"%s\">%s</a> <br>
         - Stationary prevalence in each state: <a href=\"pl%s\">pl%s</a> <br>          - Stationary prevalence in each state: <a href=\"pl%s\">pl%s</a> <br>
Line 2238  fprintf(ficgp,"\nset out \"pe%s%d.gif\" Line 2392  fprintf(ficgp,"\nset out \"pe%s%d.gif\"
         - Life expectancies by age and initial health status: <a href=\"e%s\">e%s</a> <br>          - Life expectancies by age and initial health status: <a href=\"e%s\">e%s</a> <br>
         - Variances of life expectancies by age and initial health status: <a href=\"v%s\">v%s</a><br>          - Variances of life expectancies by age and initial health status: <a href=\"v%s\">v%s</a><br>
         - Health expectancies with their variances: <a href=\"t%s\">t%s</a> <br>          - Health expectancies with their variances: <a href=\"t%s\">t%s</a> <br>
         - Standard deviation of stationary prevalences: <a href=\"vpl%s\">vpl%s</a> <br><br>",fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres);          - Standard deviation of stationary prevalences: <a href=\"vpl%s\">vpl%s</a> <br><br>",title,datafile,firstpass,lastpass,stepm, weightopt,model,imx,jmin,jmax,jmean,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres,fileres);
   
  fprintf(fichtm," <li>Graphs</li>\n<p>");   fprintf(fichtm," <li>Graphs</li><p>");
   
  m=cptcovn;   m=cptcoveff;
  if (cptcovn < 1) {m=1;ncodemax[1]=1;}   if (cptcovn < 1) {m=1;ncodemax[1]=1;}
   
  j1=0;   j1=0;
Line 2250  fprintf(ficgp,"\nset out \"pe%s%d.gif\" Line 2404  fprintf(ficgp,"\nset out \"pe%s%d.gif\"
    for(i1=1; i1<=ncodemax[k1];i1++){     for(i1=1; i1<=ncodemax[k1];i1++){
        j1++;         j1++;
        if (cptcovn > 0) {         if (cptcovn > 0) {
          fprintf(fichtm,"<hr>************ Results for covariates");           fprintf(fichtm,"<hr  size=\"2\" color=\"#EC5E5E\">************ Results for covariates");
          for (cpt=1; cpt<=cptcovn;cpt++)           for (cpt=1; cpt<=cptcoveff;cpt++)
            fprintf(fichtm," V%d=%d ",Tvar[cpt],nbcode[Tvar[cpt]][codtab[j1][cpt]]);             fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtab[j1][cpt]]);
          fprintf(fichtm," ************\n<hr>");           fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
        }         }
        fprintf(fichtm,"<br>- Probabilities: pe%s%d.gif<br>         fprintf(fichtm,"<br>- Probabilities: pe%s%d.gif<br>
 <img src=\"pe%s%d.gif\">",strtok(optionfile, "."),j1,strtok(optionfile, "."),j1);      <img src=\"pe%s%d.gif\">",strtok(optionfile, "."),j1,strtok(optionfile, "."),j1);    
Line 2268  interval) in state (%d): v%s%d%d.gif <br Line 2422  interval) in state (%d): v%s%d%d.gif <br
      }       }
      for(cpt=1; cpt<=nlstate;cpt++) {       for(cpt=1; cpt<=nlstate;cpt++) {
         fprintf(fichtm,"\n<br>- Health life expectancies by age and initial health state (%d): exp%s%d%d.gif <br>          fprintf(fichtm,"\n<br>- Health life expectancies by age and initial health state (%d): exp%s%d%d.gif <br>
 <img src=\"ex%s%d%d.gif\">",cpt,strtok(optionfile, "."),cpt,j1,strtok(optionfile, "."),cpt,j1);  <img src=\"exp%s%d%d.gif\">",cpt,strtok(optionfile, "."),cpt,j1,strtok(optionfile, "."),cpt,j1);
      }       }
      fprintf(fichtm,"\n<br>- Total life expectancy by age and       fprintf(fichtm,"\n<br>- Total life expectancy by age and
 health expectancies in states (1) and (2): e%s%d.gif<br>  health expectancies in states (1) and (2): e%s%d.gif<br>
Line 2301  fclose(fichtm); Line 2455  fclose(fichtm);
   agebase=agemin;    agebase=agemin;
   agelim=agemax;    agelim=agemax;
   ftolpl=1.e-10;    ftolpl=1.e-10;
   i1=cptcovn;    i1=cptcoveff;
   if (cptcovn < 1){i1=1;}    if (cptcovn < 1){i1=1;}
   
   for(cptcov=1;cptcov<=i1;cptcov++){    for(cptcov=1;cptcov<=i1;cptcov++){
     for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){      for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
         k=k+1;          k=k+1;
         /*printf("cptcov=%d cptcod=%d codtab=%d nbcode=%d\n",cptcov, cptcod,Tcode[cptcode],codtab[cptcod][cptcov]);*/          /*printf("cptcov=%d cptcod=%d codtab=%d nbcode=%d\n",cptcov, cptcod,Tcode[cptcode],codtab[cptcod][cptcov]);*/
         fprintf(ficrespl,"\n#****** ");          fprintf(ficrespl,"\n#******");
         for(j=1;j<=cptcovn;j++)          for(j=1;j<=cptcoveff;j++)
           fprintf(ficrespl,"V%d=%d ",Tvar[j],nbcode[Tvar[j]][codtab[k][j]]);            fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
         fprintf(ficrespl,"******\n");          fprintf(ficrespl,"******\n");
                 
         for (age=agebase; age<=agelim; age++){          for (age=agebase; age<=agelim; age++){
Line 2343  fclose(fichtm); Line 2497  fclose(fichtm);
     for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){      for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
       k=k+1;        k=k+1;
         fprintf(ficrespij,"\n#****** ");          fprintf(ficrespij,"\n#****** ");
         for(j=1;j<=cptcovn;j++)          for(j=1;j<=cptcoveff;j++)
           fprintf(ficrespij,"V%d=%d ",Tvar[j],nbcode[Tvar[j]][codtab[k][j]]);            fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
         fprintf(ficrespij,"******\n");          fprintf(ficrespij,"******\n");
                 
         for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */          for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */
Line 2402  fclose(fichtm); Line 2556  fclose(fichtm);
     for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){      for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
       k=k+1;        k=k+1;
       fprintf(ficrest,"\n#****** ");        fprintf(ficrest,"\n#****** ");
       for(j=1;j<=cptcovn;j++)        for(j=1;j<=cptcoveff;j++)
         fprintf(ficrest,"V%d=%d ",Tvar[j],nbcode[Tvar[j]][codtab[k][j]]);          fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
       fprintf(ficrest,"******\n");        fprintf(ficrest,"******\n");
   
       fprintf(ficreseij,"\n#****** ");        fprintf(ficreseij,"\n#****** ");
       for(j=1;j<=cptcovn;j++)        for(j=1;j<=cptcoveff;j++)
         fprintf(ficreseij,"V%d=%d ",j,nbcode[j][codtab[k][j]]);          fprintf(ficreseij,"V%d=%d ",j,nbcode[j][codtab[k][j]]);
       fprintf(ficreseij,"******\n");        fprintf(ficreseij,"******\n");
   
       fprintf(ficresvij,"\n#****** ");        fprintf(ficresvij,"\n#****** ");
       for(j=1;j<=cptcovn;j++)        for(j=1;j<=cptcoveff;j++)
         fprintf(ficresvij,"V%d=%d ",j,nbcode[j][codtab[k][j]]);          fprintf(ficresvij,"V%d=%d ",j,nbcode[j][codtab[k][j]]);
       fprintf(ficresvij,"******\n");        fprintf(ficresvij,"******\n");
   
Line 2456  fclose(fichtm); Line 2610  fclose(fichtm);
   fclose(ficrest);    fclose(ficrest);
   fclose(ficpar);    fclose(ficpar);
   free_vector(epj,1,nlstate+1);    free_vector(epj,1,nlstate+1);
   /*scanf("%d ",i); */    /*  scanf("%d ",i); */
   
   /*------- Variance limit prevalence------*/      /*------- Variance limit prevalence------*/  
   
Line 2473  strcpy(fileresvpl,"vpl"); Line 2627  strcpy(fileresvpl,"vpl");
    for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){     for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
      k=k+1;       k=k+1;
      fprintf(ficresvpl,"\n#****** ");       fprintf(ficresvpl,"\n#****** ");
      for(j=1;j<=cptcovn;j++)       for(j=1;j<=cptcoveff;j++)
        fprintf(ficresvpl,"V%d=%d ",Tvar[j],nbcode[Tvar[j]][codtab[k][j]]);         fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
      fprintf(ficresvpl,"******\n");       fprintf(ficresvpl,"******\n");
             
      varpl=matrix(1,nlstate,(int) bage, (int) fage);       varpl=matrix(1,nlstate,(int) bage, (int) fage);
Line 2513  strcpy(fileresvpl,"vpl"); Line 2667  strcpy(fileresvpl,"vpl");
 #ifdef windows  #ifdef windows
  chdir(pathcd);   chdir(pathcd);
 #endif  #endif
  system("wgnuplot graph.plt");   /*system("wgnuplot graph.plt");*/
    system("../gp37mgw/wgnuplot graph.plt");
   
 #ifdef windows  #ifdef windows
   while (z[0] != 'q') {    while (z[0] != 'q') {

Removed from v.1.3  
changed lines
  Added in v.1.8


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