From f0a63ac5f567447fd822fd83aaae9c5b579082a4 Mon Sep 17 00:00:00 2001 From: "N. Brouard" Date: Mon, 23 Jun 2003 17:54:56 +0000 Subject: [PATCH] * imach.c (Repository): Create a sub-directory where all the secondary files are. Only imach, htm, gp and r(imach) are on the main directory. Correct time and other things. --- src/imach.c | 462 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 322 insertions(+), 140 deletions(-) diff --git a/src/imach.c b/src/imach.c index e6b9b58..8fd3120 100644 --- a/src/imach.c +++ b/src/imach.c @@ -1,6 +1,9 @@ /* $Id$ $State$ $Log$ + Revision 1.87 2003/06/18 12:26:01 brouard + Version 0.96 + Revision 1.86 2003/06/17 20:04:08 brouard (Module): Change position of html and gnuplot routines and added routine fileappend. @@ -161,7 +164,7 @@ /* $Id$ */ /* $State$ */ -char version[]="Imach version 0.96, June 2003, INED-EUROREVES "; +char version[]="Imach version 0.96a, June 2003, INED-EUROREVES "; char fullversion[]="$Revision$ $Date$"; int erreur; /* Error number */ int nvar; @@ -205,8 +208,12 @@ char fileresvpl[FILENAMELENGTH]; char title[MAXLINE]; char optionfile[FILENAMELENGTH], datafile[FILENAMELENGTH], filerespl[FILENAMELENGTH]; char optionfilext[10], optionfilefiname[FILENAMELENGTH], plotcmd[FILENAMELENGTH]; +char tmpout[FILENAMELENGTH]; +char command[FILENAMELENGTH]; +int outcmd=0; char fileres[FILENAMELENGTH], filerespij[FILENAMELENGTH], filereso[FILENAMELENGTH], rfileres[FILENAMELENGTH]; +char lfileres[FILENAMELENGTH]; char filelog[FILENAMELENGTH]; /* Log file */ char filerest[FILENAMELENGTH]; char fileregp[FILENAMELENGTH]; @@ -1354,7 +1361,7 @@ double funcone( double *x) ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; /* printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ if(globpr){ - fprintf(ficresilk,"%ld %6d %1d %1d %1d %1d %3d %10.6f %6.4f\ + fprintf(ficresilk,"%9d %6d %1d %1d %1d %1d %3d %10.6f %6.4f\ %10.6f %10.6f %10.6f ", \ num[i],i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i], 2*weight[i]*lli,out[s1][s2],savm[s1][s2]); @@ -1376,6 +1383,34 @@ double funcone( double *x) return -l; } +char *subdirf(char fileres[]) +{ + + strcpy(tmpout,optionfilefiname); + strcat(tmpout,"/"); /* Add to the right */ + strcat(tmpout,fileres); + return tmpout; +} + +char *subdirf2(char fileres[], char *preop) +{ + + strcpy(tmpout,optionfilefiname); + strcat(tmpout,"/"); + strcat(tmpout,preop); + strcat(tmpout,fileres); + return tmpout; +} +char *subdirf3(char fileres[], char *preop, char *preop2) +{ + + strcpy(tmpout,optionfilefiname); + strcat(tmpout,"/"); + strcat(tmpout,preop); + strcat(tmpout,preop2); + strcat(tmpout,fileres); + return tmpout; +} void likelione(FILE *ficres,double p[], int npar, int nlstate, int *globpri, long *ipmx, double *sw, double *fretone, double (*funcone)(double [])) { @@ -1386,7 +1421,7 @@ void likelione(FILE *ficres,double p[], int npar, int nlstate, int *globpri, lon */ int k; - if(*globpri !=0){ /* Just counts and sums no printings */ + if(*globpri !=0){ /* Just counts and sums, no printings */ strcpy(fileresilk,"ilk"); strcat(fileresilk,fileres); if((ficresilk=fopen(fileresilk,"w"))==NULL) { @@ -1394,7 +1429,7 @@ void likelione(FILE *ficres,double p[], int npar, int nlstate, int *globpri, lon fprintf(ficlog,"Problem with resultfile: %s\n", fileresilk); } fprintf(ficresilk, "#individual(line's_record) s1 s2 wave# effective_wave# number_of_matrices_product pij weight -2ln(pij)*weight 0pij_x 0pij_(x-stepm) cumulating_loglikeli_by_health_state(reweighted=-2ll*weightXnumber_of_contribs/sum_of_weights) and_total\n"); - fprintf(ficresilk, "#num_i i s1 s2 mi mw dh likeli weight out sav "); + fprintf(ficresilk, "#num_i i s1 s2 mi mw dh likeli weight 2wlli out sav "); /* i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],2*weight[i]*lli,out[s1][s2],savm[s1][s2]); */ for(k=1; k<=nlstate; k++) fprintf(ficresilk," -2*gipw/gsw*weight*ll[%d]++",k); @@ -1404,12 +1439,13 @@ void likelione(FILE *ficres,double p[], int npar, int nlstate, int *globpri, lon *fretone=(*funcone)(p); if(*globpri !=0){ fclose(ficresilk); - fprintf(fichtm,"\n
File of contributions to the likelihood: %s
\n",fileresilk,fileresilk); + fprintf(fichtm,"\n
File of contributions to the likelihood: %s
\n",subdirf(fileresilk),subdirf(fileresilk)); fflush(fichtm); } return; } + /*********** Maximum Likelihood Estimation ***************/ void mlikeli(FILE *ficres,double p[], int npar, int ncovmodel, int nlstate, double ftol, double (*func)(double [])) @@ -2365,20 +2401,7 @@ void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double fprintf(ficresprobmorprev," w%1d p%-d%-d",i,i,j); } fprintf(ficresprobmorprev,"\n"); - if((ficgp=fopen(optionfilegnuplot,"a"))==NULL) { - printf("Problem with gnuplot file: %s\n", optionfilegnuplot); - fprintf(ficlog,"Problem with gnuplot file: %s\n", optionfilegnuplot); - exit(0); - } - else{ - fprintf(ficgp,"\n# Routine varevsij"); - } -/* if((fichtm=fopen(optionfilehtm,"a"))==NULL) { */ -/* printf("Problem with html file: %s\n", optionfilehtm); */ -/* fprintf(ficlog,"Problem with html file: %s\n", optionfilehtm); */ -/* exit(0); */ -/* } */ -/* else{ */ + fprintf(ficgp,"\n# Routine varevsij"); fprintf(fichtm,"\n
  • Computing probabilities of dying over estepm months as a weighted average (i.e global mortality independent of initial healh state)

  • \n"); fprintf(fichtm,"\n
    %s
    \n",digitp); /* } */ @@ -2593,14 +2616,15 @@ void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double /* fprintf(ficgp,"\n plot \"%s\" u 1:($3*%6.3f) not w l 1 ",fileresprobmorprev,YEARM/estepm); */ /* fprintf(ficgp,"\n replot \"%s\" u 1:(($3+1.96*$4)*%6.3f) t \"95\%% interval\" w l 2 ",fileresprobmorprev,YEARM/estepm); */ /* fprintf(ficgp,"\n replot \"%s\" u 1:(($3-1.96*$4)*%6.3f) not w l 2 ",fileresprobmorprev,YEARM/estepm); */ - fprintf(ficgp,"\n plot \"%s\" u 1:($3) not w l 1 ",fileresprobmorprev); - fprintf(ficgp,"\n replot \"%s\" u 1:(($3+1.96*$4)) t \"95\%% interval\" w l 2 ",fileresprobmorprev); - fprintf(ficgp,"\n replot \"%s\" u 1:(($3-1.96*$4)) not w l 2 ",fileresprobmorprev); - fprintf(fichtm,"\n
    File (multiple files are possible if covariates are present): %s\n",fileresprobmorprev,fileresprobmorprev); - fprintf(fichtm,"\n
    Probability is computed over estepm=%d months.

    \n", estepm,digitp,optionfilefiname,digit); + fprintf(ficgp,"\n plot \"%s\" u 1:($3) not w l 1 ",subdirf(fileresprobmorprev)); + fprintf(ficgp,"\n replot \"%s\" u 1:(($3+1.96*$4)) t \"95\%% interval\" w l 2 ",subdirf(fileresprobmorprev)); + fprintf(ficgp,"\n replot \"%s\" u 1:(($3-1.96*$4)) not w l 2 ",subdirf(fileresprobmorprev)); + fprintf(fichtm,"\n
    File (multiple files are possible if covariates are present): %s\n",subdirf(fileresprobmorprev),subdirf(fileresprobmorprev)); + fprintf(fichtm,"\n
    Probability is computed over estepm=%d months.

    \n", estepm,subdirf3(optionfilefiname,"varmuptjgr",digitp),digit); /* fprintf(fichtm,"\n
    Probability is computed over estepm=%d months and then divided by estepm and multiplied by %.0f in order to have the probability to die over a year

    \n", stepm,YEARM,digitp,digit); */ - fprintf(ficgp,"\nset out \"varmuptjgr%s%s%s.png\";replot;",digitp,optionfilefiname,digit); +/* fprintf(ficgp,"\nset out \"varmuptjgr%s%s%s.png\";replot;",digitp,optionfilefiname,digit); */ + fprintf(ficgp,"\nset out \"%s%s.png\";replot;",digitp,subdirf3(optionfilefiname,"varmuptjgr",digitp),digit); free_vector(xp,1,npar); free_matrix(doldm,1,nlstate,1,nlstate); @@ -2610,8 +2634,8 @@ void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double free_matrix(varppt,nlstate+1,nlstate+ndeath,nlstate+1,nlstate+ndeath); if (mobilav!=0) free_ma3x(mobaverage,1, AGESUP,1,NCOVMAX, 1,NCOVMAX); fclose(ficresprobmorprev); - fclose(ficgp); -/* fclose(fichtm); */ + fflush(ficgp); + fflush(fichtm); } /* end varevsij */ /************ Variance of prevlim ******************/ @@ -2768,28 +2792,13 @@ void varprob(char optionfilefiname[], double **matcov, double x[], double delti[ mu=matrix(1,(nlstate)*(nlstate+ndeath), (int) bage, (int)fage); varpij=ma3x(1,nlstate*(nlstate+ndeath),1,nlstate*(nlstate+ndeath),(int) bage, (int) fage); first=1; - if((ficgp=fopen(optionfilegnuplot,"a"))==NULL) { - printf("Problem with gnuplot file: %s\n", optionfilegnuplot); - fprintf(ficlog,"Problem with gnuplot file: %s\n", optionfilegnuplot); - exit(0); - } - else{ - fprintf(ficgp,"\n# Routine varprob"); - } -/* if((fichtm=fopen(optionfilehtm,"a"))==NULL) { */ -/* printf("Problem with html file: %s\n", optionfilehtm); */ -/* fprintf(ficlog,"Problem with html file: %s\n", optionfilehtm); */ -/* exit(0); */ -/* } */ -/* else{ */ - fprintf(fichtm,"\n
  • Computing and drawing one step probabilities with their confidence intervals

  • \n"); - fprintf(fichtm,"\n"); + fprintf(ficgp,"\n# Routine varprob"); + fprintf(fichtm,"\n
  • Computing and drawing one step probabilities with their confidence intervals

  • \n"); + fprintf(fichtm,"\n"); - fprintf(fichtm,"\n
  • Computing matrix of variance-covariance of step probabilities

  • \n"); - fprintf(fichtm,"\nWe have drawn ellipsoids of confidence around the pij, pkl to understand the covariance between two incidences. They are expressed in year-1 in order to be less dependent of stepm.
    \n"); - fprintf(fichtm,"\n
    We have drawn x'cov-1x = 4 where x is the column vector (pij,pkl). It means that if pij and pkl where uncorrelated the (2X2) matrix would have been (1/(var pij), 0 , 0, 1/(var pkl)), and the confidence interval would be 2 standard deviations wide on each axis.
    When both incidences are correlated we diagonalised the inverse of the covariance matrix and made the appropriate rotation.
    \n"); - -/* } */ + fprintf(fichtm,"\n
  • Computing matrix of variance-covariance of step probabilities

  • \n"); + fprintf(fichtm,"\nWe have drawn ellipsoids of confidence around the pij, pkl to understand the covariance between two incidences. They are expressed in year-1 in order to be less dependent of stepm.
    \n"); + fprintf(fichtm,"\n
    We have drawn x'cov-1x = 4 where x is the column vector (pij,pkl). It means that if pij and pkl where uncorrelated the (2X2) matrix would have been (1/(var pij), 0 , 0, 1/(var pkl)), and the confidence interval would be 2 standard deviations wide on each axis.
    When both incidences are correlated we diagonalised the inverse of the covariance matrix and made the appropriate rotation.
    \n"); cov[1]=1; tj=cptcoveff; @@ -2971,10 +2980,14 @@ void varprob(char optionfilefiname[], double **matcov, double x[], double delti[ fprintf(ficgp,"\nset parametric;unset label"); fprintf(ficgp,"\nset log y;set log x; set xlabel \"p%1d%1d (year-1)\";set ylabel \"p%1d%1d (year-1)\"",k1,l1,k2,l2); fprintf(ficgp,"\nset ter png small\nset size 0.65,0.65"); - fprintf(fichtm,"\n
    Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year-1 :varpijgr%s%d%1d%1d-%1d%1d.png, ",k1,l1,k2,l2,optionfilefiname, j1,k1,l1,k2,l2,optionfilefiname, j1,k1,l1,k2,l2); - fprintf(fichtm,"\n
    ",optionfilefiname, j1,k1,l1,k2,l2); + fprintf(fichtm,"\n
    Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year-1\ + :\ +%s%d%1d%1d-%1d%1d.png, ",k1,l1,k2,l2,\ + subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2,\ + subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2); + fprintf(fichtm,"\n
    ",subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2); fprintf(fichtm,"\n
    Correlation at age %d (%.3f),",(int) age, c12); - fprintf(ficgp,"\nset out \"varpijgr%s%d%1d%1d-%1d%1d.png\"",optionfilefiname, j1,k1,l1,k2,l2); + fprintf(ficgp,"\nset out \"%s%d%1d%1d-%1d%1d.png\"",subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2); fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2); fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2); fprintf(ficgp,"\nplot [-pi:pi] %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not",\ @@ -2991,7 +3004,7 @@ void varprob(char optionfilefiname[], double **matcov, double x[], double delti[ }/* if first */ } /* age mod 5 */ } /* end loop age */ - fprintf(ficgp,"\nset out \"varpijgr%s%d%1d%1d-%1d%1d.png\";replot;",optionfilefiname, j1,k1,l1,k2,l2); + fprintf(ficgp,"\nset out \"%s%d%1d%1d-%1d%1d.png\";replot;",subdirf2(optionfilefiname,"varpijgr"), j1,k1,l1,k2,l2); first=1; } /*l12 */ } /* k12 */ @@ -3005,7 +3018,7 @@ void varprob(char optionfilefiname[], double **matcov, double x[], double delti[ fclose(ficresprob); fclose(ficresprobcov); fclose(ficresprobcor); - fclose(ficgp); + /* fclose(ficgp);*/ } @@ -3024,12 +3037,15 @@ void printinghtml(char fileres[], char title[], char datafile[], int firstpass, /* } */ fprintf(fichtm,"