/* $Id$
$State$
$Log$
+ Revision 1.219 2016/02/15 00:48:12 brouard
+ *** empty log message ***
+
Revision 1.218 2016/02/12 11:29:23 brouard
Summary: 0.99 Back projections
/* #define DEBUGLINMIN */
/* #define DEBUGHESS */
#define DEBUGHESSIJ
-/* #define LINMINORIGINAL /\* Don't use loop on scale in linmin (accepting nan)*\/ */
+#define LINMINORIGINAL /* Don't use loop on scale in linmin (accepting nan)*/
#define POWELL /* Instead of NLOPT */
#define POWELLF1F3 /* Skip test */
/* #define POWELLORIGINAL /\* Don't use Directest to decide new direction but original Powell test *\/ */
int *Tage;
int *Ndum; /** Freq of modality (tricode */
/* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */
-int **Tvard, *Tprod, cptcovprod, *Tvaraff;
+int **Tvard, *Tprod, cptcovprod, *Tvaraff, *invalidvarcomb;
double *lsurv, *lpop, *tpop;
double ftol=FTOL; /**< Tolerance for computing Max Likelihood */
*ncvyear= -( (int)age- (int)agefin);
/* printf("Back maxmax=%lf ncvloop=%d, age=%d, agefin=%d ncvyear=%d \n", maxmax, ncvloop, (int)age, (int)agefin, *ncvyear);*/
if(maxmax < ftolpl){
- printf("OK Back maxmax=%lf ncvloop=%d, age=%d, agefin=%d ncvyear=%d \n", maxmax, ncvloop, (int)age, (int)agefin, *ncvyear);
+ /* printf("OK Back maxmax=%lf ncvloop=%d, age=%d, agefin=%d ncvyear=%d \n", maxmax, ncvloop, (int)age, (int)agefin, *ncvyear); */
free_vector(min,1,nlstate);
free_vector(max,1,nlstate);
free_vector(meandiff,1,nlstate);
}
/************ Frequencies ********************/
-void freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \
- int *Tvaraff, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[],\
- int firstpass, int lastpass, int stepm, int weightopt, char model[])
-{ /* Some frequencies */
+ void freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \
+ int *Tvaraff, int *invalidvarcomb, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[], \
+ int firstpass, int lastpass, int stepm, int weightopt, char model[])
+ { /* Some frequencies */
- int i, m, jk, j1, bool, z1,j;
- int mi; /* Effective wave */
- int first;
- double ***freq; /* Frequencies */
- double *pp, **prop;
- double pos,posprop, k2, dateintsum=0,k2cpt=0;
- char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH], fileresphtmfr[FILENAMELENGTH];
- double agebegin, ageend;
+ int i, m, jk, j1, bool, z1,j;
+ int iind=0, iage=0;
+ int mi; /* Effective wave */
+ int first;
+ double ***freq; /* Frequencies */
+ double *pp, **prop, *posprop, *pospropt;
+ double pos=0., posproptt=0., pospropta=0., k2, dateintsum=0,k2cpt=0;
+ char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH], fileresphtmfr[FILENAMELENGTH];
+ double agebegin, ageend;
- pp=vector(1,nlstate);
- prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE);
- /* prop=matrix(1,nlstate,iagemin,iagemax+3); */
- strcpy(fileresp,"P_");
- strcat(fileresp,fileresu);
- /*strcat(fileresphtm,fileresu);*/
- if((ficresp=fopen(fileresp,"w"))==NULL) {
- printf("Problem with prevalence resultfile: %s\n", fileresp);
- fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp);
- exit(0);
- }
+ pp=vector(1,nlstate);
+ prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE);
+ posprop=vector(1,nlstate); /* Counting the number of transition starting from a live state per age */
+ pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */
+ /* prop=matrix(1,nlstate,iagemin,iagemax+3); */
+ strcpy(fileresp,"P_");
+ strcat(fileresp,fileresu);
+ /*strcat(fileresphtm,fileresu);*/
+ if((ficresp=fopen(fileresp,"w"))==NULL) {
+ printf("Problem with prevalence resultfile: %s\n", fileresp);
+ fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp);
+ exit(0);
+ }
- strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm"));
- if((ficresphtm=fopen(fileresphtm,"w"))==NULL) {
- printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));
- fprintf(ficlog,"Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));
- fflush(ficlog);
- exit(70);
- }
- else{
- fprintf(ficresphtm,"<html><head>\n<title>IMaCh PHTM_ %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \
+ strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm"));
+ if((ficresphtm=fopen(fileresphtm,"w"))==NULL) {
+ printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));
+ fprintf(ficlog,"Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));
+ fflush(ficlog);
+ exit(70);
+ }
+ else{
+ fprintf(ficresphtm,"<html><head>\n<title>IMaCh PHTM_ %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \
<hr size=\"2\" color=\"#EC5E5E\"> \n\
Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\
- fileresphtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);
- }
- fprintf(ficresphtm,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies and prevalence by age at begin of transition</h4>\n",fileresphtm, fileresphtm);
+ fileresphtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);
+ }
+ fprintf(ficresphtm,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies and prevalence by age at begin of transition</h4>\n",fileresphtm, fileresphtm);
- strcpy(fileresphtmfr,subdirfext(optionfilefiname,"PHTMFR_",".htm"));
- if((ficresphtmfr=fopen(fileresphtmfr,"w"))==NULL) {
- printf("Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));
- fprintf(ficlog,"Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));
- fflush(ficlog);
- exit(70);
- }
- else{
- fprintf(ficresphtmfr,"<html><head>\n<title>IMaCh PHTM_Frequency table %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \
+ strcpy(fileresphtmfr,subdirfext(optionfilefiname,"PHTMFR_",".htm"));
+ if((ficresphtmfr=fopen(fileresphtmfr,"w"))==NULL) {
+ printf("Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));
+ fprintf(ficlog,"Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));
+ fflush(ficlog);
+ exit(70);
+ }
+ else{
+ fprintf(ficresphtmfr,"<html><head>\n<title>IMaCh PHTM_Frequency table %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \
<hr size=\"2\" color=\"#EC5E5E\"> \n\
Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\
- fileresphtmfr,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);
- }
- fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions by age at begin of transition </h4>Unknown status is -1<br/>\n",fileresphtmfr, fileresphtmfr);
+ fileresphtmfr,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);
+ }
+ fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions by age at begin of transition </h4>Unknown status is -1<br/>\n",fileresphtmfr, fileresphtmfr);
- freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+3+AGEMARGE);
- j1=0;
+ freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+3+AGEMARGE);
+ j1=0;
- j=cptcoveff;
- if (cptcovn<1) {j=1;ncodemax[1]=1;}
+ j=cptcoveff;
+ if (cptcovn<1) {j=1;ncodemax[1]=1;}
- first=1;
+ first=1;
- for (j1 = 1; j1 <= (int) pow(2,cptcoveff); j1++){ /* Loop on covariates combination */
- /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);
- scanf("%d", i);*/
- for (i=-5; i<=nlstate+ndeath; i++)
- for (jk=-5; jk<=nlstate+ndeath; jk++)
- for(m=iagemin; m <= iagemax+3; m++)
- freq[i][jk][m]=0;
+ /* Detects if a combination j1 is empty: for a multinomial variable like 3 education levels:
+ reference=low_education V1=0,V2=0
+ med_educ V1=1 V2=0,
+ high_educ V1=0 V2=1
+ Then V1=1 and V2=1 is a noisy combination that we want to exclude for the list 2**cptcoveff
+ */
+
+ for (j1 = 1; j1 <= (int) pow(2,cptcoveff); j1++){ /* Loop on covariates combination */
+ posproptt=0.;
+ /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);
+ scanf("%d", i);*/
+ for (i=-5; i<=nlstate+ndeath; i++)
+ for (jk=-5; jk<=nlstate+ndeath; jk++)
+ for(m=iagemin; m <= iagemax+3; m++)
+ freq[i][jk][m]=0;
- for (i=1; i<=nlstate; i++)
- for(m=iagemin; m <= iagemax+3; m++)
- prop[i][m]=0;
+ for (i=1; i<=nlstate; i++) {
+ for(m=iagemin; m <= iagemax+3; m++)
+ prop[i][m]=0;
+ posprop[i]=0;
+ pospropt[i]=0;
+ }
- dateintsum=0;
- k2cpt=0;
- for (i=1; i<=imx; i++) { /* For each individual i */
- bool=1;
- if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
- for (z1=1; z1<=cptcoveff; z1++)
- if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){
- /* Tests if the value of each of the covariates of i is equal to filter j1 */
- bool=0;
- /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n",
+ dateintsum=0;
+ k2cpt=0;
+
+ for (iind=1; iind<=imx; iind++) { /* For each individual iind */
+ bool=1;
+ if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
+ for (z1=1; z1<=cptcoveff; z1++) {
+ if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){
+ /* Tests if the value of each of the covariates of i is equal to filter j1 */
+ bool=0;
+ /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n",
bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1),
j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/
- /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/
- }
- } /* cptcovn > 0 */
-
- if (bool==1){
- /* for(m=firstpass; m<=lastpass; m++){ */
- for(mi=1; mi<wav[i];mi++){
- m=mw[mi][i];
- /* dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective (mi) waves m=mw[mi][i]
- and mw[mi+1][i]. dh depends on stepm. */
- agebegin=agev[m][i]; /* Age at beginning of wave before transition*/
- ageend=agev[m][i]+(dh[m][i])*stepm/YEARM; /* Age at end of wave and transition */
- if(m >=firstpass && m <=lastpass){
- k2=anint[m][i]+(mint[m][i]/12.);
- /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/
- if(agev[m][i]==0) agev[m][i]=iagemax+1; /* All ages equal to 0 are in iagemax+1 */
- if(agev[m][i]==1) agev[m][i]=iagemax+2; /* All ages equal to 1 are in iagemax+2 */
- if (s[m][i]>0 && s[m][i]<=nlstate) /* If status at wave m is known and a live state */
- prop[s[m][i]][(int)agev[m][i]] += weight[i]; /* At age of beginning of transition, where status is known */
- if (m<lastpass) {
- /* if(s[m][i]==4 && s[m+1][i]==4) */
- /* printf(" num=%ld m=%d, i=%d s1=%d s2=%d agev at m=%d\n", num[i], m, i,s[m][i],s[m+1][i], (int)agev[m][i]); */
- if(s[m][i]==-1)
- printf(" num=%ld m=%d, i=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[i], m, i,s[m][i],s[m+1][i], (int)agev[m][i],agebegin, ageend, (int)((agebegin+ageend)/2.));
- freq[s[m][i]][s[m+1][i]][(int)agev[m][i]] += weight[i]; /* At age of beginning of transition, where status is known */
- /* freq[s[m][i]][s[m+1][i]][(int)((agebegin+ageend)/2.)] += weight[i]; */
- freq[s[m][i]][s[m+1][i]][iagemax+3] += weight[i]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */
- }
- }
- if ((agev[m][i]>1) && (agev[m][i]< (iagemax+3)) && (anint[m][i]!=9999) && (mint[m][i]!=99)) {
- dateintsum=dateintsum+k2;
- k2cpt++;
- /* printf("i=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",i, dateintsum/k2cpt, dateintsum,k2cpt, k2); */
- }
- /*}*/
- } /* end m */
- } /* end bool */
- } /* end i = 1 to imx */
-
- /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/
- pstamp(ficresp);
- if (cptcovn>0) {
- fprintf(ficresp, "\n#********** Variable ");
- fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable ");
- fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++){
- fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
- fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
- fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
- }
- fprintf(ficresp, "**********\n#");
- fprintf(ficresphtm, "**********</h3>\n");
- fprintf(ficresphtmfr, "**********</h3>\n");
- fprintf(ficlog, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
- fprintf(ficlog, "**********\n");
- }
- fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">");
- for(i=1; i<=nlstate;i++) {
- fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i);
- fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i);
- }
- fprintf(ficresp, "\n");
- fprintf(ficresphtm, "\n");
+ /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/
+ }
+ } /* end z1 */
+ } /* cptcovn > 0 */
+
+ if (bool==1){
+ /* for(m=firstpass; m<=lastpass; m++){ */
+ for(mi=1; mi<wav[iind];mi++){
+ m=mw[mi][iind];
+ /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind]
+ and mw[mi+1][iind]. dh depends on stepm. */
+ agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/
+ ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */
+ if(m >=firstpass && m <=lastpass){
+ k2=anint[m][iind]+(mint[m][iind]/12.);
+ /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/
+ if(agev[m][iind]==0) agev[m][iind]=iagemax+1; /* All ages equal to 0 are in iagemax+1 */
+ if(agev[m][iind]==1) agev[m][iind]=iagemax+2; /* All ages equal to 1 are in iagemax+2 */
+ if (s[m][iind]>0 && s[m][iind]<=nlstate) /* If status at wave m is known and a live state */
+ prop[s[m][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */
+ if (m<lastpass) {
+ /* if(s[m][iind]==4 && s[m+1][iind]==4) */
+ /* printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */
+ if(s[m][iind]==-1)
+ printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.));
+ freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */
+ /* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */
+ freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */
+ }
+ }
+ if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) {
+ dateintsum=dateintsum+k2;
+ k2cpt++;
+ /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */
+ }
+ /*}*/
+ } /* end m */
+ } /* end bool */
+ } /* end iind = 1 to imx */
+ /* prop[s][age] is feeded for any initial and valid live state as well as
+ freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */
+
+
+ /* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/
+ pstamp(ficresp);
+ if (cptcovn>0) {
+ fprintf(ficresp, "\n#********** Variable ");
+ fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable ");
+ fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable ");
+ for (z1=1; z1<=cptcoveff; z1++){
+ fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ }
+ fprintf(ficresp, "**********\n#");
+ fprintf(ficresphtm, "**********</h3>\n");
+ fprintf(ficresphtmfr, "**********</h3>\n");
+ fprintf(ficlog, "\n#********** Variable ");
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ fprintf(ficlog, "**********\n");
+ }
+ fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">");
+ for(i=1; i<=nlstate;i++) {
+ fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i);
+ fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i);
+ }
+ fprintf(ficresp, "\n");
+ fprintf(ficresphtm, "\n");
- /* Header of frequency table by age */
- fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">");
- fprintf(ficresphtmfr,"<th>Age</th> ");
- for(jk=-1; jk <=nlstate+ndeath; jk++){
- for(m=-1; m <=nlstate+ndeath; m++){
- if(jk!=0 && m!=0)
- fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m);
- }
- }
- fprintf(ficresphtmfr, "\n");
+ /* Header of frequency table by age */
+ fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">");
+ fprintf(ficresphtmfr,"<th>Age</th> ");
+ for(jk=-1; jk <=nlstate+ndeath; jk++){
+ for(m=-1; m <=nlstate+ndeath; m++){
+ if(jk!=0 && m!=0)
+ fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m);
+ }
+ }
+ fprintf(ficresphtmfr, "\n");
- /* For each age */
- for(i=iagemin; i <= iagemax+3; i++){
- fprintf(ficresphtm,"<tr>");
- if(i==iagemax+1){
- fprintf(ficlog,"1");
- fprintf(ficresphtmfr,"<tr><th>0</th> ");
- }else if(i==iagemax+2){
- fprintf(ficlog,"0");
- fprintf(ficresphtmfr,"<tr><th>Unknown</th> ");
- }else if(i==iagemax+3){
- fprintf(ficlog,"Total");
- fprintf(ficresphtmfr,"<tr><th>Total</th> ");
- }else{
- if(first==1){
- first=0;
- printf("See log file for details...\n");
- }
- fprintf(ficresphtmfr,"<tr><th>%d</th> ",i);
- fprintf(ficlog,"Age %d", i);
- }
- for(jk=1; jk <=nlstate ; jk++){
- for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++)
- pp[jk] += freq[jk][m][i];
- }
- for(jk=1; jk <=nlstate ; jk++){
- for(m=-1, pos=0; m <=0 ; m++)
- pos += freq[jk][m][i];
- if(pp[jk]>=1.e-10){
- if(first==1){
- printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[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++){
- for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)
- pp[jk] += freq[jk][m][i];
- }
- for(jk=1,pos=0,posprop=0; jk <=nlstate ; jk++){
- pos += pp[jk];
- posprop += prop[jk][i];
- }
- for(jk=1; jk <=nlstate ; 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 <= iagemax){
- if(pos>=1.e-5){
- fprintf(ficresp," %d %.5f %.0f %.0f",i,prop[jk][i]/posprop, prop[jk][i],posprop);
- fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",i,prop[jk][i]/posprop, prop[jk][i],posprop);
- /*probs[i][jk][j1]= pp[jk]/pos;*/
- /*printf("\ni=%d jk=%d j1=%d %.5f %.0f %.0f %f",i,jk,j1,pp[jk]/pos, pp[jk],pos,probs[i][jk][j1]);*/
- }
- else{
- fprintf(ficresp," %d NaNq %.0f %.0f",i,prop[jk][i],posprop);
- fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",i, prop[jk][i],posprop);
- }
- }
- }
-
- for(jk=-1; jk <=nlstate+ndeath; jk++){
- for(m=-1; m <=nlstate+ndeath; m++){
- if(freq[jk][m][i] !=0 ) { /* minimizing output */
- 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(jk!=0 && m!=0)
- fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][i]);
- }
- }
- fprintf(ficresphtmfr,"</tr>\n ");
- if(i <= iagemax){
- fprintf(ficresp,"\n");
- fprintf(ficresphtm,"</tr>\n");
- }
- if(first==1)
- printf("Others in log...\n");
- fprintf(ficlog,"\n");
- } /* end loop i */
- fprintf(ficresphtm,"</table>\n");
- fprintf(ficresphtmfr,"</table>\n");
- /*}*/
- } /* end j1 */
- dateintmean=dateintsum/k2cpt;
-
- fclose(ficresp);
- fclose(ficresphtm);
- fclose(ficresphtmfr);
- free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE);
- free_vector(pp,1,nlstate);
- free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE);
- /* End of Freq */
-}
+ /* For each age */
+ for(iage=iagemin; iage <= iagemax+3; iage++){
+ fprintf(ficresphtm,"<tr>");
+ if(iage==iagemax+1){
+ fprintf(ficlog,"1");
+ fprintf(ficresphtmfr,"<tr><th>0</th> ");
+ }else if(iage==iagemax+2){
+ fprintf(ficlog,"0");
+ fprintf(ficresphtmfr,"<tr><th>Unknown</th> ");
+ }else if(iage==iagemax+3){
+ fprintf(ficlog,"Total");
+ fprintf(ficresphtmfr,"<tr><th>Total</th> ");
+ }else{
+ if(first==1){
+ first=0;
+ printf("See log file for details...\n");
+ }
+ fprintf(ficresphtmfr,"<tr><th>%d</th> ",iage);
+ fprintf(ficlog,"Age %d", iage);
+ }
+ for(jk=1; jk <=nlstate ; jk++){
+ for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++)
+ pp[jk] += freq[jk][m][iage];
+ }
+ for(jk=1; jk <=nlstate ; jk++){
+ for(m=-1, pos=0; m <=0 ; m++)
+ pos += freq[jk][m][iage];
+ if(pp[jk]>=1.e-10){
+ if(first==1){
+ printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[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++){
+ /* posprop[jk]=0; */
+ for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */
+ pp[jk] += freq[jk][m][iage];
+ } /* pp[jk] is the total number of transitions starting from state jk and any ending status until this age */
+
+ for(jk=1,pos=0, pospropta=0.; jk <=nlstate ; jk++){
+ pos += pp[jk]; /* pos is the total number of transitions until this age */
+ posprop[jk] += prop[jk][iage]; /* prop is the number of transitions from a live state
+ from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */
+ pospropta += prop[jk][iage]; /* prop is the number of transitions from a live state
+ from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */
+ }
+ for(jk=1; jk <=nlstate ; 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( iage <= iagemax){
+ if(pos>=1.e-5){
+ fprintf(ficresp," %d %.5f %.0f %.0f",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta);
+ fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta);
+ /*probs[iage][jk][j1]= pp[jk]/pos;*/
+ /*printf("\niage=%d jk=%d j1=%d %.5f %.0f %.0f %f",iage,jk,j1,pp[jk]/pos, pp[jk],pos,probs[iage][jk][j1]);*/
+ }
+ else{
+ fprintf(ficresp," %d NaNq %.0f %.0f",iage,prop[jk][iage],pospropta);
+ fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",iage, prop[jk][iage],pospropta);
+ }
+ }
+ pospropt[jk] +=posprop[jk];
+ } /* end loop jk */
+ /* pospropt=0.; */
+ for(jk=-1; jk <=nlstate+ndeath; jk++){
+ for(m=-1; m <=nlstate+ndeath; m++){
+ if(freq[jk][m][iage] !=0 ) { /* minimizing output */
+ if(first==1){
+ printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]);
+ }
+ fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]);
+ }
+ if(jk!=0 && m!=0)
+ fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][iage]);
+ }
+ } /* end loop jk */
+ posproptt=0.;
+ for(jk=1; jk <=nlstate; jk++){
+ posproptt += pospropt[jk];
+ }
+ fprintf(ficresphtmfr,"</tr>\n ");
+ if(iage <= iagemax){
+ fprintf(ficresp,"\n");
+ fprintf(ficresphtm,"</tr>\n");
+ }
+ if(first==1)
+ printf("Others in log...\n");
+ fprintf(ficlog,"\n");
+ } /* end loop age iage */
+ fprintf(ficresphtm,"<tr><th>Tot</th>");
+ for(jk=1; jk <=nlstate ; jk++){
+ if(posproptt < 1.e-5){
+ fprintf(ficresphtm,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt);
+ }else{
+ fprintf(ficresphtm,"<td>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt);
+ }
+ }
+ fprintf(ficresphtm,"</tr>\n");
+ fprintf(ficresphtm,"</table>\n");
+ fprintf(ficresphtmfr,"</table>\n");
+ if(posproptt < 1.e-5){
+ fprintf(ficresphtm,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1);
+ fprintf(ficresphtmfr,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1);
+ fprintf(ficres,"\n This combination (%d) is not valid and no result will be produced\n\n",j1);
+ invalidvarcomb[j1]=1;
+ }else{
+ fprintf(ficresphtm,"\n <p> This combination (%d) is valid and result will be produced.</p>",j1);
+ invalidvarcomb[j1]=0;
+ }
+ fprintf(ficresphtmfr,"</table>\n");
+ } /* end selected combination of covariate j1 */
+ dateintmean=dateintsum/k2cpt;
+
+ fclose(ficresp);
+ fclose(ficresphtm);
+ fclose(ficresphtmfr);
+ free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE);
+ free_vector(pospropt,1,nlstate);
+ free_vector(posprop,1,nlstate);
+ free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE);
+ free_vector(pp,1,nlstate);
+ /* End of Freq */
+ }
/************ Prevalence ********************/
void prevalence(double ***probs, double agemin, double agemax, int **s, double **agev, int nlstate, int imx, int *Tvar, int **nbcode, int *ncodemax,double **mint,double **anint, double dateprev1,double dateprev2, int firstpass, int lastpass)
}
/*********** Tricode ****************************/
-void tricode(int *Tvar, int **nbcode, int imx, int *Ndum)
+ void tricode(int *cptcov, int *Tvar, int **nbcode, int imx, int *Ndum)
{
/**< Uses cptcovn+2*cptcovprod as the number of covariates */
/* Tvar[i]=atoi(stre); find 'n' in Vn and stores in Tvar. If model=V2+V1 Tvar[1]=2 and Tvar[2]=1
* Boring subroutine which should only output nbcode[Tvar[j]][k]
* Tvar[5] in V2+V1+V3*age+V2*V4 is 2 (V2)
- * nbcode[Tvar[j]][1]=
+ * nbcode[Tvar[5]][1]= nbcode[2][1]=0, nbcode[2][2]=1 (usually);
*/
int ij=1, k=0, j=0, i=0, maxncov=NCOVMAX;
int modmincovj=0; /* Modality min of covariates j */
- cptcoveff=0;
+ /* cptcoveff=0; */
+ *cptcov=0;
for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */
}
}
/* ij--; */
- cptcoveff=ij; /*Number of total covariates*/
+ /* cptcoveff=ij; /\*Number of total covariates*\/ */
+ *cptcov=ij; /*Number of total covariates*/
}
tj = (int) pow(2,cptcoveff);
if (cptcovn<1) {tj=1;ncodemax[1]=1;}
j1=0;
- for(j1=1; j1<=tj;j1++){
- /*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]][codtabm(j1,z1)]);
- fprintf(ficresprob, "**********\n#\n");
- fprintf(ficresprobcov, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
- fprintf(ficresprobcov, "**********\n#\n");
-
- fprintf(ficgp, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficgp, " V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
- fprintf(ficgp, "**********\n#\n");
-
-
- fprintf(fichtmcov, "\n<hr size=\"2\" color=\"#EC5E5E\">********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
- fprintf(fichtmcov, "**********\n<hr size=\"2\" color=\"#EC5E5E\">");
-
- fprintf(ficresprobcor, "\n#********** Variable ");
- for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
- fprintf(ficresprobcor, "**********\n#");
- }
-
- 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 (age=bage; age<=fage; age ++){
- cov[2]=age;
- if(nagesqr==1)
- cov[3]= age*age;
- for (k=1; k<=cptcovn;k++) {
- cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,k)];
- /*cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,Tvar[k])];*//* j1 1 2 3 4
- * 1 1 1 1 1
- * 2 2 1 1 1
- * 3 1 2 1 1
- */
- /* nbcode[1][1]=0 nbcode[1][2]=1;*/
- }
- /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */
- for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2];
- for (k=1; k<=cptcovprod;k++)
- cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)];
-
-
- for(theta=1; theta <=npar; theta++){
- for(i=1; i<=npar; i++)
- xp[i] = x[i] + (i==theta ?delti[theta]:(double)0);
-
- pmij(pmmij,cov,ncovmodel,xp,nlstate);
-
- k=0;
- for(i=1; i<= (nlstate); i++){
- for(j=1; j<=(nlstate+ndeath);j++){
- k=k+1;
- gp[k]=pmmij[i][j];
- }
- }
-
- for(i=1; i<=npar; i++)
- xp[i] = x[i] - (i==theta ?delti[theta]:(double)0);
-
- pmij(pmmij,cov,ncovmodel,xp,nlstate);
- k=0;
- 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)*(nlstate+ndeath); i++)
- gradg[theta][i]=(gp[i]-gm[i])/(double)2./delti[theta];
- }
-
- for(j=1; j<=(nlstate)*(nlstate+ndeath);j++)
- for(theta=1; theta <=npar; theta++)
- trgradg[j][theta]=gradg[theta][j];
-
- 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);
+ for(j1=1; j1<=tj;j1++){ /* For each valid combination of covariates */
+ if (cptcovn>0) {
+ fprintf(ficresprob, "\n#********** Variable ");
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ fprintf(ficresprob, "**********\n#\n");
+ fprintf(ficresprobcov, "\n#********** Variable ");
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ fprintf(ficresprobcov, "**********\n#\n");
+
+ fprintf(ficgp, "\n#********** Variable ");
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficgp, " V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ fprintf(ficgp, "**********\n#\n");
+
+
+ fprintf(fichtmcov, "\n<hr size=\"2\" color=\"#EC5E5E\">********** Variable ");
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ fprintf(fichtmcov, "**********\n<hr size=\"2\" color=\"#EC5E5E\">");
+
+ fprintf(ficresprobcor, "\n#********** Variable ");
+ for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+ fprintf(ficresprobcor, "**********\n#");
+ if(invalidvarcomb[j1]){
+ fprintf(ficgp,"\n#Combination (%d) ignored because no cases \n",j1);
+ fprintf(fichtmcov,"\n<h3>Combination (%d) ignored because no cases </h3>\n",j1);
+ continue;
+ }
+ }
+ 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 (age=bage; age<=fage; age ++){
+ cov[2]=age;
+ if(nagesqr==1)
+ cov[3]= age*age;
+ for (k=1; k<=cptcovn;k++) {
+ cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,k)];
+ /*cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,Tvar[k])];*//* j1 1 2 3 4
+ * 1 1 1 1 1
+ * 2 2 1 1 1
+ * 3 1 2 1 1
+ */
+ /* nbcode[1][1]=0 nbcode[1][2]=1;*/
+ }
+ /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */
+ for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2];
+ for (k=1; k<=cptcovprod;k++)
+ cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)];
+
+
+ for(theta=1; theta <=npar; theta++){
+ for(i=1; i<=npar; i++)
+ xp[i] = x[i] + (i==theta ?delti[theta]:(double)0);
+
+ pmij(pmmij,cov,ncovmodel,xp,nlstate);
+
+ k=0;
+ for(i=1; i<= (nlstate); i++){
+ for(j=1; j<=(nlstate+ndeath);j++){
+ k=k+1;
+ gp[k]=pmmij[i][j];
+ }
+ }
+
+ for(i=1; i<=npar; i++)
+ xp[i] = x[i] - (i==theta ?delti[theta]:(double)0);
+
+ pmij(pmmij,cov,ncovmodel,xp,nlstate);
+ k=0;
+ 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)*(nlstate+ndeath); i++)
+ gradg[theta][i]=(gp[i]-gm[i])/(double)2./delti[theta];
+ }
- pmij(pmmij,cov,ncovmodel,x,nlstate);
-
- k=0;
- for(i=1; i<=(nlstate); i++){
- for(j=1; j<=(nlstate+ndeath);j++){
- k=k+1;
- mu[k][(int) age]=pmmij[i][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,(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); i++){
+ for(j=1; j<=(nlstate+ndeath);j++){
+ k=k+1;
+ mu[k][(int) age]=pmmij[i][j];
+ }
+ }
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)*(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++;
- 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++){
- /* printf(" k=%d l=%d i=%d j=%d\n",k,l,i,j);fflush(stdout); */
- 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 */
- free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath));
- free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath));
- free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);
- free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);
-
- /* Confidence intervalle of pij */
- /*
- fprintf(ficgp,"\nunset parametric;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<br>Probability with confidence intervals expressed in year<sup>-1</sup> :<a href=\"pijgr%s.png\">pijgr%s.png</A>, ",optionfilefiname,optionfilefiname);
- fprintf(fichtm,"\n<br><img src=\"pijgr%s.png\"> ",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;first2=2;
- 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.;
- if ((lc2 <0) || (lc1 <0) ){
- if(first2==1){
- first1=0;
- printf("Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS. See log file for details...\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);
- }
- fprintf(ficlog,"Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS.\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);fflush(ficlog);
- /* lc1=fabs(lc1); */ /* If we want to have them positive */
- /* lc2=fabs(lc2); */
- }
-
- /* 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,"\n# Ellipsoids of confidence\n#\n");
- 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 svg size 640, 480");
- fprintf(fichtmcov,"\n<br>Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year<sup>-1</sup>\
- :<a href=\"%s_%d%1d%1d-%1d%1d.svg\">\
+ 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)*(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++;
+ 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++){
+ /* printf(" k=%d l=%d i=%d j=%d\n",k,l,i,j);fflush(stdout); */
+ 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 */
+ free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath));
+ free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath));
+ free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);
+ free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);
+
+ /* Confidence intervalle of pij */
+ /*
+ fprintf(ficgp,"\nunset parametric;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<br>Probability with confidence intervals expressed in year<sup>-1</sup> :<a href=\"pijgr%s.png\">pijgr%s.png</A>, ",optionfilefiname,optionfilefiname);
+ fprintf(fichtm,"\n<br><img src=\"pijgr%s.png\"> ",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;first2=2;
+ 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.;
+ if ((lc2 <0) || (lc1 <0) ){
+ if(first2==1){
+ first1=0;
+ printf("Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS. See log file for details...\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);
+ }
+ fprintf(ficlog,"Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS.\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);fflush(ficlog);
+ /* lc1=fabs(lc1); */ /* If we want to have them positive */
+ /* lc2=fabs(lc2); */
+ }
+
+ /* 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,"\n# Ellipsoids of confidence\n#\n");
+ 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 svg size 640, 480");
+ fprintf(fichtmcov,"\n<br>Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year<sup>-1</sup>\
+ :<a href=\"%s_%d%1d%1d-%1d%1d.svg\"> \
%s_%d%1d%1d-%1d%1d.svg</A>, ",k1,l1,k2,l2,\
- subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2,\
- subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
- fprintf(fichtmcov,"\n<br><img src=\"%s_%d%1d%1d-%1d%1d.svg\"> ",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
- fprintf(fichtmcov,"\n<br> Correlation at age %d (%.3f),",(int) age, c12);
- fprintf(ficgp,"\nset out \"%s_%d%1d%1d-%1d%1d.svg\"",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
+ subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2, \
+ subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
+ fprintf(fichtmcov,"\n<br><img src=\"%s_%d%1d%1d-%1d%1d.svg\"> ",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
+ fprintf(fichtmcov,"\n<br> Correlation at age %d (%.3f),",(int) age, c12);
+ fprintf(ficgp,"\nset out \"%s_%d%1d%1d-%1d%1d.svg\"",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",\
- mu1,std,v11,sqrt(lc1),v12,sqrt(lc2),\
- mu2,std,v21,sqrt(lc1),v22,sqrt(lc2));
- }else{
- first=0;
- fprintf(fichtmcov," %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;\nset out \"%s_%d%1d%1d-%1d%1d.svg\";replot;set out;",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
- first=1;
- } /*l12 */
- } /* k12 */
- } /*l1 */
- }/* k1 */
- /* } */ /* loop covariates */
- }
+ 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(fichtmcov," %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;\nset out \"%s_%d%1d%1d-%1d%1d.svg\";replot;set out;",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
+ first=1;
+ } /*l12 */
+ } /* k12 */
+ } /*l1 */
+ }/* k1 */
+ } /* loop on combination of covariates j1 */
free_ma3x(varpij,1,nlstate,1,nlstate+ndeath,(int) bage, (int)fage);
free_matrix(mu,1,(nlstate+ndeath)*(nlstate+ndeath),(int) bage, (int)fage);
free_matrix(doldm,1,(nlstate)*(nlstate+ndeath),1,(nlstate)*(nlstate+ndeath));
jj1=0;
for(k1=1; k1<=m;k1++){
+
/* for(i1=1; i1<=ncodemax[k1];i1++){ */
- jj1++;
- if (cptcovn > 0) {
- fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates");
- for (cpt=1; cpt<=cptcoveff;cpt++){
- fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);
- printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout);
- }
- fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
- }
- /* aij, bij */
- fprintf(fichtm,"<br>- Logit model (yours is: 1+age+%s), for example: logit(pij)=log(pij/pii)= aij+ bij age + V1 age + etc. as a function of age: <a href=\"%s_%d-1.svg\">%s_%d-1.svg</a><br> \
+ jj1++;
+ if (cptcovn > 0) {
+ fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates");
+ for (cpt=1; cpt<=cptcoveff;cpt++){
+ fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);
+ printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout);
+ }
+ fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
+ if(invalidvarcomb[k1]){
+ fprintf(fichtm,"\n<h3>Combination (%d) ignored because no cases </h3>\n",k1);
+ printf("\nCombination (%d) ignored because no cases \n",k1);
+ continue;
+ }
+ }
+ /* aij, bij */
+ fprintf(fichtm,"<br>- Logit model (yours is: 1+age+%s), for example: logit(pij)=log(pij/pii)= aij+ bij age + V1 age + etc. as a function of age: <a href=\"%s_%d-1.svg\">%s_%d-1.svg</a><br> \
<img src=\"%s_%d-1.svg\">",model,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1);
- /* Pij */
- fprintf(fichtm,"<br>\n- P<sub>ij</sub> or conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s_%d-2.svg\">%s_%d-2.svg</a><br> \
+ /* Pij */
+ fprintf(fichtm,"<br>\n- P<sub>ij</sub> or conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s_%d-2.svg\">%s_%d-2.svg</a><br> \
<img src=\"%s_%d-2.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1);
- /* Quasi-incidences */
- fprintf(fichtm,"<br>\n- I<sub>ij</sub> or Conditional probabilities to be observed in state j being in state i %d (stepm) months\
- before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too,\
+ /* Quasi-incidences */
+ fprintf(fichtm,"<br>\n- I<sub>ij</sub> or Conditional probabilities to be observed in state j being in state i %d (stepm) months\
+ before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too, \
incidence (rates) are the limit when h tends to zero of the ratio of the probability <sub>h</sub>P<sub>ij</sub> \
divided by h: <sub>h</sub>P<sub>ij</sub>/h : <a href=\"%s_%d-3.svg\">%s_%d-3.svg</a><br> \
<img src=\"%s_%d-3.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1);
- /* Survival functions (period) in state j */
- for(cpt=1; cpt<=nlstate;cpt++){
- fprintf(fichtm,"<br>\n- Survival functions in state %d. Or probability to survive in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \
+ /* Survival functions (period) in state j */
+ for(cpt=1; cpt<=nlstate;cpt++){
+ fprintf(fichtm,"<br>\n- Survival functions in state %d. Or probability to survive in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \
<img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"LIJ_"),cpt,jj1,subdirf2(optionfilefiname,"LIJ_"),cpt,jj1,subdirf2(optionfilefiname,"LIJ_"),cpt,jj1);
- }
- /* State specific survival functions (period) */
- for(cpt=1; cpt<=nlstate;cpt++){
- fprintf(fichtm,"<br>\n- Survival functions from state %d in each live state and total.\
- Or probability to survive in various states (1 to %d) being in state %d at different ages.\
+ }
+ /* State specific survival functions (period) */
+ for(cpt=1; cpt<=nlstate;cpt++){
+ fprintf(fichtm,"<br>\n- Survival functions from state %d in each live state and total.\
+ Or probability to survive in various states (1 to %d) being in state %d at different ages. \
<a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> <img src=\"%s_%d-%d.svg\">", cpt, nlstate, cpt, subdirf2(optionfilefiname,"LIJT_"),cpt,jj1,subdirf2(optionfilefiname,"LIJT_"),cpt,jj1,subdirf2(optionfilefiname,"LIJT_"),cpt,jj1);
- }
- /* Period (stable) prevalence in each health state */
- for(cpt=1; cpt<=nlstate;cpt++){
- fprintf(fichtm,"<br>\n- Convergence to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a><br> \
+ }
+ /* Period (stable) prevalence in each health state */
+ for(cpt=1; cpt<=nlstate;cpt++){
+ fprintf(fichtm,"<br>\n- Convergence to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a><br> \
<img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"P_"),cpt,jj1,subdirf2(optionfilefiname,"P_"),cpt,jj1,subdirf2(optionfilefiname,"P_"),cpt,jj1);
- }
- if(backcast==1){
+ }
+ if(backcast==1){
/* Period (stable) back prevalence in each health state */
for(cpt=1; cpt<=nlstate;cpt++){
fprintf(fichtm,"<br>\n- Convergence to period (stable) back prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a><br> \
<img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"PB_"),cpt,jj1,subdirf2(optionfilefiname,"PB_"),cpt,jj1,subdirf2(optionfilefiname,"PB_"),cpt,jj1);
}
- }
- if(prevfcast==1){
- /* Projection of prevalence up to period (stable) prevalence in each health state */
- for(cpt=1; cpt<=nlstate;cpt++){
- fprintf(fichtm,"<br>\n- Projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f) up to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \
+ }
+ if(prevfcast==1){
+ /* Projection of prevalence up to period (stable) prevalence in each health state */
+ for(cpt=1; cpt<=nlstate;cpt++){
+ fprintf(fichtm,"<br>\n- Projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f) up to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \
<img src=\"%s_%d-%d.svg\">", dateprev1, dateprev2, cpt, cpt, nlstate, subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1);
- }
- }
-
- for(cpt=1; cpt<=nlstate;cpt++) {
- fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) (or area under each survival functions): <a href=\"%s_%d%d.svg\">%s_%d%d.svg</a> <br> \
+ }
+ }
+
+ for(cpt=1; cpt<=nlstate;cpt++) {
+ fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) (or area under each survival functions): <a href=\"%s_%d%d.svg\">%s_%d%d.svg</a> <br> \
<img src=\"%s_%d%d.svg\">",cpt,nlstate,subdirf2(optionfilefiname,"EXP_"),cpt,jj1,subdirf2(optionfilefiname,"EXP_"),cpt,jj1,subdirf2(optionfilefiname,"EXP_"),cpt,jj1);
- }
+ }
/* } /\* end i1 *\/ */
}/* End k1 */
fprintf(fichtm,"</ul>");
jj1=0;
for(k1=1; k1<=m;k1++){
- /* for(i1=1; i1<=ncodemax[k1];i1++){ */
- jj1++;
+ /* for(i1=1; i1<=ncodemax[k1];i1++){ */
+ jj1++;
if (cptcovn > 0) {
fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates");
for (cpt=1; cpt<=cptcoveff;cpt++)
- fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);
+ fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);
fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
+
+ if(invalidvarcomb[k1]){
+ fprintf(fichtm,"\n<h4>Combination (%d) ignored because no cases </h4>\n",k1);
+ continue;
+ }
}
for(cpt=1; cpt<=nlstate;cpt++) {
fprintf(fichtm,"\n<br>- Observed (cross-sectional) and period (incidence based) \
void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar, double agemaxpar, double fage , int prevfcast, int backcast, char pathc[], double p[]){
char dirfileres[132],optfileres[132];
+ char gplotcondition[132];
int cpt=0,k1=0,i=0,k=0,j=0,jk=0,k2=0,k3=0,ij=0,l=0;
int lv=0, vlv=0, kl=0;
int ng=0;
strcpy(optfileres,"vpl");
/* 1eme*/
for (cpt=1; cpt<= nlstate ; cpt ++) { /* For each live state */
- for (k1=1; k1<= m ; k1 ++) { /* For each combination of covariate */
+ for (k1=1; k1<= m ; k1 ++) { /* For each valid combination of covariate */
/* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */
fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files ");
for (k=1; k<=cptcoveff; k++){ /* For each covariate k get corresponding value lv for combination k1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
vlv= nbcode[Tvaraff[k]][lv]; /* vlv is the value of the covariate lv, 0 or 1 */
/* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv */
- fprintf(ficgp," V%d=%d ",k,vlv);
+ fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
}
fprintf(ficgp,"\n#\n");
+ if(invalidvarcomb[k1]){
+ fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);
+ continue;
+ }
fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"V_"),cpt,k1);
fprintf(ficgp,"\n#set out \"V_%s_%d-%d.svg\" \n",optionfilefiname,cpt,k1);
/*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */
/* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/
if(k==cptcoveff){
- fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' with line ",kl+1, k,kl+1+1,nbcode[Tvaraff[k]][lv], \
- 4+(cpt-1), cpt );
+ fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' with line ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \
+ 6+(cpt-1), cpt );
}else{
- fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, k,kl+1+1,nbcode[Tvaraff[k]][lv]);
+ fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv]);
kl++;
}
} /* end covariate */
} /* cpt */
/*2 eme*/
for (k1=1; k1<= m ; k1 ++) {
+
fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files ");
for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
vlv= nbcode[Tvaraff[k]][lv];
- fprintf(ficgp," V%d=%d ",k,vlv);
+ fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
}
fprintf(ficgp,"\n#\n");
+ if(invalidvarcomb[k1]){
+ fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);
+ continue;
+ }
fprintf(ficgp,"\nset out \"%s_%d.svg\" \n",subdirf2(optionfilefiname,"E_"),k1);
for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/
/*3eme*/
for (k1=1; k1<= m ; k1 ++) {
+
for (cpt=1; cpt<= nlstate ; cpt ++) {
fprintf(ficgp,"\n# 3d: Life expectancy with EXP_ files: cov=%d state=%d",k1, cpt);
for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
vlv= nbcode[Tvaraff[k]][lv];
- fprintf(ficgp," V%d=%d ",k,vlv);
+ fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
}
fprintf(ficgp,"\n#\n");
+ if(invalidvarcomb[k1]){
+ fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);
+ continue;
+ }
/* k=2+nlstate*(2*cpt-2); */
k=2+(nlstate+1)*(cpt-1);
}
}
+ /* 4eme */
/* Survival functions (period) from state i in state j by initial state i */
for (k1=1; k1<= m ; k1 ++) { /* For each multivariate if any */
+
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
fprintf(ficgp,"\n#\n#\n# Survival functions in state j : 'LIJ_' files, cov=%d state=%d",k1, cpt);
for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
- /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
- /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
- /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
- vlv= nbcode[Tvaraff[k]][lv];
- fprintf(ficgp," V%d=%d ",k,vlv);
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
+ /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
+ /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
+ /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
+ vlv= nbcode[Tvaraff[k]][lv];
+ fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
}
fprintf(ficgp,"\n#\n");
-
+ if(invalidvarcomb[k1]){
+ fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);
+ continue;
+ }
+
fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJ_"),cpt,k1);
fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\
-set ter svg size 640, 480\n\
-unset log y\n\
+set ter svg size 640, 480\n \
+unset log y\n \
plot [%.f:%.f] ", ageminpar, agemaxpar);
k=3;
for (i=1; i<= nlstate ; i ++){
- if(i==1){
- fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
- }else{
- fprintf(ficgp,", '' ");
- }
- l=(nlstate+ndeath)*(i-1)+1;
- fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);
- for (j=2; j<= nlstate+ndeath ; j ++)
- fprintf(ficgp,"+$%d",k+l+j-1);
- fprintf(ficgp,")) t \"l(%d,%d)\" w l",i,cpt);
+ if(i==1){
+ fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
+ }else{
+ fprintf(ficgp,", '' ");
+ }
+ l=(nlstate+ndeath)*(i-1)+1;
+ fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);
+ for (j=2; j<= nlstate+ndeath ; j ++)
+ fprintf(ficgp,"+$%d",k+l+j-1);
+ fprintf(ficgp,")) t \"l(%d,%d)\" w l",i,cpt);
} /* nlstate */
fprintf(ficgp,"\nset out\n");
} /* end cpt state*/
} /* end covariate */
-
+
+/* 5eme */
/* Survival functions (period) from state i in state j by final state j */
for (k1=1; k1<= m ; k1 ++) { /* For each covariate if any */
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each inital state */
+
fprintf(ficgp,"\n#\n#\n# Survival functions in state j and all livestates from state i by final state j: 'lij' files, cov=%d state=%d",k1, cpt);
for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
- /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
- /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
- /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
- vlv= nbcode[Tvaraff[k]][lv];
- fprintf(ficgp," V%d=%d ",k,vlv);
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
+ /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
+ /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
+ /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
+ vlv= nbcode[Tvaraff[k]][lv];
+ fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
}
fprintf(ficgp,"\n#\n");
-
+ if(invalidvarcomb[k1]){
+ fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);
+ continue;
+ }
+
fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJT_"),cpt,k1);
fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\
-set ter svg size 640, 480\n\
-unset log y\n\
+set ter svg size 640, 480\n \
+unset log y\n \
plot [%.f:%.f] ", ageminpar, agemaxpar);
k=3;
for (j=1; j<= nlstate ; j ++){ /* Lived in state j */
- if(j==1)
- fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
- else
- fprintf(ficgp,", '' ");
- l=(nlstate+ndeath)*(cpt-1) +j;
- fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l);
- /* for (i=2; i<= nlstate+ndeath ; i ++) */
- /* fprintf(ficgp,"+$%d",k+l+i-1); */
- fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j);
+ if(j==1)
+ fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
+ else
+ fprintf(ficgp,", '' ");
+ l=(nlstate+ndeath)*(cpt-1) +j;
+ fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l);
+ /* for (i=2; i<= nlstate+ndeath ; i ++) */
+ /* fprintf(ficgp,"+$%d",k+l+i-1); */
+ fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j);
} /* nlstate */
fprintf(ficgp,", '' ");
fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):(",k1);
for (j=1; j<= nlstate ; j ++){ /* Lived in state j */
- l=(nlstate+ndeath)*(cpt-1) +j;
- if(j < nlstate)
- fprintf(ficgp,"$%d +",k+l);
- else
- fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt);
+ l=(nlstate+ndeath)*(cpt-1) +j;
+ if(j < nlstate)
+ fprintf(ficgp,"$%d +",k+l);
+ else
+ fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt);
}
fprintf(ficgp,"\nset out\n");
} /* end cpt state*/
} /* end covariate */
-
+
+/* 6eme */
/* CV preval stable (period) for each covariate */
for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
+
fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt);
for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
- /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
- /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
- /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
- vlv= nbcode[Tvaraff[k]][lv];
- fprintf(ficgp," V%d=%d ",k,vlv);
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
+ /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
+ /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
+ /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
+ vlv= nbcode[Tvaraff[k]][lv];
+ fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
}
fprintf(ficgp,"\n#\n");
+ if(invalidvarcomb[k1]){
+ fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);
+ continue;
+ }
fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"P_"),cpt,k1);
fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\
plot [%.f:%.f] ", ageminpar, agemaxpar);
k=3; /* Offset */
for (i=1; i<= nlstate ; i ++){
- if(i==1)
- fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
- else
- fprintf(ficgp,", '' ");
- l=(nlstate+ndeath)*(i-1)+1;
- fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);
- for (j=2; j<= nlstate ; j ++)
- fprintf(ficgp,"+$%d",k+l+j-1);
- fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt);
+ if(i==1)
+ fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
+ else
+ fprintf(ficgp,", '' ");
+ l=(nlstate+ndeath)*(i-1)+1;
+ fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);
+ for (j=2; j<= nlstate ; j ++)
+ fprintf(ficgp,"+$%d",k+l+j-1);
+ fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt);
} /* nlstate */
fprintf(ficgp,"\nset out\n");
} /* end cpt state*/
} /* end covariate */
+
+
+/* 7eme */
if(backcast == 1){
/* CV back preval stable (period) for each covariate */
for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */
for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
- fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt);
- for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
- lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
- /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
- /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
- /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
- vlv= nbcode[Tvaraff[k]][lv];
- fprintf(ficgp," V%d=%d ",k,vlv);
- }
- fprintf(ficgp,"\n#\n");
-
- fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1);
- fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\
-set ter svg size 640, 480\n \
-unset log y\n \
+ fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt);
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
+ /* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
+ /* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
+ /* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
+ vlv= nbcode[Tvaraff[k]][lv];
+ fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
+ }
+ fprintf(ficgp,"\n#\n");
+ if(invalidvarcomb[k1]){
+ fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);
+ continue;
+ }
+
+ fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1);
+ fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\
+set ter svg size 640, 480\n \
+unset log y\n \
plot [%.f:%.f] ", ageminpar, agemaxpar);
- k=3; /* Offset */
- for (i=1; i<= nlstate ; i ++){
- if(i==1)
- fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJB_"));
- else
- fprintf(ficgp,", '' ");
- /* l=(nlstate+ndeath)*(i-1)+1; */
- l=(nlstate+ndeath)*(cpt-1)+1;
- /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); /\* a vérifier *\/ */
- /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l+(cpt-1)+i-1); /\* a vérifier *\/ */
- fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d",k1,k+l+(cpt-1)+i-1); /* a vérifier */
- /* for (j=2; j<= nlstate ; j ++) */
- /* fprintf(ficgp,"+$%d",k+l+j-1); */
- /* /\* fprintf(ficgp,"+$%d",k+l+j-1); *\/ */
- fprintf(ficgp,") t \"bprev(%d,%d)\" w l",i,cpt);
- } /* nlstate */
- fprintf(ficgp,"\nset out\n");
+ k=3; /* Offset */
+ for (i=1; i<= nlstate ; i ++){
+ if(i==1)
+ fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJB_"));
+ else
+ fprintf(ficgp,", '' ");
+ /* l=(nlstate+ndeath)*(i-1)+1; */
+ l=(nlstate+ndeath)*(cpt-1)+1;
+ /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); /\* a vérifier *\/ */
+ /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l+(cpt-1)+i-1); /\* a vérifier *\/ */
+ fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d",k1,k+l+(cpt-1)+i-1); /* a vérifier */
+ /* for (j=2; j<= nlstate ; j ++) */
+ /* fprintf(ficgp,"+$%d",k+l+j-1); */
+ /* /\* fprintf(ficgp,"+$%d",k+l+j-1); *\/ */
+ fprintf(ficgp,") t \"bprev(%d,%d)\" w l",i,cpt);
+ } /* nlstate */
+ fprintf(ficgp,"\nset out\n");
} /* end cpt state*/
} /* end covariate */
} /* End if backcast */
+ /* 8eme */
if(prevfcast==1){
/* Projection from cross-sectional to stable (period) for each covariate */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
vlv= nbcode[Tvaraff[k]][lv];
- fprintf(ficgp," V%d=%d ",k,vlv);
+ fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
}
fprintf(ficgp,"\n#\n");
+ if(invalidvarcomb[k1]){
+ fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);
+ continue;
+ }
fprintf(ficgp,"# hpijx=probability over h years, hp.jx is weighted by observed prev\n ");
fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PROJ_"),cpt,k1);
/*# V1 = 1 V2 = 0 yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/
/*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */
}
- fprintf(ficgp," u %d:((",ioffset);
+ fprintf(ficgp," u %d:(",ioffset);
kl=0;
- for (k=1; k<=cptcoveff; k++){ /* For each covariate */
+ strcpy(gplotcondition,"(");
+ for (k=1; k<=cptcoveff; k++){ /* For each covariate writing the chain of conditions */
lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to combination k1 and covariate k */
/* decodtabm(1,1,4) = 1 because h=1 k= (1) 1 1 1 */
/* decodtabm(1,2,4) = 1 because h=1 k= 1 (1) 1 1 */
/* decodtabm(13,3,4)= 2 because h=13 k= 1 1 (2) 2 */
- vlv= nbcode[Tvaraff[k]][lv];
+ vlv= nbcode[Tvaraff[k]][lv]; /* Value of the modality of Tvaraff[k] */
kl++;
- /* kl=6+(cpt-1)*(nlstate+1)+1+(i-1); /\* 6+(1-1)*(2+1)+1+(1-1)=7, 6+(2-1)(2+1)+1+(1-1)=10 *\/ */
- /*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */
- /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */
- /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/
- if(k==cptcoveff){
- if(i==nlstate+1){
- if(cptcoveff ==1){
- fprintf(ficgp,"$%d==%d && $%d==%d)? $%d/(1.-$%d) : 1/0) t 'p.%d' with line ",kl, k,kl+1,nbcode[Tvaraff[k]][lv], \
- ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt );
- }else{
- fprintf(ficgp,"$%d==%d && $%d==%d)? $%d/(1.-$%d) : 1/0) t 'p.%d' with line ",kl, k,kl+1,nbcode[Tvaraff[k]][lv], \
- ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt );
- }
- }else{
- if(cptcoveff ==1){
- fprintf(ficgp,"$%d==%d && $%d==%d)? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ",kl, k,kl+1,nbcode[Tvaraff[k]][lv], \
- ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt );
- }else{
- fprintf(ficgp,"$%d==%d && $%d==%d)? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ",kl, k,kl+1,nbcode[Tvaraff[k]][lv], \
- ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt );
- }
- }
- }else{ /* k < cptcoveff */
- fprintf(ficgp,"$%d==%d && $%d==%d && ",kl, k,kl+1,nbcode[Tvaraff[k]][lv]);
- kl++;
- }
- } /* end covariate */
+ sprintf(gplotcondition+strlen(gplotcondition),"$%d==%d && $%d==%d " ,kl,Tvaraff[k], kl+1, nbcode[Tvaraff[k]][lv]);
+ kl++;
+ if(k <cptcoveff && cptcoveff>1)
+ sprintf(gplotcondition+strlen(gplotcondition)," && ");
+ }
+ strcpy(gplotcondition+strlen(gplotcondition),")");
+ /* kl=6+(cpt-1)*(nlstate+1)+1+(i-1); /\* 6+(1-1)*(2+1)+1+(1-1)=7, 6+(2-1)(2+1)+1+(1-1)=10 *\/ */
+ /*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */
+ /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */
+ /* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/
+ if(i==nlstate+1){
+ fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p.%d' with line ", gplotcondition, \
+ ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt );
+ }else{
+ fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ", gplotcondition, \
+ ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt );
+ }
} /* end if covariate */
} /* nlstate */
fprintf(ficgp,"\nset out\n");
double *agemingood, *agemaxgood; /* Currently identical for all covariates */
- modcovmax=2*cptcoveff;/* Max number of modalities. We suppose
- a covariate has 2 modalities, should be equal to ncovcombmax */
+ /* modcovmax=2*cptcoveff;/\* Max number of modalities. We suppose */
+ /* a covariate has 2 modalities, should be equal to ncovcombmax *\/ */
- sumnewp = vector(1,modcovmax);
- sumnewm = vector(1,modcovmax);
- agemingood = vector(1,modcovmax);
- agemaxgood = vector(1,modcovmax);
+ sumnewp = vector(1,ncovcombmax);
+ sumnewm = vector(1,ncovcombmax);
+ agemingood = vector(1,ncovcombmax);
+ agemaxgood = vector(1,ncovcombmax);
- for (cptcod=1;cptcod<=modcovmax;cptcod++){
+ for (cptcod=1;cptcod<=ncovcombmax;cptcod++){
sumnewm[cptcod]=0.;
sumnewp[cptcod]=0.;
agemingood[cptcod]=0;
agemaxgood[cptcod]=0;
}
- if (cptcovn<1) modcovmax=1; /* At least 1 pass */
+ if (cptcovn<1) ncovcombmax=1; /* At least 1 pass */
if(mobilav==1||mobilav ==3 ||mobilav==5 ||mobilav== 7){
if(mobilav==1) mobilavrange=5; /* default */
else mobilavrange=mobilav;
for (age=bage; age<=fage; age++)
for (i=1; i<=nlstate;i++)
- for (cptcod=1;cptcod<=modcovmax;cptcod++)
+ for (cptcod=1;cptcod<=ncovcombmax;cptcod++)
mobaverage[(int)age][i][cptcod]=probs[(int)age][i][cptcod];
/* We keep the original values on the extreme ages bage, fage and for
fage+1 and bage-1 we use a 3 terms moving average; for fage+2 bage+2
for (mob=3;mob <=mobilavrange;mob=mob+2){
for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){
for (i=1; i<=nlstate;i++){
- for (cptcod=1;cptcod<=modcovmax;cptcod++){
+ for (cptcod=1;cptcod<=ncovcombmax;cptcod++){
mobaverage[(int)age][i][cptcod] =probs[(int)age][i][cptcod];
for (cpt=1;cpt<=(mob-1)/2;cpt++){
mobaverage[(int)age][i][cptcod] +=probs[(int)age-cpt][i][cptcod];
}/* end mob */
}else
return -1;
- for (cptcod=1;cptcod<=modcovmax;cptcod++){
+ for (cptcod=1;cptcod<=ncovcombmax;cptcod++){
/* for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){ */
agemingood[cptcod]=fage-(mob-1)/2;
for (age=fage-(mob-1)/2; age>=bage; age--){/* From oldest to youngest, finding the youngest wrong */
}
}
}/* end cptcod */
- free_vector(sumnewm,1, modcovmax);
- free_vector(sumnewp,1, modcovmax);
- free_vector(agemaxgood,1, modcovmax);
- free_vector(agemingood,1, modcovmax);
+ free_vector(sumnewm,1, ncovcombmax);
+ free_vector(sumnewp,1, ncovcombmax);
+ free_vector(agemaxgood,1, ncovcombmax);
+ free_vector(agemingood,1, ncovcombmax);
return 0;
}/* End movingaverage */
double A,B,L=0.0,sump=0.,num=0.;
int i,n=0; /* n is the size of the sample */
- for (i=0;i<=imx-1 ; i++) {
+ for (i=1;i<=imx ; i++) {
sump=sump+weight[i];
/* sump=sump+1;*/
num=num+1;
i1=pow(2,cptcoveff);
if (cptcovn < 1){i1=1;}
- for(cptcov=1,k=0;cptcov<=i1;cptcov++){
+ for(k=1; k<=i1;k++){
+ /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */
/* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */
//for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
- k=k+1;
+ /* k=k+1; */
/* to clean */
//printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));
fprintf(ficrespl,"#******");
fprintf(ficrespl,"******\n");
printf("******\n");
fprintf(ficlog,"******\n");
+ if(invalidvarcomb[k]){
+ printf("\nCombination (%d) ignored because no cases \n",k);
+ fprintf(ficrespl,"#Combination (%d) ignored because no cases \n",k);
+ fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k);
+ continue;
+ }
fprintf(ficrespl,"#Age ");
for(j=1;j<=cptcoveff;j++) {
prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k);
fprintf(ficrespl,"%.0f ",age );
for(j=1;j<=cptcoveff;j++)
- fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
+ fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
tot=0.;
for(i=1; i<=nlstate;i++){
- tot += prlim[i][i];
- fprintf(ficrespl," %.5f", prlim[i][i]);
+ tot += prlim[i][i];
+ fprintf(ficrespl," %.5f", prlim[i][i]);
}
fprintf(ficrespl," %.3f %d\n", tot, *ncvyearp);
} /* Age */
i1=pow(2,cptcoveff);
if (cptcovn < 1){i1=1;}
-
- for(cptcov=1,k=0;cptcov<=i1;cptcov++){
+
+ for(k=1; k<=i1;k++){
+ /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */
/* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */
//for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
- k=k+1;
+ /* k=k+1; */
/* to clean */
//printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));
fprintf(ficresplb,"#******");
fprintf(ficresplb,"******\n");
printf("******\n");
fprintf(ficlog,"******\n");
+ if(invalidvarcomb[k]){
+ printf("\nCombination (%d) ignored because no cases \n",k);
+ fprintf(ficresplb,"#Combination (%d) ignored because no cases \n",k);
+ fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k);
+ continue;
+ }
fprintf(ficresplb,"#Age ");
for(j=1;j<=cptcoveff;j++) {
fclose (ficlog);
goto end;
exit(0);
- }
- else if(mle==-3) { /* Main Wizard */
+ } else if(mle==-5) { /* Main Wizard */
prwizard(ncovmodel, nlstate, ndeath, model, ficparo);
printf(" You chose mle=-3, look at file %s for a template of covariance matrix \n",filereso);
fprintf(ficlog," You chose mle=-3, look at file %s for a template of covariance matrix \n",filereso);
param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);
matcov=matrix(1,npar,1,npar);
hess=matrix(1,npar,1,npar);
- }
- else{
+ } else{ /* Begin of mle != -1 or -5 */
/* Read guessed parameters */
/* Reads comments: lines beginning with '#' */
while((c=getc(ficpar))=='#' && c!= EOF){
param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);
for(i=1; i <=nlstate; i++){
- j=0;
+ j=0;
for(jj=1; jj <=nlstate+ndeath; jj++){
- if(jj==i) continue;
- j++;
- fscanf(ficpar,"%1d%1d",&i1,&j1);
- if ((i1 != i) || (j1 != jj)){
- printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n \
+ if(jj==i) continue;
+ j++;
+ fscanf(ficpar,"%1d%1d",&i1,&j1);
+ if ((i1 != i) || (j1 != jj)){
+ printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n \
It might be a problem of design; if ncovcol and the model are correct\n \
run imach with mle=-1 to get a correct template of the parameter file.\n",numlinepar, i,j, i1, j1);
- exit(1);
- }
- fprintf(ficparo,"%1d%1d",i1,j1);
- if(mle==1)
- printf("%1d%1d",i,jj);
- fprintf(ficlog,"%1d%1d",i,jj);
- for(k=1; k<=ncovmodel;k++){
- fscanf(ficpar," %lf",¶m[i][j][k]);
- if(mle==1){
- printf(" %lf",param[i][j][k]);
- fprintf(ficlog," %lf",param[i][j][k]);
- }
- else
- fprintf(ficlog," %lf",param[i][j][k]);
- fprintf(ficparo," %lf",param[i][j][k]);
- }
- fscanf(ficpar,"\n");
- numlinepar++;
- if(mle==1)
- printf("\n");
- fprintf(ficlog,"\n");
- fprintf(ficparo,"\n");
+ exit(1);
+ }
+ fprintf(ficparo,"%1d%1d",i1,j1);
+ if(mle==1)
+ printf("%1d%1d",i,jj);
+ fprintf(ficlog,"%1d%1d",i,jj);
+ for(k=1; k<=ncovmodel;k++){
+ fscanf(ficpar," %lf",¶m[i][j][k]);
+ if(mle==1){
+ printf(" %lf",param[i][j][k]);
+ fprintf(ficlog," %lf",param[i][j][k]);
+ }
+ else
+ fprintf(ficlog," %lf",param[i][j][k]);
+ fprintf(ficparo," %lf",param[i][j][k]);
+ }
+ fscanf(ficpar,"\n");
+ numlinepar++;
+ if(mle==1)
+ printf("\n");
+ fprintf(ficlog,"\n");
+ fprintf(ficparo,"\n");
}
}
fflush(ficlog);
for(i=1; i <=nlstate; i++){
for(j=1; j <=nlstate+ndeath-1; j++){
- fscanf(ficpar,"%1d%1d",&i1,&j1);
- if ( (i1-i) * (j1-j) != 0){
- printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1);
- exit(1);
- }
- printf("%1d%1d",i,j);
- fprintf(ficparo,"%1d%1d",i1,j1);
- fprintf(ficlog,"%1d%1d",i1,j1);
- for(k=1; k<=ncovmodel;k++){
- fscanf(ficpar,"%le",&delti3[i][j][k]);
- printf(" %le",delti3[i][j][k]);
- fprintf(ficparo," %le",delti3[i][j][k]);
- fprintf(ficlog," %le",delti3[i][j][k]);
- }
- fscanf(ficpar,"\n");
- numlinepar++;
- printf("\n");
- fprintf(ficparo,"\n");
- fprintf(ficlog,"\n");
+ fscanf(ficpar,"%1d%1d",&i1,&j1);
+ if ( (i1-i) * (j1-j) != 0){
+ printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1);
+ exit(1);
+ }
+ printf("%1d%1d",i,j);
+ fprintf(ficparo,"%1d%1d",i1,j1);
+ fprintf(ficlog,"%1d%1d",i1,j1);
+ for(k=1; k<=ncovmodel;k++){
+ fscanf(ficpar,"%le",&delti3[i][j][k]);
+ printf(" %le",delti3[i][j][k]);
+ fprintf(ficparo," %le",delti3[i][j][k]);
+ fprintf(ficlog," %le",delti3[i][j][k]);
+ }
+ fscanf(ficpar,"\n");
+ numlinepar++;
+ printf("\n");
+ fprintf(ficparo,"\n");
+ fprintf(ficlog,"\n");
}
}
fflush(ficlog);
-
+
/* Reads covariance matrix */
delti=delti3[1][1];
-
-
+
+
/* free_ma3x(delti3,1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); */ /* Hasn't to to freed here otherwise delti is no more allocated */
-
+
/* Reads comments: lines beginning with '#' */
while((c=getc(ficpar))=='#' && c!= EOF){
ungetc(c,ficpar);
fputs(line,ficlog);
}
ungetc(c,ficpar);
-
+
matcov=matrix(1,npar,1,npar);
hess=matrix(1,npar,1,npar);
for(i=1; i <=npar; i++)
for(j=1; j <=npar; j++) matcov[i][j]=0.;
-
+
/* Scans npar lines */
for(i=1; i <=npar; i++){
count=fscanf(ficpar,"%1d%1d%1d",&i1,&j1,&jk);
if(count != 3){
- printf("Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\
+ printf("Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\
This is probably because your covariance matrix doesn't \n contain exactly %d lines corresponding to your model line '1+age+%s'.\n\
Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model);
- fprintf(ficlog,"Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\
+ fprintf(ficlog,"Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\
This is probably because your covariance matrix doesn't \n contain exactly %d lines corresponding to your model line '1+age+%s'.\n\
Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model);
- exit(1);
- }else
- if(mle==1)
- printf("%1d%1d%1d",i1,j1,jk);
+ exit(1);
+ }else{
+ if(mle==1)
+ printf("%1d%1d%1d",i1,j1,jk);
+ }
fprintf(ficlog,"%1d%1d%1d",i1,j1,jk);
fprintf(ficparo,"%1d%1d%1d",i1,j1,jk);
for(j=1; j <=i; j++){
- fscanf(ficpar," %le",&matcov[i][j]);
- if(mle==1){
- printf(" %.5le",matcov[i][j]);
- }
- fprintf(ficlog," %.5le",matcov[i][j]);
- fprintf(ficparo," %.5le",matcov[i][j]);
+ fscanf(ficpar," %le",&matcov[i][j]);
+ if(mle==1){
+ printf(" %.5le",matcov[i][j]);
+ }
+ fprintf(ficlog," %.5le",matcov[i][j]);
+ fprintf(ficparo," %.5le",matcov[i][j]);
}
fscanf(ficpar,"\n");
numlinepar++;
if(mle==1)
- printf("\n");
+ printf("\n");
fprintf(ficlog,"\n");
fprintf(ficparo,"\n");
}
/* End of read covariance matrix npar lines */
for(i=1; i <=npar; i++)
for(j=i+1;j<=npar;j++)
- matcov[i][j]=matcov[j][i];
+ matcov[i][j]=matcov[j][i];
if(mle==1)
printf("\n");
annais=vector(1,n);
moisdc=vector(1,n);
andc=vector(1,n);
+ weight=vector(1,n);
agedc=vector(1,n);
cod=ivector(1,n);
- weight=vector(1,n);
- for(i=1;i<=n;i++) weight[i]=1.0; /* Equal weights, 1 by default */
+ for(i=1;i<=n;i++){
+ num[i]=0;
+ moisnais[i]=0;
+ annais[i]=0;
+ moisdc[i]=0;
+ andc[i]=0;
+ agedc[i]=0;
+ cod[i]=0;
+ weight[i]=1.0; /* Equal weights, 1 by default */
+ }
mint=matrix(1,maxwav,1,n);
anint=matrix(1,maxwav,1,n);
s=imatrix(1,maxwav+1,1,n); /* s[i][j] health state for wave i and individual j */
free_vector(andc,1,n);
/* Routine tricode is to calculate cptcoveff (real number of unique covariates) and to associate covariable number and modality */
-
nbcode=imatrix(0,NCOVMAX,0,NCOVMAX);
ncodemax[1]=1;
Ndum =ivector(-1,NCOVMAX);
- if (ncovmodel-nagesqr > 2 ) /* That is if covariate other than cst, age and age*age */
- tricode(Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */
+ cptcoveff=0;
+ if (ncovmodel-nagesqr > 2 ){ /* That is if covariate other than cst, age and age*age */
+ tricode(&cptcoveff,Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */
+ }
+
+ ncovcombmax=pow(2,cptcoveff);
+ invalidvarcomb=ivector(1, ncovcombmax);
+ for(i=1;i<ncovcombmax;i++)
+ invalidvarcomb[i]=0;
+
/* Nbcode gives the value of the lth modality (currently 1 to 2) of jth covariate, in
V2+V1*age, there are 3 covariates Tvar[2]=1 (V1).*/
/* 1 to ncodemax[j] which is the maximum value of this jth covariate */
*/
h=0;
-
-
/*if (cptcovn > 0) */
-
-
m=pow(2,cptcoveff);
/**< codtab(h,k) k = codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) + 1
* 2211
* V1=1+1, V2=0+1, V3=1+1, V4=1+1
* V3=2
+ * codtabm and decodtabm are identical
*/
- /* /\* for(h=1; h <=100 ;h++){ *\/ */
- /* /\* printf("h=%2d ", h); *\/ */
- /* /\* for(k=1; k <=10; k++){ *\/ */
- /* /\* printf("k=%d %d ",k,codtabm(h,k)); *\/ */
- /* /\* codtab[h][k]=codtabm(h,k); *\/ */
- /* /\* } *\/ */
- /* /\* printf("\n"); *\/ */
- /* } */
- /* for(k=1;k<=cptcoveff; k++){ /\* scans any effective covariate *\/ */
- /* for(i=1; i <=pow(2,cptcoveff-k);i++){ /\* i=1 to 8/1=8; i=1 to 8/2=4; i=1 to 8/8=1 *\/ */
- /* for(j=1; j <= ncodemax[k]; j++){ /\* For each modality of this covariate ncodemax=2*\/ */
- /* for(cpt=1; cpt <=pow(2,k-1); cpt++){ /\* cpt=1 to 8/2**(3+1-1 or 3+1-3) =1 or 4 *\/ */
- /* h++; */
- /* if (h>m) */
- /* h=1; */
- /* codtab[h][k]=j; */
- /* /\* codtab[12][3]=1; *\/ */
- /* /\*codtab[h][Tvar[k]]=j;*\/ */
- /* /\* printf("h=%d k=%d j=%d codtab[h][k]=%d Tvar[k]=%d codtab[h][Tvar[k]]=%d \n",h, k,j,codtab[h][k],Tvar[k],codtab[h][Tvar[k]]); *\/ */
- /* } */
- /* } */
- /* } */
- /* } */
- /* printf("codtab[1][2]=%d codtab[2][2]=%d",codtab[1][2],codtab[2][2]);
- codtab[1][2]=1;codtab[2][2]=2; */
- /* for(i=1; i <=m ;i++){ */
- /* for(k=1; k <=cptcovn; k++){ */
- /* printf("i=%d k=%d %d %d ",i,k,codtab[i][k], cptcoveff); */
- /* } */
- /* printf("\n"); */
- /* } */
- /* scanf("%d",i);*/
free_ivector(Ndum,-1,NCOVMAX);
#endif
- /* Calculates basic frequencies. Computes observed prevalence at single age
+ /* Calculates basic frequencies. Computes observed prevalence at single age
+ and for any valid combination of covariates
and prints on file fileres'p'. */
- freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint,strstart,\
+ freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx, Tvaraff, invalidvarcomb, nbcode, ncodemax,mint,anint,strstart, \
firstpass, lastpass, stepm, weightopt, model);
fprintf(fichtm,"\n");
Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
imx,agemin,agemax,jmin,jmax,jmean);
pmmij= 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 */
- savms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
- oldm=oldms; newm=newms; savm=savms; /* Keeps fixed addresses to free */
+ oldms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
+ newms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
+ savms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
+ oldm=oldms; newm=newms; savm=savms; /* Keeps fixed addresses to free */
/* 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] */
/* For mortality only */
if (mle==-3){
ximort=matrix(1,NDIM,1,NDIM);
+ for(i=1;i<=NDIM;i++)
+ for(j=1;j<=NDIM;j++)
+ ximort[i][j]=0.;
/* ximort=gsl_matrix_alloc(1,NDIM,1,NDIM); */
cens=ivector(1,n);
ageexmed=vector(1,n);
for(i=1; i <=NDIM; i++)
for(j=i+1;j<=NDIM;j++)
- matcov[i][j]=matcov[j][i];
+ matcov[i][j]=matcov[j][i];
printf("\nCovariance matrix\n ");
fprintf(ficlog,"\nCovariance matrix\n ");
for(i=1; i <=NDIM; i++) {
for(j=1;j<=NDIM;j++){
- printf("%f ",matcov[i][j]);
- fprintf(ficlog,"%f ",matcov[i][j]);
+ printf("%f ",matcov[i][j]);
+ fprintf(ficlog,"%f ",matcov[i][j]);
}
printf("\n "); fprintf(ficlog,"\n ");
}
replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */
+ ageminpar=50;
+ agemaxpar=100;
if(ageminpar == AGEOVERFLOW ||agemaxpar == AGEOVERFLOW){
printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\
fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\
Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
- }else
+ }else{
+ printf("Warning! ageminpar %f and agemaxpar %f have been fixed because for simplification until it is fixed...\n\n",ageminpar,agemaxpar);
+ fprintf(ficlog,"Warning! ageminpar %f and agemaxpar %f have been fixed because for simplification until it is fixed...\n\n",ageminpar,agemaxpar);
printinggnuplotmort(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
+ }
printinghtmlmort(fileresu,title,datafile, firstpass, lastpass, \
stepm, weightopt,\
model,imx,p,matcov,agemortsup);
free_vector(lsurv,1,AGESUP);
free_vector(lpop,1,AGESUP);
free_vector(tpop,1,AGESUP);
-#ifdef GSL
+ free_matrix(ximort,1,NDIM,1,NDIM);
free_ivector(cens,1,n);
free_vector(agecens,1,n);
free_ivector(dcwave,1,n);
- free_matrix(ximort,1,NDIM,1,NDIM);
+#ifdef GSL
#endif
} /* Endof if mle==-3 mortality only */
/* Standard */
fprintf(ficlog,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");
for(i=1,jk=1; i <=nlstate; i++){
for(k=1; k <=(nlstate+ndeath); k++){
- if (k != i) {
- printf("%d%d ",i,k);
- fprintf(ficlog,"%d%d ",i,k);
- fprintf(ficres,"%1d%1d ",i,k);
- for(j=1; j <=ncovmodel; j++){
- printf("%12.7f ",p[jk]);
- fprintf(ficlog,"%12.7f ",p[jk]);
- fprintf(ficres,"%12.7f ",p[jk]);
- jk++;
- }
- printf("\n");
- fprintf(ficlog,"\n");
- fprintf(ficres,"\n");
- }
+ if (k != i) {
+ printf("%d%d ",i,k);
+ fprintf(ficlog,"%d%d ",i,k);
+ fprintf(ficres,"%1d%1d ",i,k);
+ for(j=1; j <=ncovmodel; j++){
+ printf("%12.7f ",p[jk]);
+ fprintf(ficlog,"%12.7f ",p[jk]);
+ fprintf(ficres,"%12.7f ",p[jk]);
+ jk++;
+ }
+ printf("\n");
+ fprintf(ficlog,"\n");
+ fprintf(ficres,"\n");
+ }
}
}
if(mle != 0){
printf("Parameters and 95%% confidence intervals\n W is simply the result of the division of the parameter by the square root of covariance of the parameter.\n And Wald-based confidence intervals plus and minus 1.96 * W .\n But be careful that parameters are highly correlated because incidence of disability is highly correlated to incidence of recovery.\n It might be better to visualize the covariance matrix. See the page 'Matrix of variance-covariance of one-step probabilities' and its graphs.\n");
fprintf(ficlog, "Parameters, Wald tests and Wald-based confidence intervals\n W is simply the result of the division of the parameter by the square root of covariance of the parameter.\n And Wald-based confidence intervals plus and minus 1.96 * W \n It might be better to visualize the covariance matrix. See the page 'Matrix of variance-covariance of one-step probabilities' and its graphs.\n");
for(i=1,jk=1; i <=nlstate; i++){
- for(k=1; k <=(nlstate+ndeath); k++){
- if (k != i) {
- printf("%d%d ",i,k);
- fprintf(ficlog,"%d%d ",i,k);
- for(j=1; j <=ncovmodel; j++){
- printf("%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));
- fprintf(ficlog,"%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));
- jk++;
- }
- printf("\n");
- fprintf(ficlog,"\n");
- }
- }
+ for(k=1; k <=(nlstate+ndeath); k++){
+ if (k != i) {
+ printf("%d%d ",i,k);
+ fprintf(ficlog,"%d%d ",i,k);
+ for(j=1; j <=ncovmodel; j++){
+ printf("%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));
+ fprintf(ficlog,"%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));
+ jk++;
+ }
+ printf("\n");
+ fprintf(ficlog,"\n");
+ }
+ }
}
} /* end of hesscov and Wald tests */
-
+
/* */
fprintf(ficres,"# Scales (for hessian or gradient estimation)\n");
printf("# Scales (for hessian or gradient estimation)\n");
fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n");
for(i=1,jk=1; i <=nlstate; i++){
for(j=1; j <=nlstate+ndeath; j++){
- if (j!=i) {
- fprintf(ficres,"%1d%1d",i,j);
- printf("%1d%1d",i,j);
- fprintf(ficlog,"%1d%1d",i,j);
- for(k=1; k<=ncovmodel;k++){
- printf(" %.5e",delti[jk]);
- fprintf(ficlog," %.5e",delti[jk]);
- fprintf(ficres," %.5e",delti[jk]);
- jk++;
- }
- printf("\n");
- fprintf(ficlog,"\n");
- fprintf(ficres,"\n");
- }
+ if (j!=i) {
+ fprintf(ficres,"%1d%1d",i,j);
+ printf("%1d%1d",i,j);
+ fprintf(ficlog,"%1d%1d",i,j);
+ for(k=1; k<=ncovmodel;k++){
+ printf(" %.5e",delti[jk]);
+ fprintf(ficlog," %.5e",delti[jk]);
+ fprintf(ficres," %.5e",delti[jk]);
+ jk++;
+ }
+ printf("\n");
+ fprintf(ficlog,"\n");
+ fprintf(ficres,"\n");
+ }
}
}
for(itimes=1;itimes<=2;itimes++){
jj=0;
for(i=1; i <=nlstate; i++){
- for(j=1; j <=nlstate+ndeath; j++){
- if(j==i) continue;
- for(k=1; k<=ncovmodel;k++){
- jj++;
- ca[0]= k+'a'-1;ca[1]='\0';
- if(itimes==1){
- if(mle>=1)
- printf("#%1d%1d%d",i,j,k);
- fprintf(ficlog,"#%1d%1d%d",i,j,k);
- fprintf(ficres,"#%1d%1d%d",i,j,k);
- }else{
- if(mle>=1)
- printf("%1d%1d%d",i,j,k);
- fprintf(ficlog,"%1d%1d%d",i,j,k);
- fprintf(ficres,"%1d%1d%d",i,j,k);
- }
- ll=0;
- for(li=1;li <=nlstate; li++){
- for(lj=1;lj <=nlstate+ndeath; lj++){
- if(lj==li) continue;
- for(lk=1;lk<=ncovmodel;lk++){
- ll++;
- if(ll<=jj){
- cb[0]= lk +'a'-1;cb[1]='\0';
- if(ll<jj){
- if(itimes==1){
- if(mle>=1)
- printf(" Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
- fprintf(ficlog," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
- fprintf(ficres," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
- }else{
- if(mle>=1)
- printf(" %.5e",matcov[jj][ll]);
- fprintf(ficlog," %.5e",matcov[jj][ll]);
- fprintf(ficres," %.5e",matcov[jj][ll]);
- }
- }else{
- if(itimes==1){
- if(mle>=1)
- printf(" Var(%s%1d%1d)",ca,i,j);
- fprintf(ficlog," Var(%s%1d%1d)",ca,i,j);
- fprintf(ficres," Var(%s%1d%1d)",ca,i,j);
- }else{
- if(mle>=1)
- printf(" %.7e",matcov[jj][ll]);
- fprintf(ficlog," %.7e",matcov[jj][ll]);
- fprintf(ficres," %.7e",matcov[jj][ll]);
- }
- }
- }
- } /* end lk */
- } /* end lj */
- } /* end li */
- if(mle>=1)
- printf("\n");
- fprintf(ficlog,"\n");
- fprintf(ficres,"\n");
- numlinepar++;
- } /* end k*/
- } /*end j */
+ for(j=1; j <=nlstate+ndeath; j++){
+ if(j==i) continue;
+ for(k=1; k<=ncovmodel;k++){
+ jj++;
+ ca[0]= k+'a'-1;ca[1]='\0';
+ if(itimes==1){
+ if(mle>=1)
+ printf("#%1d%1d%d",i,j,k);
+ fprintf(ficlog,"#%1d%1d%d",i,j,k);
+ fprintf(ficres,"#%1d%1d%d",i,j,k);
+ }else{
+ if(mle>=1)
+ printf("%1d%1d%d",i,j,k);
+ fprintf(ficlog,"%1d%1d%d",i,j,k);
+ fprintf(ficres,"%1d%1d%d",i,j,k);
+ }
+ ll=0;
+ for(li=1;li <=nlstate; li++){
+ for(lj=1;lj <=nlstate+ndeath; lj++){
+ if(lj==li) continue;
+ for(lk=1;lk<=ncovmodel;lk++){
+ ll++;
+ if(ll<=jj){
+ cb[0]= lk +'a'-1;cb[1]='\0';
+ if(ll<jj){
+ if(itimes==1){
+ if(mle>=1)
+ printf(" Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
+ fprintf(ficlog," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
+ fprintf(ficres," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
+ }else{
+ if(mle>=1)
+ printf(" %.5e",matcov[jj][ll]);
+ fprintf(ficlog," %.5e",matcov[jj][ll]);
+ fprintf(ficres," %.5e",matcov[jj][ll]);
+ }
+ }else{
+ if(itimes==1){
+ if(mle>=1)
+ printf(" Var(%s%1d%1d)",ca,i,j);
+ fprintf(ficlog," Var(%s%1d%1d)",ca,i,j);
+ fprintf(ficres," Var(%s%1d%1d)",ca,i,j);
+ }else{
+ if(mle>=1)
+ printf(" %.7e",matcov[jj][ll]);
+ fprintf(ficlog," %.7e",matcov[jj][ll]);
+ fprintf(ficres," %.7e",matcov[jj][ll]);
+ }
+ }
+ }
+ } /* end lk */
+ } /* end lj */
+ } /* end li */
+ if(mle>=1)
+ printf("\n");
+ fprintf(ficlog,"\n");
+ fprintf(ficres,"\n");
+ numlinepar++;
+ } /* end k*/
+ } /*end j */
} /* end i */
} /* end itimes */
fflush(ficlog);
fflush(ficres);
- while(fgets(line, MAXLINE, ficpar)) {
- /* If line starts with a # it is a comment */
- if (line[0] == '#') {
- numlinepar++;
- fputs(line,stdout);
- fputs(line,ficparo);
- fputs(line,ficlog);
- continue;
- }else
- break;
- }
-
+ while(fgets(line, MAXLINE, ficpar)) {
+ /* If line starts with a # it is a comment */
+ if (line[0] == '#') {
+ numlinepar++;
+ fputs(line,stdout);
+ fputs(line,ficparo);
+ fputs(line,ficlog);
+ continue;
+ }else
+ break;
+ }
+
/* while((c=getc(ficpar))=='#' && c!= EOF){ */
/* ungetc(c,ficpar); */
/* fgets(line, MAXLINE, ficpar); */
estepm=0;
if((num_filled=sscanf(line,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm, &ftolpl)) !=EOF){
-
- if (num_filled != 6) {
- printf("Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
- fprintf(ficlog,"Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
- goto end;
- }
- printf("agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",ageminpar,agemaxpar, bage, fage, estepm, ftolpl);
- }
- /* ftolpl=6*ftol*1.e5; /\* 6.e-3 make convergences in less than 80 loops for the prevalence limit *\/ */
- /*ftolpl=6.e-4;*/ /* 6.e-3 make convergences in less than 80 loops for the prevalence limit */
-
+
+ if (num_filled != 6) {
+ printf("Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
+ fprintf(ficlog,"Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
+ goto end;
+ }
+ printf("agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",ageminpar,agemaxpar, bage, fage, estepm, ftolpl);
+ }
+ /* ftolpl=6*ftol*1.e5; /\* 6.e-3 make convergences in less than 80 loops for the prevalence limit *\/ */
+ /*ftolpl=6.e-4;*/ /* 6.e-3 make convergences in less than 80 loops for the prevalence limit */
+
/* fscanf(ficpar,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm); */
if (estepm==0 || estepm < stepm) estepm=stepm;
if (fage <= 2) {
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 estepm=%d ftolpl=%e\n",ageminpar,agemaxpar,bage,fage, estepm, ftolpl);
fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d, ftolpl=%e\n",ageminpar,agemaxpar,bage,fage, estepm, ftolpl);
-
+
/* Other stuffs, more or less useful */
while((c=getc(ficpar))=='#' && c!= EOF){
ungetc(c,ficpar);
/* day and month of proj2 are not used but only year anproj2.*/
- /* freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint); */
+ /* freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint); */
/* ,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2); */
replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */
if(ageminpar == AGEOVERFLOW ||agemaxpar == -AGEOVERFLOW){
- printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
+ printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\
Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
- fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
+ fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
This is probably because your parameter file doesn't \n contain the exact number of lines (or columns) corresponding to your model line.\n\
Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
- }else
+ }else{
printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p);
-
- printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt,\
- model,imx,jmin,jmax,jmean,rfileres,popforecast,prevfcast,backcast, estepm, \
- jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2);
-
- /*------------ free_vector -------------*/
- /* chdir(path); */
-
+ }
+ printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt, \
+ model,imx,jmin,jmax,jmean,rfileres,popforecast,prevfcast,backcast, estepm, \
+ jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2);
+
+ /*------------ free_vector -------------*/
+ /* chdir(path); */
+
/* free_ivector(wav,1,imx); */ /* Moved after last prevalence call */
/* free_imatrix(dh,1,lastpass-firstpass+2,1,imx); */
/* free_imatrix(bh,1,lastpass-firstpass+2,1,imx); */
/*free_matrix(covar,1,NCOVMAX,1,n);*/
fclose(ficparo);
fclose(ficres);
-
-
+
+
/* Other results (useful)*/
-
-
+
+
/*--------------- Prevalence limit (period or stable prevalence) --------------*/
/*#include "prevlim.h"*/ /* Use ficrespl, ficlog */
prlim=matrix(1,nlstate,1,nlstate);
hPijx(p, bage, fage);
fclose(ficrespij);
- ncovcombmax= pow(2,cptcoveff);
+ /* ncovcombmax= pow(2,cptcoveff); */
/*-------------- Variance of one-step probabilities---*/
k=1;
varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax,strstart);
back_prevalence_limit(p, bprlim, ageminpar, agemaxpar, ftolpl, &ncvyear, dateprev1, dateprev2, firstpass, lastpass, mobilavproj);
fclose(ficresplb);
- hBijx(p, bage, fage, mobaverage);
- fclose(ficrespijb);
+ /* hBijx(p, bage, fage, mobaverage); */
+ /* fclose(ficrespijb); */
free_matrix(bprlim,1,nlstate,1,nlstate); /*here or after loop ? */
/* prevbackforecast(fileresu, anback1, mback1, jback1, agemin, agemax, dateprev1, dateprev2, mobilavproj,
for (k=1; k <= (int) pow(2,cptcoveff); k++){
fprintf(ficreseij,"\n#****** ");
for(j=1;j<=cptcoveff;j++) {
- fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
+ fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
}
fprintf(ficreseij,"******\n");
for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/
- oldm=oldms;savm=savms; /* ZZ Segmentation fault */
- cptcod= 0; /* To be deleted */
- printf("varevsij %d \n",vpopbased);
- fprintf(ficlog, "varevsij %d \n",vpopbased);
- varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); /* cptcod not initialized Intel */
- fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n# (weighted average of eij where weights are ");
- if(vpopbased==1)
- fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav);
- else
- fprintf(ficrest,"the age specific period (stable) prevalences in each health state \n");
- fprintf(ficrest,"# Age popbased mobilav e.. (std) ");
- for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i);
- fprintf(ficrest,"\n");
- /* printf("Which p?\n"); for(i=1;i<=npar;i++)printf("p[i=%d]=%lf,",i,p[i]);printf("\n"); */
- epj=vector(1,nlstate+1);
- printf("Computing age specific period (stable) prevalences in each health state \n");
- fprintf(ficlog,"Computing age specific period (stable) prevalences in each health state \n");
- for(age=bage; age <=fage ;age++){
- prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, &ncvyear, k); /*ZZ Is it the correct prevalim */
- if (vpopbased==1) {
- if(mobilav ==0){
- for(i=1; i<=nlstate;i++)
- prlim[i][i]=probs[(int)age][i][k];
- }else{ /* mobilav */
- for(i=1; i<=nlstate;i++)
- prlim[i][i]=mobaverage[(int)age][i][k];
- }
- }
+ oldm=oldms;savm=savms; /* ZZ Segmentation fault */
+ cptcod= 0; /* To be deleted */
+ printf("varevsij %d \n",vpopbased);
+ fprintf(ficlog, "varevsij %d \n",vpopbased);
+ varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); /* cptcod not initialized Intel */
+ fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n# (weighted average of eij where weights are ");
+ if(vpopbased==1)
+ fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav);
+ else
+ fprintf(ficrest,"the age specific period (stable) prevalences in each health state \n");
+ fprintf(ficrest,"# Age popbased mobilav e.. (std) ");
+ for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i);
+ fprintf(ficrest,"\n");
+ /* printf("Which p?\n"); for(i=1;i<=npar;i++)printf("p[i=%d]=%lf,",i,p[i]);printf("\n"); */
+ epj=vector(1,nlstate+1);
+ printf("Computing age specific period (stable) prevalences in each health state \n");
+ fprintf(ficlog,"Computing age specific period (stable) prevalences in each health state \n");
+ for(age=bage; age <=fage ;age++){
+ prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, &ncvyear, k); /*ZZ Is it the correct prevalim */
+ if (vpopbased==1) {
+ if(mobilav ==0){
+ for(i=1; i<=nlstate;i++)
+ prlim[i][i]=probs[(int)age][i][k];
+ }else{ /* mobilav */
+ for(i=1; i<=nlstate;i++)
+ prlim[i][i]=mobaverage[(int)age][i][k];
+ }
+ }
- fprintf(ficrest," %4.0f %d %d",age, vpopbased, mobilav);
- /* fprintf(ficrest," %4.0f %d %d %d %d",age, vpopbased, mobilav,Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); */ /* to be done */
- /* printf(" age %4.0f ",age); */
- for(j=1, epj[nlstate+1]=0.;j <=nlstate;j++){
- for(i=1, epj[j]=0.;i <=nlstate;i++) {
- epj[j] += prlim[i][i]*eij[i][j][(int)age];
- /*ZZZ printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/
- /* printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]); */
- }
- epj[nlstate+1] +=epj[j];
- }
- /* printf(" age %4.0f \n",age); */
+ fprintf(ficrest," %4.0f %d %d",age, vpopbased, mobilav);
+ /* fprintf(ficrest," %4.0f %d %d %d %d",age, vpopbased, mobilav,Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); */ /* to be done */
+ /* printf(" age %4.0f ",age); */
+ for(j=1, epj[nlstate+1]=0.;j <=nlstate;j++){
+ for(i=1, epj[j]=0.;i <=nlstate;i++) {
+ epj[j] += prlim[i][i]*eij[i][j][(int)age];
+ /*ZZZ printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/
+ /* printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]); */
+ }
+ epj[nlstate+1] +=epj[j];
+ }
+ /* printf(" age %4.0f \n",age); */
- for(i=1, vepp=0.;i <=nlstate;i++)
- for(j=1;j <=nlstate;j++)
- vepp += vareij[i][j][(int)age];
- fprintf(ficrest," %7.3f (%7.3f)", epj[nlstate+1],sqrt(vepp));
- for(j=1;j <=nlstate;j++){
- fprintf(ficrest," %7.3f (%7.3f)", epj[j],sqrt(vareij[j][j][(int)age]));
- }
- fprintf(ficrest,"\n");
- }
+ for(i=1, vepp=0.;i <=nlstate;i++)
+ for(j=1;j <=nlstate;j++)
+ vepp += vareij[i][j][(int)age];
+ fprintf(ficrest," %7.3f (%7.3f)", epj[nlstate+1],sqrt(vepp));
+ for(j=1;j <=nlstate;j++){
+ fprintf(ficrest," %7.3f (%7.3f)", epj[j],sqrt(vareij[j][j][(int)age]));
+ }
+ fprintf(ficrest,"\n");
+ }
} /* End vpopbased */
free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage);
free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage);
if (mobilav!=0 ||mobilavproj !=0)
free_ma3x(mobaverages,1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax); /* We need to have a squared matrix with prevalence of the dead! */
free_ma3x(probs,1,AGESUP,1,nlstate+ndeath, 1,ncovcombmax);
- } /* mle==-3 arrives here for freeing */
- /* endfree:*/
free_matrix(prlim,1,nlstate,1,nlstate); /*here or after loop ? */
free_matrix(pmmij,1,nlstate+ndeath,1,nlstate+ndeath);
+ } /* mle==-3 arrives here for freeing */
+ /* endfree:*/
free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath);
free_matrix(newms, 1,nlstate+ndeath,1,nlstate+ndeath);
free_matrix(savms, 1,nlstate+ndeath,1,nlstate+ndeath);
free_ivector(Tvar,1,NCOVMAX);
free_ivector(Tprod,1,NCOVMAX);
free_ivector(Tvaraff,1,NCOVMAX);
+ free_ivector(invalidvarcomb,1,ncovcombmax);
free_ivector(Tage,1,NCOVMAX);
free_imatrix(nbcode,0,NCOVMAX,0,NCOVMAX);