--- imach/src/imach.c 2002/05/21 18:44:41 1.42 +++ imach/src/imach.c 2002/07/19 18:49:30 1.52 @@ -1,4 +1,4 @@ -/* $Id: imach.c,v 1.42 2002/05/21 18:44:41 brouard Exp $ +/* $Id: imach.c,v 1.52 2002/07/19 18:49:30 brouard Exp $ Interpolated Markov Chain Short summary of the programme: @@ -75,11 +75,18 @@ #define YEARM 12. /* Number of months per year */ #define AGESUP 130 #define AGEBASE 40 +#ifdef windows +#define DIRSEPARATOR '\\' +#define ODIRSEPARATOR '/' +#else +#define DIRSEPARATOR '/' +#define ODIRSEPARATOR '\\' +#endif - +char version[80]="Imach version 0.8i, June 2002, INED-EUROREVES "; int erreur; /* Error number */ int nvar; -int cptcovn, cptcovage=0, cptcoveff=0,cptcov; +int cptcovn=0, cptcovage=0, cptcoveff=0,cptcov; int npar=NPARMAX; int nlstate=2; /* Number of live states */ int ndeath=1; /* Number of dead states */ @@ -96,13 +103,27 @@ double jmean; /* Mean space between 2 wa double **oldm, **newm, **savm; /* Working pointers to matrices */ double **oldms, **newms, **savms; /* Fixed working pointers to matrices */ FILE *fic,*ficpar, *ficparo,*ficres, *ficrespl, *ficrespij, *ficrest,*ficresf,*ficrespop; -FILE *ficgp,*ficresprob,*ficpop; +FILE *ficlog; +FILE *ficgp,*ficresprob,*ficpop, *ficresprobcov, *ficresprobcor; +FILE *ficresprobmorprev; +FILE *fichtm; /* Html File */ FILE *ficreseij; - char filerese[FILENAMELENGTH]; - FILE *ficresvij; - char fileresv[FILENAMELENGTH]; - FILE *ficresvpl; - char fileresvpl[FILENAMELENGTH]; +char filerese[FILENAMELENGTH]; +FILE *ficresvij; +char fileresv[FILENAMELENGTH]; +FILE *ficresvpl; +char fileresvpl[FILENAMELENGTH]; +char title[MAXLINE]; +char optionfile[FILENAMELENGTH], datafile[FILENAMELENGTH], filerespl[FILENAMELENGTH]; +char optionfilext[10], optionfilefiname[FILENAMELENGTH], plotcmd[FILENAMELENGTH]; + +char fileres[FILENAMELENGTH], filerespij[FILENAMELENGTH], filereso[FILENAMELENGTH], rfileres[FILENAMELENGTH]; +char filelog[FILENAMELENGTH]; /* Log file */ +char filerest[FILENAMELENGTH]; +char fileregp[FILENAMELENGTH]; +char popfile[FILENAMELENGTH]; + +char optionfilegnuplot[FILENAMELENGTH], optionfilehtm[FILENAMELENGTH]; #define NR_END 1 #define FREE_ARG char* @@ -161,12 +182,10 @@ static int split( char *path, char *dirc l1 = strlen( path ); /* length of path */ if ( l1 == 0 ) return( GLOCK_ERROR_NOPATH ); -#ifdef windows - s = strrchr( path, '\\' ); /* find last / */ -#else - s = strrchr( path, '/' ); /* find last / */ -#endif + s= strrchr( path, DIRSEPARATOR ); /* find last / */ if ( s == NULL ) { /* no directory, so use current */ + /*if(strrchr(path, ODIRSEPARATOR )==NULL) + printf("Warning you should use %s as a separator\n",DIRSEPARATOR);*/ #if defined(__bsd__) /* get current working directory */ extern char *getwd( ); @@ -232,6 +251,9 @@ int nbocc(char *s, char occ) void cutv(char *u,char *v, char*t, char occ) { + /* cuts string t into u and v where u is ended by char occ excluding it + and v is after occ excluding it too : ex cutv(u,v,"abcdef2ghi2j",2) + gives u="abcedf" and v="ghi2j" */ int i,lg,j,p=0; i=0; for(j=0; j<=strlen(t)-1; j++) { @@ -428,8 +450,10 @@ double brent(double ax, double bx, doubl tol2=2.0*(tol1=tol*fabs(x)+ZEPS); /* if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret)))*/ printf(".");fflush(stdout); + fprintf(ficlog,".");fflush(ficlog); #ifdef DEBUG printf("br %d,x=%.10e xm=%.10e b=%.10e a=%.10e tol=%.10e tol1=%.10e tol2=%.10e x-xm=%.10e fx=%.12e fu=%.12e,fw=%.12e,ftemp=%.12e,ftol=%.12e\n",iter,x,xm,b,a,tol,tol1,tol2,(x-xm),fx,fu,fw,ftemp,ftol); + fprintf(ficlog,"br %d,x=%.10e xm=%.10e b=%.10e a=%.10e tol=%.10e tol1=%.10e tol2=%.10e x-xm=%.10e fx=%.12e fu=%.12e,fw=%.12e,ftemp=%.12e,ftol=%.12e\n",iter,x,xm,b,a,tol,tol1,tol2,(x-xm),fx,fu,fw,ftemp,ftol); /* if ((fabs(x-xm) <= (tol2-0.5*(b-a)))||(2.0*fabs(fu-ftemp) <= ftol*1.e-2*(fabs(fu)+fabs(ftemp)))) { */ #endif if (fabs(x-xm) <= (tol2-0.5*(b-a))){ @@ -554,6 +578,7 @@ void linmin(double p[], double xi[], int *fret=brent(ax,xx,bx,f1dim,TOL,&xmin); #ifdef DEBUG printf("retour brent fret=%.12e xmin=%.12e\n",*fret,xmin); + fprintf(ficlog,"retour brent fret=%.12e xmin=%.12e\n",*fret,xmin); #endif for (j=1;j<=n;j++) { xi[j] *= xmin; @@ -584,16 +609,21 @@ void powell(double p[], double **xi, int ibig=0; del=0.0; printf("\nPowell iter=%d -2*LL=%.12f",*iter,*fret); + fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f",*iter,*fret); for (i=1;i<=n;i++) printf(" %d %.12f",i, p[i]); + fprintf(ficlog," %d %.12f",i, p[i]); printf("\n"); + fprintf(ficlog,"\n"); for (i=1;i<=n;i++) { for (j=1;j<=n;j++) xit[j]=xi[j][i]; fptt=(*fret); #ifdef DEBUG printf("fret=%lf \n",*fret); + fprintf(ficlog,"fret=%lf \n",*fret); #endif printf("%d",i);fflush(stdout); + fprintf(ficlog,"%d",i);fflush(ficlog); linmin(p,xit,n,fret,func); if (fabs(fptt-(*fret)) > del) { del=fabs(fptt-(*fret)); @@ -601,13 +631,18 @@ void powell(double p[], double **xi, int } #ifdef DEBUG printf("%d %.12e",i,(*fret)); + fprintf(ficlog,"%d %.12e",i,(*fret)); for (j=1;j<=n;j++) { xits[j]=FMAX(fabs(p[j]-pt[j]),1.e-5); printf(" x(%d)=%.12e",j,xit[j]); + fprintf(ficlog," x(%d)=%.12e",j,xit[j]); } - for(j=1;j<=n;j++) + for(j=1;j<=n;j++) { printf(" p=%.12e",p[j]); + fprintf(ficlog," p=%.12e",p[j]); + } printf("\n"); + fprintf(ficlog,"\n"); #endif } if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { @@ -616,15 +651,21 @@ void powell(double p[], double **xi, int k[0]=1; k[1]=-1; printf("Max: %.12e",(*func)(p)); - for (j=1;j<=n;j++) + fprintf(ficlog,"Max: %.12e",(*func)(p)); + for (j=1;j<=n;j++) { printf(" %.12e",p[j]); + fprintf(ficlog," %.12e",p[j]); + } printf("\n"); + fprintf(ficlog,"\n"); for(l=0;l<=1;l++) { for (j=1;j<=n;j++) { ptt[j]=p[j]+(p[j]-pt[j])*k[l]; printf("l=%d j=%d ptt=%.12e, xits=%.12e, p=%.12e, xit=%.12e", l,j,ptt[j],xits[j],p[j],xit[j]); + fprintf(ficlog,"l=%d j=%d ptt=%.12e, xits=%.12e, p=%.12e, xit=%.12e", l,j,ptt[j],xits[j],p[j],xit[j]); } printf("func(ptt)=%.12e, deriv=%.12e\n",(*func)(ptt),(ptt[j]-p[j])/((*func)(ptt)-(*func)(p))); + fprintf(ficlog,"func(ptt)=%.12e, deriv=%.12e\n",(*func)(ptt),(ptt[j]-p[j])/((*func)(ptt)-(*func)(p))); } #endif @@ -652,9 +693,13 @@ void powell(double p[], double **xi, int } #ifdef DEBUG printf("Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); - for(j=1;j<=n;j++) + fprintf(ficlog,"Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); + for(j=1;j<=n;j++){ printf(" %.12e",xit[j]); + fprintf(ficlog," %.12e",xit[j]); + } printf("\n"); + fprintf(ficlog,"\n"); #endif } } @@ -925,10 +970,11 @@ void mlikeli(FILE *ficres,double p[], in for (i=1;i<=npar;i++) for (j=1;j<=npar;j++) xi[i][j]=(i==j ? 1.0 : 0.0); - printf("Powell\n"); + printf("Powell\n"); fprintf(ficlog,"Powell\n"); powell(p,xi,npar,ftol,&iter,&fret,func); printf("\n#Number of iterations = %d, -2 Log likelihood = %.12f\n",iter,func(p)); + fprintf(ficlog,"#Number of iterations = %d, -2 Log likelihood = %.12f \n",iter,func(p)); fprintf(ficres,"#Number of iterations = %d, -2 Log likelihood = %.12f \n",iter,func(p)); } @@ -949,8 +995,10 @@ void hesscov(double **matcov, double p[] hess=matrix(1,npar,1,npar); printf("\nCalculation of the hessian matrix. Wait...\n"); + fprintf(ficlog,"\nCalculation of the hessian matrix. Wait...\n"); for (i=1;i<=npar;i++){ printf("%d",i);fflush(stdout); + fprintf(ficlog,"%d",i);fflush(ficlog); hess[i][i]=hessii(p,ftolhess,i,delti); /*printf(" %f ",p[i]);*/ /*printf(" %lf ",hess[i][i]);*/ @@ -960,6 +1008,7 @@ void hesscov(double **matcov, double p[] for (j=1;j<=npar;j++) { if (j>i) { printf(".%d%d",i,j);fflush(stdout); + fprintf(ficlog,".%d%d",i,j);fflush(ficlog); hess[i][j]=hessij(p,delti,i,j); hess[j][i]=hess[i][j]; /*printf(" %lf ",hess[i][j]);*/ @@ -967,8 +1016,10 @@ void hesscov(double **matcov, double p[] } } printf("\n"); + fprintf(ficlog,"\n"); printf("\nInverting the hessian to get the covariance matrix. Wait...\n"); + fprintf(ficlog,"\nInverting the hessian to get the covariance matrix. Wait...\n"); a=matrix(1,npar,1,npar); y=matrix(1,npar,1,npar); @@ -988,11 +1039,14 @@ void hesscov(double **matcov, double p[] } printf("\n#Hessian matrix#\n"); + fprintf(ficlog,"\n#Hessian matrix#\n"); for (i=1;i<=npar;i++) { for (j=1;j<=npar;j++) { printf("%.3e ",hess[i][j]); + fprintf(ficlog,"%.3e ",hess[i][j]); } printf("\n"); + fprintf(ficlog,"\n"); } /* Recompute Inverse */ @@ -1009,8 +1063,10 @@ void hesscov(double **matcov, double p[] for (i=1;i<=npar;i++){ y[i][j]=x[i]; printf("%.3e ",y[i][j]); + fprintf(ficlog,"%.3e ",y[i][j]); } printf("\n"); + fprintf(ficlog,"\n"); } */ @@ -1052,6 +1108,7 @@ double hessii( double x[], double delta, #ifdef DEBUG printf("%d %d k1=%.12e k2=%.12e xk1=%.12e xk2=%.12e delt=%.12e res=%.12e l=%d k=%d,fx=%.12e\n",theta,theta,k1,k2,x[theta]+delt,x[theta]-delt,delt,res, l, k,fx); + fprintf(ficlog,"%d %d k1=%.12e k2=%.12e xk1=%.12e xk2=%.12e delt=%.12e res=%.12e l=%d k=%d,fx=%.12e\n",theta,theta,k1,k2,x[theta]+delt,x[theta]-delt,delt,res, l, k,fx); #endif /*if(fabs(k1-2.0*fx+k2) <1.e-13){ */ if((k1 =1.e-10) + if(pp[jk]>=1.e-10){ + if(first==1){ printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]); - else - printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk); + } + fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]); + }else{ + if(first==1) + printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk); + fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk); + } } for(jk=1; jk <=nlstate ; jk++){ @@ -1279,10 +1352,15 @@ void freqsummary(char fileres[], int ag for(jk=1,pos=0; jk <=nlstate ; jk++) pos += pp[jk]; for(jk=1; jk <=nlstate ; jk++){ - if(pos>=1.e-5) - printf(" %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos); - else - printf(" %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk); + if(pos>=1.e-5){ + if(first==1) + printf(" %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos); + fprintf(ficlog," %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos); + }else{ + if(first==1) + printf(" %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk); + fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk); + } if( i <= (int) agemax){ if(pos>=1.e-5){ fprintf(ficresp," %d %.5f %.0f %.0f",i,pp[jk]/pos, pp[jk],pos); @@ -1296,10 +1374,16 @@ void freqsummary(char fileres[], int ag for(jk=-1; jk <=nlstate+ndeath; jk++) for(m=-1; m <=nlstate+ndeath; m++) - if(freq[jk][m][i] !=0 ) printf(" %d%d=%.0f",jk,m,freq[jk][m][i]); + if(freq[jk][m][i] !=0 ) { + if(first==1) + printf(" %d%d=%.0f",jk,m,freq[jk][m][i]); + fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][i]); + } if(i <= (int) agemax) fprintf(ficresp,"\n"); - printf("\n"); + if(first==1) + printf("Others in log...\n"); + fprintf(ficlog,"\n"); } } } @@ -1386,11 +1470,10 @@ void prevalence(int agemin, float agemax probs[i][jk][j1]= pp[jk]/pos; } } - } - - } - } - } + }/* end jk */ + }/* end i */ + } /* end i1 */ + } /* end k1 */ free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath,(int) agemin,(int) agemax+3); @@ -1412,9 +1495,10 @@ void concatwav(int wav[], int **dh, int int i, mi, m; /* int j, k=0,jk, ju, jl,jmin=1e+5, jmax=-1; double sum=0., jmean=0.;*/ - + int first; int j, k=0,jk, ju, jl; double sum=0.; + first=0; jmin=1e+5; jmax=-1; jmean=0.; @@ -1437,8 +1521,15 @@ void concatwav(int wav[], int **dh, int } wav[i]=mi; - if(mi==0) - printf("Warning, no any valid information for:%d line=%d\n",num[i],i); + if(mi==0){ + if(first==0){ + printf("Warning, no any valid information for:%d line=%d and may be others, see log file\n",num[i],i); + first=1; + } + if(first==1){ + fprintf(ficlog,"Warning, no any valid information for:%d line=%d\n",num[i],i); + } + } /* end mi==0 */ } for(i=1; i<=imx; i++){ @@ -1479,7 +1570,9 @@ void concatwav(int wav[], int **dh, int } jmean=sum/k; printf("Delay (in months) between two waves Min=%d Max=%d Mean=%f\n\n ",jmin, jmax,jmean); + fprintf(ficlog,"Delay (in months) between two waves Min=%d Max=%d Mean=%f\n\n ",jmin, jmax,jmean); } + /*********** Tricode ****************************/ void tricode(int *Tvar, int **nbcode, int imx) { @@ -1519,9 +1612,9 @@ void tricode(int *Tvar, int **nbcode, in for (k=0; k<19; k++) Ndum[k]=0; for (i=1; i<=ncovmodel-2; i++) { - ij=Tvar[i]; - Ndum[ij]++; - } + ij=Tvar[i]; + Ndum[ij]++; + } ij=1; for (i=1; i<=10; i++) { @@ -1531,7 +1624,7 @@ void tricode(int *Tvar, int **nbcode, in } } - cptcoveff=ij-1; + cptcoveff=ij-1; } /*********** Health Expectancies ****************/ @@ -1641,14 +1734,10 @@ void evsij(char fileres[], double ***eij } } } - - - for(j=1; j<= nlstate*2; j++) for(h=0; h<=nhstepm-1; h++){ gradg[h][theta][j]= (gp[h][j]-gm[h][j])/2./delti[theta]; } - } /* End theta */ @@ -1658,15 +1747,16 @@ void evsij(char fileres[], double ***eij for(h=0; h<=nhstepm-1; h++) for(j=1; j<=nlstate*2;j++) for(theta=1; theta <=npar; theta++) - trgradg[h][j][theta]=gradg[h][theta][j]; - + trgradg[h][j][theta]=gradg[h][theta][j]; + for(i=1;i<=nlstate*2;i++) for(j=1;j<=nlstate*2;j++) varhe[i][j][(int)age] =0.; - printf("%d||",(int)age);fflush(stdout); - for(h=0;h<=nhstepm-1;h++){ + printf("%d|",(int)age);fflush(stdout); + fprintf(ficlog,"%d|",(int)age);fflush(ficlog); + for(h=0;h<=nhstepm-1;h++){ for(k=0;k<=nhstepm-1;k++){ matprod2(dnewm,trgradg[h],1,nlstate*2,1,npar,1,npar,matcov); matprod2(doldm,dnewm,1,nlstate*2,1,npar,1,nlstate*2,gradg[k]); @@ -1675,8 +1765,6 @@ void evsij(char fileres[], double ***eij varhe[i][j][(int)age] += doldm[i][j]*hf*hf; } } - - /* Computing expectancies */ for(i=1; i<=nlstate;i++) for(j=1; j<=nlstate;j++) @@ -1702,6 +1790,9 @@ void evsij(char fileres[], double ***eij free_ma3x(trgradg,0,nhstepm,1,nlstate*2,1,npar); free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); } + printf("\n"); + fprintf(ficlog,"\n"); + free_vector(xp,1,npar); free_matrix(dnewm,1,nlstate*2,1,npar); free_matrix(doldm,1,nlstate*2,1,nlstate*2); @@ -1709,22 +1800,73 @@ void evsij(char fileres[], double ***eij } /************ Variance ******************/ -void varevsij(char fileres[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int ij, int estepm) +void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int ij, int estepm, int cptcov, int cptcod, int popbased) { /* Variance of health expectancies */ /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double ** savm,double ftolpl);*/ - double **newm; + /* double **newm;*/ double **dnewm,**doldm; + double **dnewmp,**doldmp; int i, j, nhstepm, hstepm, h, nstepm ; int k, cptcode; double *xp; - double **gp, **gm; - double ***gradg, ***trgradg; + double **gp, **gm; /* for var eij */ + double ***gradg, ***trgradg; /*for var eij */ + double **gradgp, **trgradgp; /* for var p point j */ + double *gpp, *gmp; /* for var p point j */ + double **varppt; /* for var p point j nlstate to nlstate+ndeath */ double ***p3mat; double age,agelim, hf; int theta; + char digit[4]; + char digitp[16]; + + char fileresprobmorprev[FILENAMELENGTH]; + + if(popbased==1) + strcpy(digitp,"-populbased-"); + else + strcpy(digitp,"-stablbased-"); + + strcpy(fileresprobmorprev,"prmorprev"); + sprintf(digit,"%-d",ij); + /*printf("DIGIT=%s, ij=%d ijr=%-d|\n",digit, ij,ij);*/ + strcat(fileresprobmorprev,digit); /* Tvar to be done */ + strcat(fileresprobmorprev,digitp); /* Popbased or not */ + strcat(fileresprobmorprev,fileres); + if((ficresprobmorprev=fopen(fileresprobmorprev,"w"))==NULL) { + printf("Problem with resultfile: %s\n", fileresprobmorprev); + fprintf(ficlog,"Problem with resultfile: %s\n", fileresprobmorprev); + } + printf("Computing total mortality p.j=w1*p1j+w2*p2j+..: result on file '%s' \n",fileresprobmorprev); + fprintf(ficlog,"Computing total mortality p.j=w1*p1j+w2*p2j+..: result on file '%s' \n",fileresprobmorprev); + fprintf(ficresprobmorprev,"# probabilities of dying during a year and weighted mean w1*p1j+w2*p2j+... stand dev in()\n"); + fprintf(ficresprobmorprev,"# Age cov=%-d",ij); + for(j=nlstate+1; j<=(nlstate+ndeath);j++){ + fprintf(ficresprobmorprev," p.%-d SE",j); + for(i=1; i<=nlstate;i++) + 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(fichtm,"\n
  • Computing probabilities of dying as a weighted average (i.e global mortality independent of initial healh state)

  • \n"); + } + varppt = matrix(nlstate+1,nlstate+ndeath,nlstate+1,nlstate+ndeath); - fprintf(ficresvij,"# Covariances of life expectancies\n"); + fprintf(ficresvij,"# Variance and covariance of health expectancies e.j \n# (weighted average of eij where weights are the stable prevalence in health states i\n"); fprintf(ficresvij,"# Age"); for(i=1; i<=nlstate;i++) for(j=1; j<=nlstate;j++) @@ -1734,6 +1876,13 @@ void varevsij(char fileres[], double *** xp=vector(1,npar); dnewm=matrix(1,nlstate,1,npar); doldm=matrix(1,nlstate,1,nlstate); + dnewmp= matrix(nlstate+1,nlstate+ndeath,1,npar); + doldmp= matrix(nlstate+1,nlstate+ndeath,nlstate+1,nlstate+ndeath); + + gradgp=matrix(1,npar,nlstate+1,nlstate+ndeath); + gpp=vector(nlstate+1,nlstate+ndeath); + gmp=vector(nlstate+1,nlstate+ndeath); + trgradgp =matrix(nlstate+1,nlstate+ndeath,1,npar); /* mu or p point j*/ if(estepm < stepm){ printf ("Problem %d lower than %d\n",estepm, stepm); @@ -1761,6 +1910,7 @@ void varevsij(char fileres[], double *** gp=matrix(0,nhstepm,1,nlstate); gm=matrix(0,nhstepm,1,nlstate); + for(theta=1; theta <=npar; theta++){ for(i=1; i<=npar; i++){ /* Computes gradient */ xp[i] = x[i] + (i==theta ?delti[theta]:0); @@ -1779,7 +1929,13 @@ void varevsij(char fileres[], double *** gp[h][j] += prlim[i][i]*p3mat[i][j][h]; } } - + /* This for computing forces of mortality (h=1)as a weighted average */ + for(j=nlstate+1,gpp[j]=0.;j<=nlstate+ndeath;j++){ + for(i=1; i<= nlstate; i++) + gpp[j] += prlim[i][i]*p3mat[i][j][1]; + } + /* end force of mortality */ + for(i=1; i<=npar; i++) /* Computes gradient */ xp[i] = x[i] - (i==theta ?delti[theta]:0); hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij); @@ -1796,20 +1952,34 @@ void varevsij(char fileres[], double *** gm[h][j] += prlim[i][i]*p3mat[i][j][h]; } } + /* This for computing force of mortality (h=1)as a weighted average */ + for(j=nlstate+1,gmp[j]=0.;j<=nlstate+ndeath;j++){ + for(i=1; i<= nlstate; i++) + gmp[j] += prlim[i][i]*p3mat[i][j][1]; + } + /* end force of mortality */ - for(j=1; j<= nlstate; j++) + for(j=1; j<= nlstate; j++) /* vareij */ for(h=0; h<=nhstepm; h++){ gradg[h][theta][j]= (gp[h][j]-gm[h][j])/2./delti[theta]; } + for(j=nlstate+1; j<= nlstate+ndeath; j++){ /* var mu */ + gradgp[theta][j]= (gpp[j]-gmp[j])/2./delti[theta]; + } + } /* End theta */ - trgradg =ma3x(0,nhstepm,1,nlstate,1,npar); + trgradg =ma3x(0,nhstepm,1,nlstate,1,npar); /* veij */ - for(h=0; h<=nhstepm; h++) + for(h=0; h<=nhstepm; h++) /* veij */ for(j=1; j<=nlstate;j++) for(theta=1; theta <=npar; theta++) trgradg[h][j][theta]=gradg[h][theta][j]; + for(j=nlstate+1; j<=nlstate+ndeath;j++) /* mu */ + for(theta=1; theta <=npar; theta++) + trgradgp[j][theta]=gradgp[theta][j]; + hf=hstepm*stepm/YEARM; /* Duration of hstepm expressed in year unit. */ for(i=1;i<=nlstate;i++) for(j=1;j<=nlstate;j++) @@ -1825,6 +1995,37 @@ void varevsij(char fileres[], double *** } } + /* pptj */ + matprod2(dnewmp,trgradgp,nlstate+1,nlstate+ndeath,1,npar,1,npar,matcov); + matprod2(doldmp,dnewmp,nlstate+1,nlstate+ndeath,1,npar,nlstate+1,nlstate+ndeath,gradgp); + for(j=nlstate+1;j<=nlstate+ndeath;j++) + for(i=nlstate+1;i<=nlstate+ndeath;i++) + varppt[j][i]=doldmp[j][i]; + /* end ppptj */ + hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm,savm, ij); + prevalim(prlim,nlstate,x,age,oldm,savm,ftolpl,ij); + + if (popbased==1) { + for(i=1; i<=nlstate;i++) + prlim[i][i]=probs[(int)age][i][ij]; + } + + /* This for computing force of mortality (h=1)as a weighted average */ + for(j=nlstate+1,gmp[j]=0.;j<=nlstate+ndeath;j++){ + for(i=1; i<= nlstate; i++) + gmp[j] += prlim[i][i]*p3mat[i][j][1]; + } + /* end force of mortality */ + + fprintf(ficresprobmorprev,"%3d %d ",(int) age, ij); + for(j=nlstate+1; j<=(nlstate+ndeath);j++){ + fprintf(ficresprobmorprev," %11.3e %11.3e",gmp[j], sqrt(varppt[j][j])); + for(i=1; i<=nlstate;i++){ + fprintf(ficresprobmorprev," %11.3e %11.3e ",prlim[i][i],p3mat[i][j][1]); + } + } + fprintf(ficresprobmorprev,"\n"); + fprintf(ficresvij,"%.0f ",age ); for(i=1; i<=nlstate;i++) for(j=1; j<=nlstate;j++){ @@ -1837,10 +2038,31 @@ void varevsij(char fileres[], double *** free_ma3x(trgradg,0,nhstepm,1,nlstate,1,npar); free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); } /* End age */ - + free_vector(gpp,nlstate+1,nlstate+ndeath); + free_vector(gmp,nlstate+1,nlstate+ndeath); + free_matrix(gradgp,1,npar,nlstate+1,nlstate+ndeath); + free_matrix(trgradgp,nlstate+1,nlstate+ndeath,1,npar); /* mu or p point j*/ + fprintf(ficgp,"\nset noparametric;set nolabel; set ter png small;set size 0.65, 0.65"); + /* for(j=nlstate+1; j<= nlstate+ndeath; j++){ *//* Only the first actually */ + fprintf(ficgp,"\n set log y; set nolog x;set xlabel \"Age\"; set ylabel \"Force of mortality (year-1)\";"); + 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(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", stepm,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.png\";replot;",digitp,digit); + free_vector(xp,1,npar); - free_matrix(doldm,1,nlstate,1,npar); - free_matrix(dnewm,1,nlstate,1,nlstate); + free_matrix(doldm,1,nlstate,1,nlstate); + free_matrix(dnewm,1,nlstate,1,npar); + free_matrix(doldmp,nlstate+1,nlstate+ndeath,nlstate+1,nlstate+ndeath); + free_matrix(dnewmp,nlstate+1,nlstate+ndeath,1,npar); + free_matrix(varppt,nlstate+1,nlstate+ndeath,nlstate+1,nlstate+ndeath); + fclose(ficresprobmorprev); + fclose(ficgp); + fclose(fichtm); } @@ -1859,7 +2081,7 @@ void varprevlim(char fileres[], double * double age,agelim; int theta; - fprintf(ficresvpl,"# Standard deviation of prevalences limit\n"); + fprintf(ficresvpl,"# Standard deviation of prevalence's limit\n"); fprintf(ficresvpl,"# Age"); for(i=1; i<=nlstate;i++) fprintf(ficresvpl," %1d-%1d",i,i); @@ -1928,67 +2150,142 @@ void varprevlim(char fileres[], double * } /************ Variance of one-step probabilities ******************/ -void varprob(char fileres[], double **matcov, double x[], double delti[], int nlstate, double bage, double fage, int ij, int *Tvar, int **nbcode, int *ncodemax) +void varprob(char optionfilefiname[], double **matcov, double x[], double delti[], int nlstate, double bage, double fage, int ij, int *Tvar, int **nbcode, int *ncodemax) { - int i, j, i1, k1, j1, z1; - int k=0, cptcode; + int i, j=0, i1, k1, l1, t, tj; + int k2, l2, j1, z1; + int k=0,l, cptcode; + int first=1, first1; + double cv12, mu1, mu2, lc1, lc2, v12, v21, v11, v22,v1,v2, c12, tnalp; double **dnewm,**doldm; double *xp; double *gp, *gm; double **gradg, **trgradg; + double **mu; double age,agelim, cov[NCOVMAX]; + double std=2.0; /* Number of standard deviation wide of confidence ellipsoids */ int theta; char fileresprob[FILENAMELENGTH]; + char fileresprobcov[FILENAMELENGTH]; + char fileresprobcor[FILENAMELENGTH]; + + double ***varpij; strcpy(fileresprob,"prob"); strcat(fileresprob,fileres); if((ficresprob=fopen(fileresprob,"w"))==NULL) { printf("Problem with resultfile: %s\n", fileresprob); + fprintf(ficlog,"Problem with resultfile: %s\n", fileresprob); + } + strcpy(fileresprobcov,"probcov"); + strcat(fileresprobcov,fileres); + if((ficresprobcov=fopen(fileresprobcov,"w"))==NULL) { + printf("Problem with resultfile: %s\n", fileresprobcov); + fprintf(ficlog,"Problem with resultfile: %s\n", fileresprobcov); + } + strcpy(fileresprobcor,"probcor"); + strcat(fileresprobcor,fileres); + if((ficresprobcor=fopen(fileresprobcor,"w"))==NULL) { + printf("Problem with resultfile: %s\n", fileresprobcor); + fprintf(ficlog,"Problem with resultfile: %s\n", fileresprobcor); } printf("Computing standard deviation of one-step probabilities: result on file '%s' \n",fileresprob); + fprintf(ficlog,"Computing standard deviation of one-step probabilities: result on file '%s' \n",fileresprob); + printf("Computing matrix of variance covariance of one-step probabilities: result on file '%s' \n",fileresprobcov); + fprintf(ficlog,"Computing matrix of variance covariance of one-step probabilities: result on file '%s' \n",fileresprobcov); + printf("and correlation matrix of one-step probabilities: result on file '%s' \n",fileresprobcor); + fprintf(ficlog,"and correlation matrix of one-step probabilities: result on file '%s' \n",fileresprobcor); -fprintf(ficresprob,"#One-step probabilities and standard deviation in parentheses\n"); + fprintf(ficresprob,"#One-step probabilities and stand. devi in ()\n"); fprintf(ficresprob,"# Age"); - for(i=1; i<=nlstate;i++) - for(j=1; j<=(nlstate+ndeath);j++) - fprintf(ficresprob," p%1d-%1d (SE)",i,j); + fprintf(ficresprobcov,"#One-step probabilities and covariance matrix\n"); + fprintf(ficresprobcov,"# Age"); + fprintf(ficresprobcor,"#One-step probabilities and correlation matrix\n"); + fprintf(ficresprobcov,"# Age"); + for(i=1; i<=nlstate;i++) + for(j=1; j<=(nlstate+ndeath);j++){ + fprintf(ficresprob," p%1d-%1d (SE)",i,j); + fprintf(ficresprobcov," p%1d-%1d ",i,j); + fprintf(ficresprobcor," p%1d-%1d ",i,j); + } fprintf(ficresprob,"\n"); + fprintf(ficresprobcov,"\n"); + fprintf(ficresprobcor,"\n"); + xp=vector(1,npar); + dnewm=matrix(1,(nlstate)*(nlstate+ndeath),1,npar); + doldm=matrix(1,(nlstate)*(nlstate+ndeath),1,(nlstate)*(nlstate+ndeath)); + 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(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"); - xp=vector(1,npar); - dnewm=matrix(1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); - doldm=matrix(1,(nlstate+ndeath)*(nlstate+ndeath),1,(nlstate+ndeath)*(nlstate+ndeath)); - + } + + cov[1]=1; - j=cptcoveff; - if (cptcovn<1) {j=1;ncodemax[1]=1;} + tj=cptcoveff; + if (cptcovn<1) {tj=1;ncodemax[1]=1;} j1=0; - for(k1=1; k1<=1;k1++){ - for(i1=1; i1<=ncodemax[k1];i1++){ - 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(t=1; t<=tj;t++){ + for(i1=1; i1<=ncodemax[t];i1++){ + 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#"); + fprintf(ficresprobcov, "\n#********** Variable "); + for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); + fprintf(ficresprobcov, "**********\n#"); + + fprintf(ficgp, "\n#********** Variable "); + for (z1=1; z1<=cptcoveff; z1++) fprintf(ficgp, "# V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); + fprintf(ficgp, "**********\n#"); + + + fprintf(fichtm, "\n
    ********** Variable "); + for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); + fprintf(fichtm, "**********\n
    "); + + fprintf(ficresprobcor, "\n#********** Variable "); + for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); + fprintf(ficgp, "**********\n#"); + } + for (age=bage; age<=fage; age ++){ cov[2]=age; for (k=1; k<=cptcovn;k++) { cov[2+k]=nbcode[Tvar[k]][codtab[j1][Tvar[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]]]; - 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)); + gradg=matrix(1,npar,1,(nlstate)*(nlstate+ndeath)); + trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar); + gp=vector(1,(nlstate)*(nlstate+ndeath)); + gm=vector(1,(nlstate)*(nlstate+ndeath)); for(theta=1; theta <=npar; theta++){ for(i=1; i<=npar; i++) @@ -1997,7 +2294,7 @@ fprintf(ficresprob,"#One-step probabilit pmij(pmmij,cov,ncovmodel,xp,nlstate); k=0; - for(i=1; i<= (nlstate+ndeath); i++){ + for(i=1; i<= (nlstate); i++){ for(j=1; j<=(nlstate+ndeath);j++){ k=k+1; gp[k]=pmmij[i][j]; @@ -2009,100 +2306,186 @@ fprintf(ficresprob,"#One-step probabilit pmij(pmmij,cov,ncovmodel,xp,nlstate); k=0; - for(i=1; i<=(nlstate+ndeath); i++){ + for(i=1; i<=(nlstate); 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)*(nlstate+ndeath); i++) gradg[theta][i]=(gp[i]-gm[i])/2./delti[theta]; } - for(j=1; j<=(nlstate+ndeath)*(nlstate+ndeath);j++) + for(j=1; j<=(nlstate)*(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); + matprod2(dnewm,trgradg,1,(nlstate)*(nlstate+ndeath),1,npar,1,npar,matcov); + matprod2(doldm,dnewm,1,(nlstate)*(nlstate+ndeath),1,npar,1,(nlstate)*(nlstate+ndeath),gradg); pmij(pmmij,cov,ncovmodel,x,nlstate); k=0; - for(i=1; i<=(nlstate+ndeath); i++){ + for(i=1; i<=(nlstate); i++){ for(j=1; j<=(nlstate+ndeath);j++){ k=k+1; - gm[k]=pmmij[i][j]; + mu[k][(int) age]=pmmij[i][j]; } } - - /*printf("\n%d ",(int)age); - for (i=1; i<=(nlstate+ndeath)*(nlstate+ndeath-1);i++){ + for(i=1;i<=(nlstate)*(nlstate+ndeath);i++) + for(j=1;j<=(nlstate)*(nlstate+ndeath);j++) + varpij[i][j][(int)age] = doldm[i][j]; + + /*printf("\n%d ",(int)age); + for (i=1; i<=(nlstate)*(nlstate+ndeath);i++){ printf("%e [%e ;%e] ",gm[i],gm[i]-2*sqrt(doldm[i][i]),gm[i]+2*sqrt(doldm[i][i])); + fprintf(ficlog,"%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(ficresprobcov,"\n%d ",(int)age); + fprintf(ficresprobcor,"\n%d ",(int)age); - for (i=1; i<=(nlstate+ndeath)*(nlstate+ndeath-1);i++) - fprintf(ficresprob,"%.3e (%.3e) ",gm[i],sqrt(doldm[i][i])); - - } - } + for (i=1; i<=(nlstate)*(nlstate+ndeath);i++) + fprintf(ficresprob,"%11.3e (%11.3e) ",mu[i][(int) age],sqrt(varpij[i][i][(int)age])); + for (i=1; i<=(nlstate)*(nlstate+ndeath);i++){ + fprintf(ficresprobcov,"%11.3e ",mu[i][(int) age]); + fprintf(ficresprobcor,"%11.3e ",mu[i][(int) age]); + } + i=0; + for (k=1; k<=(nlstate);k++){ + for (l=1; l<=(nlstate+ndeath);l++){ + i=i++; + fprintf(ficresprobcov,"\n%d %d-%d",(int)age,k,l); + fprintf(ficresprobcor,"\n%d %d-%d",(int)age,k,l); + for (j=1; j<=i;j++){ + fprintf(ficresprobcov," %11.3e",varpij[i][j][(int)age]); + fprintf(ficresprobcor," %11.3e",varpij[i][j][(int) age]/sqrt(varpij[i][i][(int) age])/sqrt(varpij[j][j][(int)age])); + } + } + }/* end of loop for state */ + } /* end of loop for age */ + + /* Confidence intervalle of pij */ + /* + fprintf(ficgp,"\nset noparametric;unset label"); + fprintf(ficgp,"\nset log y;unset log x; set xlabel \"Age\";set ylabel \"probability (year-1)\""); + fprintf(ficgp,"\nset ter png small\nset size 0.65,0.65"); + fprintf(fichtm,"\n
    Probability with confidence intervals expressed in year-1 :pijgr%s.png, ",optionfilefiname,optionfilefiname); + fprintf(fichtm,"\n
    ",optionfilefiname); + fprintf(ficgp,"\nset out \"pijgr%s.png\"",optionfilefiname); + fprintf(ficgp,"\nplot \"%s\" every :::%d::%d u 1:2 \"\%%lf",k1,k2,xfilevarprob); + */ + + /* Drawing ellipsoids of confidence of two variables p(k1-l1,k2-l2)*/ + first1=1; + for (k2=1; k2<=(nlstate);k2++){ + for (l2=1; l2<=(nlstate+ndeath);l2++){ + if(l2==k2) continue; + j=(k2-1)*(nlstate+ndeath)+l2; + for (k1=1; k1<=(nlstate);k1++){ + for (l1=1; l1<=(nlstate+ndeath);l1++){ + if(l1==k1) continue; + i=(k1-1)*(nlstate+ndeath)+l1; + if(i<=j) continue; + for (age=bage; age<=fage; age ++){ + if ((int)age %5==0){ + v1=varpij[i][i][(int)age]/stepm*YEARM/stepm*YEARM; + v2=varpij[j][j][(int)age]/stepm*YEARM/stepm*YEARM; + cv12=varpij[i][j][(int)age]/stepm*YEARM/stepm*YEARM; + mu1=mu[i][(int) age]/stepm*YEARM ; + mu2=mu[j][(int) age]/stepm*YEARM; + c12=cv12/sqrt(v1*v2); + /* Computing eigen value of matrix of covariance */ + lc1=((v1+v2)+sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; + lc2=((v1+v2)-sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; + /* Eigen vectors */ + v11=(1./sqrt(1+(v1-lc1)*(v1-lc1)/cv12/cv12)); + /*v21=sqrt(1.-v11*v11); *//* error */ + v21=(lc1-v1)/cv12*v11; + v12=-v21; + v22=v11; + tnalp=v21/v11; + if(first1==1){ + first1=0; + printf("%d %d%d-%d%d mu %.4e %.4e Var %.4e %.4e cor %.3f cov %.4e Eig %.3e %.3e 1stv %.3f %.3f tang %.3f\nOthers in log...\n",(int) age,k1,l1,k2,l2,mu1,mu2,v1,v2,c12,cv12,lc1,lc2,v11,v21,tnalp); + } + fprintf(ficlog,"%d %d%d-%d%d mu %.4e %.4e Var %.4e %.4e cor %.3f cov %.4e Eig %.3e %.3e 1stv %.3f %.3f tan %.3f\n",(int) age,k1,l1,k2,l2,mu1,mu2,v1,v2,c12,cv12,lc1,lc2,v11,v21,tnalp); + /*printf(fignu*/ + /* mu1+ v11*lc1*cost + v12*lc2*sin(t) */ + /* mu2+ v21*lc1*cost + v22*lc2*sin(t) */ + if(first==1){ + first=0; + 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
    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 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",\ + mu1,std,v11,sqrt(lc1),v12,sqrt(lc2),\ + mu2,std,v21,sqrt(lc1),v22,sqrt(lc2)); + }else{ + first=0; + fprintf(fichtm," %d (%.3f),",(int) age, c12); + fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2); + fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2); + fprintf(ficgp,"\nreplot %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",\ + mu1,std,v11,sqrt(lc1),v12,sqrt(lc2),\ + mu2,std,v21,sqrt(lc1),v22,sqrt(lc2)); + }/* 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); + first=1; + } /*l12 */ + } /* k12 */ + } /*l1 */ + }/* k1 */ + } /* loop covariates */ + free_ma3x(varpij,1,nlstate,1,nlstate+ndeath,(int) bage, (int)fage); free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath)); free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath)); + free_matrix(mu,1,(nlstate+ndeath)*(nlstate+ndeath),(int) bage, (int)fage); free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); } free_vector(xp,1,npar); fclose(ficresprob); - + fclose(ficresprobcov); + fclose(ficresprobcor); + fclose(ficgp); + fclose(fichtm); } + /******************* Printing html file ***********/ void printinghtml(char fileres[], char title[], char datafile[], int firstpass, \ - int lastpass, int stepm, int weightopt, char model[],\ - int imx,int jmin, int jmax, double jmeanint,char optionfile[], \ - char optionfilehtm[],char rfileres[], char optionfilegnuplot[],\ - char version[], int popforecast, int estepm ){ + int lastpass, int stepm, int weightopt, char model[],\ + int imx,int jmin, int jmax, double jmeanint,char rfileres[],\ + int popforecast, int estepm ,\ + double jprev1, double mprev1,double anprev1, \ + double jprev2, double mprev2,double anprev2){ int jj1, k1, i1, cpt; - FILE *fichtm; /*char optionfilehtm[FILENAMELENGTH];*/ - - strcpy(optionfilehtm,optionfile); - strcat(optionfilehtm,".htm"); - if((fichtm=fopen(optionfilehtm,"w"))==NULL) { + if((fichtm=fopen(optionfilehtm,"a"))==NULL) { printf("Problem with %s \n",optionfilehtm), exit(0); + fprintf(ficlog,"Problem with %s \n",optionfilehtm), exit(0); } - fprintf(fichtm," %s
    \n -Title=%s
    Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=%s
    \n -\n -Total number of observations=%d
    \n -Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf
    \n -
    -