--- imach/src/imach.c 2017/04/26 16:22:11 1.265
+++ imach/src/imach.c 2017/05/18 20:09:32 1.268
@@ -1,6 +1,15 @@
-/* $Id: imach.c,v 1.265 2017/04/26 16:22:11 brouard Exp $
+/* $Id: imach.c,v 1.268 2017/05/18 20:09:32 brouard Exp $
$State: Exp $
$Log: imach.c,v $
+ Revision 1.268 2017/05/18 20:09:32 brouard
+ Summary: backprojection and confidence intervals of backprevalence
+
+ Revision 1.267 2017/05/13 10:25:05 brouard
+ Summary: temporary save for backprojection
+
+ Revision 1.266 2017/05/13 07:26:12 brouard
+ Summary: Version 0.99r13 (improvements and bugs fixed)
+
Revision 1.265 2017/04/26 16:22:11 brouard
Summary: imach 0.99r13 Some bugs fixed
@@ -815,7 +824,7 @@ Back prevalence and projections:
p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);
oldm=oldms;savm=savms;
- - hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k);
+ - hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k, nres);
Computes the transition matrix starting at age 'age' over
'nhstepm*hstepm*stepm' months (i.e. until
age (in years) age+nhstepm*hstepm*stepm/12) by multiplying
@@ -983,6 +992,7 @@ typedef struct {
#define YEARM 12. /**< Number of months per year */
/* #define AGESUP 130 */
#define AGESUP 150
+#define AGEINF 0
#define AGEMARGE 25 /* Marge for agemin and agemax for(iage=agemin-AGEMARGE; iage <= agemax+3+AGEMARGE; iage++) */
#define AGEBASE 40
#define AGEOVERFLOW 1.e20
@@ -997,12 +1007,12 @@ typedef struct {
#define ODIRSEPARATOR '\\'
#endif
-/* $Id: imach.c,v 1.265 2017/04/26 16:22:11 brouard Exp $ */
+/* $Id: imach.c,v 1.268 2017/05/18 20:09:32 brouard Exp $ */
/* $State: Exp $ */
#include "version.h"
char version[]=__IMACH_VERSION__;
char copyright[]="February 2016,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2018";
-char fullversion[]="$Revision: 1.265 $ $Date: 2017/04/26 16:22:11 $";
+char fullversion[]="$Revision: 1.268 $ $Date: 2017/05/18 20:09:32 $";
char strstart[80];
char optionfilext[10], optionfilefiname[FILENAMELENGTH];
int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */
@@ -1076,6 +1086,8 @@ FILE *ficresvij;
char fileresv[FILENAMELENGTH];
FILE *ficresvpl;
char fileresvpl[FILENAMELENGTH];
+FILE *ficresvbl;
+char fileresvbl[FILENAMELENGTH];
char title[MAXLINE];
char model[MAXLINE]; /**< The model line */
char optionfile[FILENAMELENGTH], datafile[FILENAMELENGTH], filerespl[FILENAMELENGTH], fileresplb[FILENAMELENGTH];
@@ -1173,8 +1185,8 @@ double *agedc;
double **covar; /**< covar[j,i], value of jth covariate for individual i,
* covar=matrix(0,NCOVMAX,1,n);
* cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*age; */
-double **coqvar; /* Fixed quantitative covariate iqv */
-double ***cotvar; /* Time varying covariate itv */
+double **coqvar; /* Fixed quantitative covariate nqv */
+double ***cotvar; /* Time varying covariate ntv */
double ***cotqvar; /* Time varying quantitative covariate itqv */
double idx;
int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */
@@ -2657,12 +2669,12 @@ Earliest age to start was %d-%d=%d, ncvl
max=vector(1,nlstate);
meandiff=vector(1,nlstate);
- dnewm=ddnewms; doldm=ddoldms; dsavm=ddsavms;
- oldm=oldms; savm=savms;
-
- /* Starting with matrix unity */
- for (ii=1;ii<=nlstate+ndeath;ii++)
- for (j=1;j<=nlstate+ndeath;j++){
+ dnewm=ddnewms; doldm=ddoldms; dsavm=ddsavms;
+ oldm=oldms; savm=savms;
+
+ /* Starting with matrix unity */
+ for (ii=1;ii<=nlstate+ndeath;ii++)
+ for (j=1;j<=nlstate+ndeath;j++){
oldm[ii][j]=(ii==j ? 1.0 : 0.0);
}
@@ -2736,8 +2748,27 @@ Earliest age to start was %d-%d=%d, ncvl
/* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, ageminpar, agemaxpar, dnewm, doldm, dsavm,ij)); /\* Bug Valgrind *\/ */
/* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, dnewm, doldm, dsavm,ij)); /\* Bug Valgrind *\/ */
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent,ij)); /* Bug Valgrind */
+ /* if((int)age == 86 || (int)age == 87){ */
+ /* printf(" Backward prevalim age=%d agefin=%d \n", (int) age, (int) agefin); */
+ /* for(i=1; i<=nlstate+ndeath; i++) { */
+ /* printf("%d newm= ",i); */
+ /* for(j=1;j<=nlstate+ndeath;j++) { */
+ /* printf("%f ",newm[i][j]); */
+ /* } */
+ /* printf("oldm * "); */
+ /* for(j=1;j<=nlstate+ndeath;j++) { */
+ /* printf("%f ",oldm[i][j]); */
+ /* } */
+ /* printf(" bmmij "); */
+ /* for(j=1;j<=nlstate+ndeath;j++) { */
+ /* printf("%f ",pmmij[i][j]); */
+ /* } */
+ /* printf("\n"); */
+ /* } */
+ /* } */
savm=oldm;
oldm=newm;
+
for(j=1; j<=nlstate; j++){
max[j]=0.;
min[j]=1.;
@@ -2756,9 +2787,9 @@ Earliest age to start was %d-%d=%d, ncvl
meandiff[i]=(max[i]-min[i])/(max[i]+min[i])*2.; /* mean difference for each column */
maxmax=FMAX(maxmax,meandiff[i]);
/* printf("Back age= %d meandiff[%d]=%f, agefin=%d max[%d]=%f min[%d]=%f maxmax=%f\n", (int)age, i, meandiff[i],(int)agefin, i, max[i], i, min[i],maxmax); */
- } /* j loop */
+ } /* i loop */
*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);*/
+ /* 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); */
free_vector(min,1,nlstate);
@@ -2788,7 +2819,7 @@ Oldest age to start was %d-%d=%d, ncvloo
double **pmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate )
{
/* According to parameters values stored in x and the covariate's values stored in cov,
- computes the probability to be observed in state j being in state i by appying the
+ computes the probability to be observed in state j (after stepm years) being in state i by appying the
model to the ncovmodel covariates (including constant and age).
lnpijopii=ln(pij/pii)= aij+bij*age+cij*v1+dij*v2+... = sum_nc=1^ncovmodel xij(nc)*cov[nc]
and, according on how parameters are entered, the position of the coefficient xij(nc) of the
@@ -2797,8 +2828,9 @@ double **pmij(double **ps, double *cov,
j>=i nc + ((i-1)*(nlstate+ndeath-1)+(j-2))*ncovmodel
Computes ln(pij/pii) (lnpijopii), deduces pij/pii by exponentiation,
sums on j different of i to get 1-pii/pii, deduces pii, and then all pij.
- Outputs ps[i][j] the probability to be observed in j being in j according to
+ Outputs ps[i][j] or probability to be observed in j being in i according to
the values of the covariates cov[nc] and corresponding parameter values x[nc+shiftij]
+ Sum on j ps[i][j] should equal to 1.
*/
double s1, lnpijopii;
/*double t34;*/
@@ -2862,7 +2894,7 @@ double **pmij(double **ps, double *cov,
/*
for(i=1; i<= npar; i++) printf("%f ",x[i]);
goto end;*/
- return ps;
+ return ps; /* Pointer is unchanged since its call */
}
/*************** backward transition probabilities ***************/
@@ -2871,15 +2903,15 @@ double **pmij(double **ps, double *cov,
/* double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, double ***dnewm, double **doldm, double **dsavm, int ij ) */
double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, int ij )
{
- /* Computes the backward probability at age agefin and covariate ij
- * and returns in **ps as well as **bmij.
+ /* Computes the backward probability at age agefin and covariate combination ij. In fact cov is already filled and x too.
+ * Call to pmij(cov and x), call to cross prevalence, sums and inverses, left multiply, and returns in **ps as well as **bmij.
*/
int i, ii, j,k;
double **out, **pmij();
double sumnew=0.;
double agefin;
-
+ double k3=0.; /* constant of the w_x diagonal matrixe (in order for B to sum to 1 even for death state) */
double **dnewm, **dsavm, **doldm;
double **bbmij;
@@ -2888,44 +2920,67 @@ double **pmij(double **ps, double *cov,
dsavm=ddsavms;
agefin=cov[2];
+ /* Bx = Diag(w_x) P_x Diag(Sum_i w^i_x p^ij_x */
/* bmij *//* age is cov[2], ij is included in cov, but we need for
- the observed prevalence (with this covariate ij) */
- dsavm=pmij(pmmij,cov,ncovmodel,x,nlstate);
- /* We do have the matrix Px in savm and we need pij */
+ the observed prevalence (with this covariate ij) at beginning of transition */
+ /* dsavm=pmij(pmmij,cov,ncovmodel,x,nlstate); */
+
+ /* P_x */
+ pmmij=pmij(pmmij,cov,ncovmodel,x,nlstate); /*This is forward probability from agefin to agefin + stepm */
+ /* outputs pmmij which is a stochastic matrix in row */
+
+ /* Diag(w_x) */
+ /* Problem with prevacurrent which can be zero */
+ sumnew=0.;
+ /* for (ii=1;ii<=nlstate+ndeath;ii++){ */
+ for (ii=1;ii<=nlstate;ii++){ /* Only on live states */
+ sumnew+=prevacurrent[(int)agefin][ii][ij];
+ }
+ if(sumnew >0.01){ /* At least some value in the prevalence */
+ for (ii=1;ii<=nlstate+ndeath;ii++){
+ for (j=1;j<=nlstate+ndeath;j++)
+ doldm[ii][j]=(ii==j ? prevacurrent[(int)agefin][ii][ij]/sumnew : 0.0);
+ }
+ }else{
+ for (ii=1;ii<=nlstate+ndeath;ii++){
+ for (j=1;j<=nlstate+ndeath;j++)
+ doldm[ii][j]=(ii==j ? 1./nlstate : 0.0);
+ }
+ /* if(sumnew <0.9){ */
+ /* printf("Problem internal bmij B: sum on i wi <0.9: j=%d, sum_i wi=%lf,agefin=%d\n",j,sumnew, (int)agefin); */
+ /* } */
+ }
+ k3=0.0; /* We put the last diagonal to 0 */
+ for (ii=nlstate+1;ii<=nlstate+ndeath;ii++){
+ doldm[ii][ii]= k3;
+ }
+ /* End doldm, At the end doldm is diag[(w_i)] */
+
+ /* left Product of this diag matrix by pmmij=Px (dnewm=dsavm*doldm) */
+ bbmij=matprod2(dnewm, doldm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, pmmij); /* Bug Valgrind */
+
+ /* Diag(Sum_i w^i_x p^ij_x */
+ /* w1 p11 + w2 p21 only on live states N1./N..*N11/N1. + N2./N..*N21/N2.=(N11+N21)/N..=N.1/N.. */
for (j=1;j<=nlstate+ndeath;j++){
- sumnew=0.; /* w1 p11 + w2 p21 only on live states */
+ sumnew=0.;
for (ii=1;ii<=nlstate;ii++){
- sumnew+=dsavm[ii][j]*prevacurrent[(int)agefin][ii][ij];
+ /* sumnew+=dsavm[ii][j]*prevacurrent[(int)agefin][ii][ij]; */
+ sumnew+=pmmij[ii][j]*doldm[ii][ii]; /* Yes prevalence at beginning of transition */
} /* sumnew is (N11+N21)/N..= N.1/N.. = sum on i of w_i pij */
for (ii=1;ii<=nlstate+ndeath;ii++){
- if(sumnew >= 1.e-10){
/* if(agefin >= agemaxpar && agefin <= agemaxpar+stepm/YEARM){ */
- /* doldm[ii][j]=(ii==j ? 1./sumnew : 0.0); */
+ /* dsavm[ii][j]=(ii==j ? 1./sumnew : 0.0); */
/* }else if(agefin >= agemaxpar+stepm/YEARM){ */
- /* doldm[ii][j]=(ii==j ? 1./sumnew : 0.0); */
+ /* dsavm[ii][j]=(ii==j ? 1./sumnew : 0.0); */
/* }else */
- doldm[ii][j]=(ii==j ? 1./sumnew : 0.0);
- }else{
- ;
- /* printf("ii=%d, i=%d, doldm=%lf dsavm=%lf, probs=%lf, sumnew=%lf,agefin=%d\n",ii,j,doldm[ii][j],dsavm[ii][j],prevacurrent[(int)agefin][ii][ij],sumnew, (int)agefin); */
- }
+ dsavm[ii][j]=(ii==j ? 1./sumnew : 0.0);
} /*End ii */
- } /* End j, At the end doldm is diag[1/(w_1p1i+w_2 p2i)] */
- /* left Product of this diag matrix by dsavm=Px (newm=dsavm*doldm) */
- bbmij=matprod2(dnewm, dsavm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, doldm); /* Bug Valgrind */
- /* dsavm=doldm; /\* dsavm is now diag [1/(w_1p1i+w_2 p2i)] but can be overwritten*\/ */
- /* doldm=dnewm; /\* doldm is now Px * diag [1/(w_1p1i+w_2 p2i)] *\/ */
- /* dnewm=dsavm; /\* doldm is now Px * diag [1/(w_1p1i+w_2 p2i)] *\/ */
- /* left Product of this matrix by diag matrix of prevalences (savm) */
- for (j=1;j<=nlstate+ndeath;j++){
- for (ii=1;ii<=nlstate+ndeath;ii++){
- dsavm[ii][j]=(ii==j ? prevacurrent[(int)agefin][ii][ij] : 0.0);
- }
- } /* End j, At the end oldm is diag[1/(w_1p1i+w_2 p2i)] */
- ps=matprod2(doldm, dsavm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, dnewm); /* Bug Valgrind */
- /* newm or out is now diag[w_i] * Px * diag [1/(w_1p1i+w_2 p2i)] */
+ } /* End j, At the end dsavm is diag[1/(w_1p1i+w_2 p2i)] for ALL states even if the sum is only for live states */
+
+ ps=matprod2(ps, dnewm,1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, dsavm); /* Bug Valgrind */
+ /* ps is now diag[w_i] * Px * diag [1/(w_1p1i+w_2 p2i)] */
/* end bmij */
- return ps;
+ return ps; /*pointer is unchanged */
}
/*************** transition probabilities ***************/
@@ -3138,20 +3193,20 @@ double ***hpxij(double ***po, int nhstep
}
for(i=1; i<=nlstate+ndeath; i++)
for(j=1;j<=nlstate+ndeath;j++) {
- po[i][j][h]=newm[i][j];
- /*if(h==nhstepm) printf("po[%d][%d][%d]=%f ",i,j,h,po[i][j][h]);*/
+ po[i][j][h]=newm[i][j];
+ /*if(h==nhstepm) printf("po[%d][%d][%d]=%f ",i,j,h,po[i][j][h]);*/
}
/*printf("h=%d ",h);*/
} /* end h */
- /* printf("\n H=%d \n",h); */
+ /* printf("\n H=%d \n",h); */
return po;
}
/************* Higher Back Matrix Product ***************/
/* double ***hbxij(double ***po, int nhstepm, double age, int hstepm, double *x, double ***prevacurrent, int nlstate, int stepm, double **oldm, double **savm, double **dnewm, double **doldm, double **dsavm, int ij ) */
-double ***hbxij(double ***po, int nhstepm, double age, int hstepm, double *x, double ***prevacurrent, int nlstate, int stepm, int ij )
+double ***hbxij(double ***po, int nhstepm, double age, int hstepm, double *x, double ***prevacurrent, int nlstate, int stepm, int ij, int nres )
{
- /* Computes the transition matrix starting at age 'age' over
+ /* For a combination of dummy covariate ij, computes the transition matrix starting at age 'age' over
'nhstepm*hstepm*stepm' months (i.e. until
age (in years) age+nhstepm*hstepm*stepm/12) by multiplying
nhstepm*hstepm matrices.
@@ -3159,18 +3214,19 @@ double ***hbxij(double ***po, int nhstep
(typically every 2 years instead of every month which is too big
for the memory).
Model is determined by parameters x and covariates have to be
- included manually here.
-
+ included manually here. Then we use a call to bmij(x and cov)
+ The addresss of po (p3mat allocated to the dimension of nhstepm) should be stored for output
*/
int i, j, d, h, k;
- double **out, cov[NCOVMAX+1];
- double **newm;
+ double **out, cov[NCOVMAX+1], **bmij();
+ double **newm, ***newmm;
double agexact;
double agebegin, ageend;
double **oldm, **savm;
- oldm=oldms;savm=savms;
+ newmm=po; /* To be saved */
+ oldm=oldms;savm=savms; /* Global pointers */
/* Hstepm could be zero and should return the unit matrix */
for (i=1;i<=nlstate+ndeath;i++)
for (j=1;j<=nlstate+ndeath;j++){
@@ -3183,27 +3239,38 @@ double ***hbxij(double ***po, int nhstep
newm=savm;
/* Covariates have to be included here again */
cov[1]=1.;
- agexact=age-((h-1)*hstepm + (d-1))*stepm/YEARM; /* age just before transition */
+ agexact=age-((h-1)*hstepm + (d))*stepm/YEARM; /* age just before transition, d or d-1? */
/* agexact=age+((h-1)*hstepm + (d-1))*stepm/YEARM; /\* age just before transition *\/ */
cov[2]=agexact;
if(nagesqr==1)
cov[3]= agexact*agexact;
- for (k=1; k<=cptcovn;k++)
- cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)];
- /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; */
- for (k=1; k<=cptcovage;k++) /* Should start at cptcovn+1 */
- /* cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */
- cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2];
- /* cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k]])]*cov[2]; */
- for (k=1; k<=cptcovprod;k++) /* Useless because included in cptcovn */
+ for (k=1; k<=cptcovn;k++){
+ /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; */
+ /* /\* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; *\/ */
+ cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)];
+ /* printf("hbxij Dummy agexact=%.0f combi=%d k=%d TvarsD[%d]=V%d TvarsDind[%d]=%d nbcode=%d cov[%d]=%lf codtabm(%d,Tvar[%d])=%d \n",agexact,ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],2+nagesqr+TvarsDind[k],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); */
+ }
+ for (k=1; k<=nsq;k++) { /* For single varying covariates only */
+ /* Here comes the value of quantitative after renumbering k with single quantitative covariates */
+ cov[2+nagesqr+TvarsQind[k]]=Tqresult[nres][k];
+ /* printf("hPxij Quantitative k=%d TvarsQind[%d]=%d, TvarsQ[%d]=V%d,Tqresult[%d][%d]=%f\n",k,k,TvarsQind[k],k,TvarsQ[k],nres,k,Tqresult[nres][k]); */
+ }
+ for (k=1; k<=cptcovage;k++){ /* Should start at cptcovn+1 */
+ if(Dummy[Tvar[Tage[k]]]){
+ cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2];
+ } else{
+ cov[2+nagesqr+Tage[k]]=Tqresult[nres][k];
+ }
+ /* printf("hBxij Age combi=%d k=%d Tage[%d]=V%d Tqresult[%d][%d]=%f\n",ij,k,k,Tage[k],nres,k,Tqresult[nres][k]); */
+ }
+ for (k=1; k<=cptcovprod;k++){ /* Useless because included in cptcovn */
cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)];
- /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])]*nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */
-
-
+ }
/*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/
/*printf("h=%d d=%d age=%f cov=%f\n",h,d,age,cov[2]);*/
+
/* Careful transposed matrix */
- /* age is in cov[2] */
+ /* age is in cov[2], prevacurrent at beginning of transition. */
/* out=matprod2(newm, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent, dnewm, doldm, dsavm,ij),\ */
/* 1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); */
out=matprod2(newm, bmij(pmmij,cov,ncovmodel,x,nlstate,prevacurrent,ij),\
@@ -3228,11 +3295,12 @@ double ***hbxij(double ***po, int nhstep
for(i=1; i<=nlstate+ndeath; i++)
for(j=1;j<=nlstate+ndeath;j++) {
po[i][j][h]=newm[i][j];
- /*if(h==nhstepm) printf("po[%d][%d][%d]=%f ",i,j,h,po[i][j][h]);*/
+ /* if(h==nhstepm) */
+ /* printf("po[%d][%d][%d]=%f ",i,j,h,po[i][j][h]); */
}
- /*printf("h=%d ",h);*/
+ /* printf("h=%d %.1f ",h, agexact); */
} /* end h */
- /* printf("\n H=%d \n",h); */
+ /* printf("\n H=%d nhs=%d \n",h, nhstepm); */
return po;
}
@@ -3687,7 +3755,7 @@ double funcone( double *x)
s1=s[mw[mi][i]][i];
s2=s[mw[mi+1][i]][i];
/* if(s2==-1){ */
- /* printf(" s1=%d, s2=%d i=%d \n", s1, s2, i); */
+ /* printf(" ERROR s1=%d, s2=%d i=%d \n", s1, s2, i); */
/* /\* exit(1); *\/ */
/* } */
bbh=(double)bh[mi][i]/(double)stepm;
@@ -3720,7 +3788,7 @@ double funcone( double *x)
fprintf(ficresilk,"%09ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\
%11.6f %11.6f %11.6f ", \
num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw,
- 2*weight[i]*lli,out[s1][s2],savm[s1][s2]);
+ 2*weight[i]*lli,(s2==-1? -1: out[s1][s2]),(s2==-1? -1: savm[s1][s2]));
for(k=1,llt=0.,l=0.; k<=nlstate; k++){
llt +=ll[k]*gipmx/gsw;
fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw);
@@ -4240,70 +4308,7 @@ void pstamp(FILE *fichier)
fprintf(fichier,"# %s.%s\n#IMaCh version %s, %s\n#%s\n# %s", optionfilefiname,optionfilext,version,copyright, fullversion, strstart);
}
-int linreg(int ifi, int ila, int *no, const double x[], const double y[], double* a, double* b, double* r, double* sa, double * sb) {
- /* y=a+bx regression */
- double sumx = 0.0; /* sum of x */
- double sumx2 = 0.0; /* sum of x**2 */
- double sumxy = 0.0; /* sum of x * y */
- double sumy = 0.0; /* sum of y */
- double sumy2 = 0.0; /* sum of y**2 */
- double sume2; /* sum of square or residuals */
- double yhat;
-
- double denom=0;
- int i;
- int ne=*no;
-
- for ( i=ifi, ne=0;i<=ila;i++) {
- if(!isfinite(x[i]) || !isfinite(y[i])){
- /* printf(" x[%d]=%f, y[%d]=%f\n",i,x[i],i,y[i]); */
- continue;
- }
- ne=ne+1;
- sumx += x[i];
- sumx2 += x[i]*x[i];
- sumxy += x[i] * y[i];
- sumy += y[i];
- sumy2 += y[i]*y[i];
- denom = (ne * sumx2 - sumx*sumx);
- /* printf("ne=%d, i=%d,x[%d]=%f, y[%d]=%f sumx=%f, sumx2=%f, sumxy=%f, sumy=%f, sumy2=%f, denom=%f\n",ne,i,i,x[i],i,y[i], sumx, sumx2,sumxy, sumy, sumy2,denom); */
- }
-
- denom = (ne * sumx2 - sumx*sumx);
- if (denom == 0) {
- // vertical, slope m is infinity
- *b = INFINITY;
- *a = 0;
- if (r) *r = 0;
- return 1;
- }
-
- *b = (ne * sumxy - sumx * sumy) / denom;
- *a = (sumy * sumx2 - sumx * sumxy) / denom;
- if (r!=NULL) {
- *r = (sumxy - sumx * sumy / ne) / /* compute correlation coeff */
- sqrt((sumx2 - sumx*sumx/ne) *
- (sumy2 - sumy*sumy/ne));
- }
- *no=ne;
- for ( i=ifi, ne=0;i<=ila;i++) {
- if(!isfinite(x[i]) || !isfinite(y[i])){
- /* printf(" x[%d]=%f, y[%d]=%f\n",i,x[i],i,y[i]); */
- continue;
- }
- ne=ne+1;
- yhat = y[i] - *a -*b* x[i];
- sume2 += yhat * yhat ;
-
- denom = (ne * sumx2 - sumx*sumx);
- /* printf("ne=%d, i=%d,x[%d]=%f, y[%d]=%f sumx=%f, sumx2=%f, sumxy=%f, sumy=%f, sumy2=%f, denom=%f\n",ne,i,i,x[i],i,y[i], sumx, sumx2,sumxy, sumy, sumy2,denom); */
- }
- *sb = sqrt(sume2/(ne-2)/(sumx2 - sumx * sumx /ne));
- *sa= *sb * sqrt(sumx2/ne);
-
- return 0;
-}
/************ Frequencies ********************/
void freqsummary(char fileres[], double p[], double pstart[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \
@@ -4316,8 +4321,8 @@ void freqsummary(char fileres[], double
int mi; /* Effective wave */
int first;
double ***freq; /* Frequencies */
- double *x, *y, a,b,r, sa, sb; /* for regression, y=b+m*x and r is the correlation coefficient */
- int no;
+ double *x, *y, a=0.,b=0.,r=1., sa=0., sb=0.; /* for regression, y=b+m*x and r is the correlation coefficient */
+ int no=0, linreg(int ifi, int ila, int *no, const double x[], const double y[], double* a, double* b, double* r, double* sa, double * sb);
double *meanq;
double **meanqt;
double *pp, **prop, *posprop, *pospropt;
@@ -4755,6 +4760,8 @@ Title=%s
Datafile=%s Firstpass=%d La
y[iage]= log(freq[i][k][iage]/freq[i][i][iage]);
/* printf("i=%d, k=%d, s1=%d, j1=%d, jj=%d, y[%d]=%f\n",i,k,s1,j1,jj, iage, y[iage]); */
}
+ /* Some are not finite, but linreg will ignore these ages */
+ no=0;
linreg(iagemin,iagemax,&no,x,y,&a,&b,&r, &sa, &sb ); /* y= a+b*x with standard errors */
pstart[s1]=b;
pstart[s1-1]=a;
@@ -4858,6 +4865,72 @@ Title=%s
Datafile=%s Firstpass=%d La
/* End of freqsummary */
}
+/* Simple linear regression */
+int linreg(int ifi, int ila, int *no, const double x[], const double y[], double* a, double* b, double* r, double* sa, double * sb) {
+
+ /* y=a+bx regression */
+ double sumx = 0.0; /* sum of x */
+ double sumx2 = 0.0; /* sum of x**2 */
+ double sumxy = 0.0; /* sum of x * y */
+ double sumy = 0.0; /* sum of y */
+ double sumy2 = 0.0; /* sum of y**2 */
+ double sume2 = 0.0; /* sum of square or residuals */
+ double yhat;
+
+ double denom=0;
+ int i;
+ int ne=*no;
+
+ for ( i=ifi, ne=0;i<=ila;i++) {
+ if(!isfinite(x[i]) || !isfinite(y[i])){
+ /* printf(" x[%d]=%f, y[%d]=%f\n",i,x[i],i,y[i]); */
+ continue;
+ }
+ ne=ne+1;
+ sumx += x[i];
+ sumx2 += x[i]*x[i];
+ sumxy += x[i] * y[i];
+ sumy += y[i];
+ sumy2 += y[i]*y[i];
+ denom = (ne * sumx2 - sumx*sumx);
+ /* printf("ne=%d, i=%d,x[%d]=%f, y[%d]=%f sumx=%f, sumx2=%f, sumxy=%f, sumy=%f, sumy2=%f, denom=%f\n",ne,i,i,x[i],i,y[i], sumx, sumx2,sumxy, sumy, sumy2,denom); */
+ }
+
+ denom = (ne * sumx2 - sumx*sumx);
+ if (denom == 0) {
+ // vertical, slope m is infinity
+ *b = INFINITY;
+ *a = 0;
+ if (r) *r = 0;
+ return 1;
+ }
+
+ *b = (ne * sumxy - sumx * sumy) / denom;
+ *a = (sumy * sumx2 - sumx * sumxy) / denom;
+ if (r!=NULL) {
+ *r = (sumxy - sumx * sumy / ne) / /* compute correlation coeff */
+ sqrt((sumx2 - sumx*sumx/ne) *
+ (sumy2 - sumy*sumy/ne));
+ }
+ *no=ne;
+ for ( i=ifi, ne=0;i<=ila;i++) {
+ if(!isfinite(x[i]) || !isfinite(y[i])){
+ /* printf(" x[%d]=%f, y[%d]=%f\n",i,x[i],i,y[i]); */
+ continue;
+ }
+ ne=ne+1;
+ yhat = y[i] - *a -*b* x[i];
+ sume2 += yhat * yhat ;
+
+ denom = (ne * sumx2 - sumx*sumx);
+ /* printf("ne=%d, i=%d,x[%d]=%f, y[%d]=%f sumx=%f, sumx2=%f, sumxy=%f, sumy=%f, sumy2=%f, denom=%f\n",ne,i,i,x[i],i,y[i], sumx, sumx2,sumxy, sumy, sumy2,denom); */
+ }
+ *sb = sqrt(sume2/(double)(ne-2)/(sumx2 - sumx * sumx /(double)ne));
+ *sa= *sb * sqrt(sumx2/ne);
+
+ return 0;
+}
+
/************ 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)
{
@@ -4947,7 +5020,10 @@ void prevalence(double ***probs, double
} else{
if(first==1){
first=0;
- printf("Warning Observed prevalence probs[%d][%d][%d]=%lf because of lack of cases\nSee others in log file...\n",jk,i,j1,probs[i][jk][j1]);
+ printf("Warning Observed prevalence doesn't sum to 1 for state %d: probs[%d][%d][%d]=%lf because of lack of cases\nSee others in log file...\n",jk,i,jk, j1,probs[i][jk][j1]);
+ fprintf(ficlog,"Warning Observed prevalence doesn't sum to 1 for state %d: probs[%d][%d][%d]=%lf because of lack of cases\nSee others in log file...\n",jk,i,jk, j1,probs[i][jk][j1]);
+ }else{
+ fprintf(ficlog,"Warning Observed prevalence doesn't sum to 1 for state %d: probs[%d][%d][%d]=%lf because of lack of cases\nSee others in log file...\n",jk,i,jk, j1,probs[i][jk][j1]);
}
}
}
@@ -5991,7 +6067,7 @@ void concatwav(int wav[], int **dh, int
/* Variance of prevalence limit for each state ij using current parameters x[] and estimates of neighbourhood give by delti*/
/* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double **savm,double ftolpl);*/
- double **dnewm,**doldm;
+ double **dnewmpar,**doldm;
int i, j, nhstepm, hstepm;
double *xp;
double *gp, *gm;
@@ -6010,7 +6086,7 @@ void concatwav(int wav[], int **dh, int
fprintf(ficresvpl,"\n");
xp=vector(1,npar);
- dnewm=matrix(1,nlstate,1,npar);
+ dnewmpar=matrix(1,nlstate,1,npar);
doldm=matrix(1,nlstate,1,nlstate);
hstepm=1*YEARM; /* Every year of age */
@@ -6080,11 +6156,11 @@ void concatwav(int wav[], int **dh, int
for(i=1;i<=nlstate;i++)
varpl[i][(int)age] =0.;
if((int)age==79 ||(int)age== 80 ||(int)age== 81){
- matprod2(dnewm,trgradg,1,nlstate,1,npar,1,npar,matcov);
- matprod2(doldm,dnewm,1,nlstate,1,npar,1,nlstate,gradg);
+ matprod2(dnewmpar,trgradg,1,nlstate,1,npar,1,npar,matcov);
+ matprod2(doldm,dnewmpar,1,nlstate,1,npar,1,nlstate,gradg);
}else{
- matprod2(dnewm,trgradg,1,nlstate,1,npar,1,npar,matcov);
- matprod2(doldm,dnewm,1,nlstate,1,npar,1,nlstate,gradg);
+ matprod2(dnewmpar,trgradg,1,nlstate,1,npar,1,npar,matcov);
+ matprod2(doldm,dnewmpar,1,nlstate,1,npar,1,nlstate,gradg);
}
for(i=1;i<=nlstate;i++)
varpl[i][(int)age] = doldm[i][i]; /* Covariances are useless */
@@ -6105,69 +6181,194 @@ void concatwav(int wav[], int **dh, int
free_vector(xp,1,npar);
free_matrix(doldm,1,nlstate,1,npar);
- free_matrix(dnewm,1,nlstate,1,nlstate);
+ free_matrix(dnewmpar,1,nlstate,1,nlstate);
}
-/************ Variance of one-step probabilities ******************/
-void varprob(char optionfilefiname[], double **matcov, double x[], double delti[], int nlstate, double bage, double fage, int ij, int *Tvar, int **nbcode, int *ncodemax, char strstart[])
- {
- int i, j=0, k1, l1, tj;
- int k2, l2, j1, z1;
- int k=0, l;
- int first=1, first1, first2;
- double cv12, mu1, mu2, lc1, lc2, v12, v21, v11, v22,v1,v2, c12, tnalp;
- double **dnewm,**doldm;
- double *xp;
- double *gp, *gm;
- double **gradg, **trgradg;
- double **mu;
- double age, cov[NCOVMAX+1];
- double std=2.0; /* Number of standard deviation wide of confidence ellipsoids */
- int theta;
- char fileresprob[FILENAMELENGTH];
- char fileresprobcov[FILENAMELENGTH];
- char fileresprobcor[FILENAMELENGTH];
- double ***varpij;
- strcpy(fileresprob,"PROB_");
- strcat(fileresprob,fileres);
- if((ficresprob=fopen(fileresprob,"w"))==NULL) {
- printf("Problem with resultfile: %s\n", fileresprob);
- fprintf(ficlog,"Problem with resultfile: %s\n", fileresprob);
- }
- strcpy(fileresprobcov,"PROBCOV_");
- strcat(fileresprobcov,fileresu);
- if((ficresprobcov=fopen(fileresprobcov,"w"))==NULL) {
- printf("Problem with resultfile: %s\n", fileresprobcov);
- fprintf(ficlog,"Problem with resultfile: %s\n", fileresprobcov);
- }
- strcpy(fileresprobcor,"PROBCOR_");
- strcat(fileresprobcor,fileresu);
- if((ficresprobcor=fopen(fileresprobcor,"w"))==NULL) {
- printf("Problem with resultfile: %s\n", fileresprobcor);
- fprintf(ficlog,"Problem with resultfile: %s\n", fileresprobcor);
- }
- printf("Computing standard deviation of one-step probabilities: result on file '%s' \n",fileresprob);
- fprintf(ficlog,"Computing standard deviation of one-step probabilities: result on file '%s' \n",fileresprob);
- printf("Computing matrix of variance covariance of one-step probabilities: result on file '%s' \n",fileresprobcov);
- fprintf(ficlog,"Computing matrix of variance covariance of one-step probabilities: result on file '%s' \n",fileresprobcov);
- printf("and correlation matrix of one-step probabilities: result on file '%s' \n",fileresprobcor);
- fprintf(ficlog,"and correlation matrix of one-step probabilities: result on file '%s' \n",fileresprobcor);
- pstamp(ficresprob);
- fprintf(ficresprob,"#One-step probabilities and stand. devi in ()\n");
- fprintf(ficresprob,"# Age");
- pstamp(ficresprobcov);
- fprintf(ficresprobcov,"#One-step probabilities and covariance matrix\n");
- fprintf(ficresprobcov,"# Age");
- pstamp(ficresprobcor);
- fprintf(ficresprobcor,"#One-step probabilities and correlation matrix\n");
- fprintf(ficresprobcor,"# Age");
+/************ Variance of backprevalence limit ******************/
+ void varbrevlim(char fileres[], double **varbpl, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **bprlim, double ftolpl, int mobilavproj, int *ncvyearp, int ij, char strstart[], int nres)
+{
+ /* Variance of backward prevalence limit for each state ij using current parameters x[] and estimates of neighbourhood give by delti*/
+ /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double **savm,double ftolpl);*/
+ double **dnewmpar,**doldm;
+ int i, j, nhstepm, hstepm;
+ double *xp;
+ double *gp, *gm;
+ double **gradg, **trgradg;
+ double **mgm, **mgp;
+ double age,agelim;
+ int theta;
+
+ pstamp(ficresvbl);
+ fprintf(ficresvbl,"# Standard deviation of back (stable) prevalences \n");
+ fprintf(ficresvbl,"# Age ");
+ if(nresult >=1)
+ fprintf(ficresvbl," Result# ");
+ for(i=1; i<=nlstate;i++)
+ fprintf(ficresvbl," %1d-%1d",i,i);
+ fprintf(ficresvbl,"\n");
- for(i=1; i<=nlstate;i++)
- for(j=1; j<=(nlstate+ndeath);j++){
- fprintf(ficresprob," p%1d-%1d (SE)",i,j);
+ xp=vector(1,npar);
+ dnewmpar=matrix(1,nlstate,1,npar);
+ doldm=matrix(1,nlstate,1,nlstate);
+
+ hstepm=1*YEARM; /* Every year of age */
+ hstepm=hstepm/stepm; /* Typically in stepm units, if j= 2 years, = 2/6 months = 4 */
+ agelim = AGEINF;
+ for (age=fage; age>=bage; age --){ /* If stepm=6 months */
+ nhstepm=(int) rint((age-agelim)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */
+ if (stepm >= YEARM) hstepm=1;
+ nhstepm = nhstepm/hstepm; /* Typically 40/4=10 */
+ gradg=matrix(1,npar,1,nlstate);
+ mgp=matrix(1,npar,1,nlstate);
+ mgm=matrix(1,npar,1,nlstate);
+ gp=vector(1,nlstate);
+ gm=vector(1,nlstate);
+
+ for(theta=1; theta <=npar; theta++){
+ for(i=1; i<=npar; i++){ /* Computes gradient */
+ xp[i] = x[i] + (i==theta ?delti[theta]:0);
+ }
+ if(mobilavproj > 0 )
+ bprevalim(bprlim, mobaverage,nlstate,xp,age,ftolpl,ncvyearp,ij,nres);
+ else
+ bprevalim(bprlim, mobaverage,nlstate,xp,age,ftolpl,ncvyearp,ij,nres);
+ for(i=1;i<=nlstate;i++){
+ gp[i] = bprlim[i][i];
+ mgp[theta][i] = bprlim[i][i];
+ }
+ for(i=1; i<=npar; i++) /* Computes gradient */
+ xp[i] = x[i] - (i==theta ?delti[theta]:0);
+ if(mobilavproj > 0 )
+ bprevalim(bprlim, mobaverage,nlstate,xp,age,ftolpl,ncvyearp,ij,nres);
+ else
+ bprevalim(bprlim, mobaverage,nlstate,xp,age,ftolpl,ncvyearp,ij,nres);
+ for(i=1;i<=nlstate;i++){
+ gm[i] = bprlim[i][i];
+ mgm[theta][i] = bprlim[i][i];
+ }
+ for(i=1;i<=nlstate;i++)
+ gradg[theta][i]= (gp[i]-gm[i])/2./delti[theta];
+ /* gradg[theta][2]= -gradg[theta][1]; */ /* For testing if nlstate=2 */
+ } /* End theta */
+
+ trgradg =matrix(1,nlstate,1,npar);
+
+ for(j=1; j<=nlstate;j++)
+ for(theta=1; theta <=npar; theta++)
+ trgradg[j][theta]=gradg[theta][j];
+ /* if((int)age==79 ||(int)age== 80 ||(int)age== 81 ){ */
+ /* printf("\nmgm mgp %d ",(int)age); */
+ /* for(j=1; j<=nlstate;j++){ */
+ /* printf(" %d ",j); */
+ /* for(theta=1; theta <=npar; theta++) */
+ /* printf(" %d %lf %lf",theta,mgm[theta][j],mgp[theta][j]); */
+ /* printf("\n "); */
+ /* } */
+ /* } */
+ /* if((int)age==79 ||(int)age== 80 ||(int)age== 81 ){ */
+ /* printf("\n gradg %d ",(int)age); */
+ /* for(j=1; j<=nlstate;j++){ */
+ /* printf("%d ",j); */
+ /* for(theta=1; theta <=npar; theta++) */
+ /* printf("%d %lf ",theta,gradg[theta][j]); */
+ /* printf("\n "); */
+ /* } */
+ /* } */
+
+ for(i=1;i<=nlstate;i++)
+ varbpl[i][(int)age] =0.;
+ if((int)age==79 ||(int)age== 80 ||(int)age== 81){
+ matprod2(dnewmpar,trgradg,1,nlstate,1,npar,1,npar,matcov);
+ matprod2(doldm,dnewmpar,1,nlstate,1,npar,1,nlstate,gradg);
+ }else{
+ matprod2(dnewmpar,trgradg,1,nlstate,1,npar,1,npar,matcov);
+ matprod2(doldm,dnewmpar,1,nlstate,1,npar,1,nlstate,gradg);
+ }
+ for(i=1;i<=nlstate;i++)
+ varbpl[i][(int)age] = doldm[i][i]; /* Covariances are useless */
+
+ fprintf(ficresvbl,"%.0f ",age );
+ if(nresult >=1)
+ fprintf(ficresvbl,"%d ",nres );
+ for(i=1; i<=nlstate;i++)
+ fprintf(ficresvbl," %.5f (%.5f)",bprlim[i][i],sqrt(varbpl[i][(int)age]));
+ fprintf(ficresvbl,"\n");
+ free_vector(gp,1,nlstate);
+ free_vector(gm,1,nlstate);
+ free_matrix(mgm,1,npar,1,nlstate);
+ free_matrix(mgp,1,npar,1,nlstate);
+ free_matrix(gradg,1,npar,1,nlstate);
+ free_matrix(trgradg,1,nlstate,1,npar);
+ } /* End age */
+
+ free_vector(xp,1,npar);
+ free_matrix(doldm,1,nlstate,1,npar);
+ free_matrix(dnewmpar,1,nlstate,1,nlstate);
+
+}
+
+/************ Variance of one-step probabilities ******************/
+void varprob(char optionfilefiname[], double **matcov, double x[], double delti[], int nlstate, double bage, double fage, int ij, int *Tvar, int **nbcode, int *ncodemax, char strstart[])
+ {
+ int i, j=0, k1, l1, tj;
+ int k2, l2, j1, z1;
+ int k=0, l;
+ int first=1, first1, first2;
+ double cv12, mu1, mu2, lc1, lc2, v12, v21, v11, v22,v1,v2, c12, tnalp;
+ double **dnewm,**doldm;
+ double *xp;
+ double *gp, *gm;
+ double **gradg, **trgradg;
+ double **mu;
+ double age, cov[NCOVMAX+1];
+ double std=2.0; /* Number of standard deviation wide of confidence ellipsoids */
+ int theta;
+ char fileresprob[FILENAMELENGTH];
+ char fileresprobcov[FILENAMELENGTH];
+ char fileresprobcor[FILENAMELENGTH];
+ double ***varpij;
+
+ strcpy(fileresprob,"PROB_");
+ strcat(fileresprob,fileres);
+ if((ficresprob=fopen(fileresprob,"w"))==NULL) {
+ printf("Problem with resultfile: %s\n", fileresprob);
+ fprintf(ficlog,"Problem with resultfile: %s\n", fileresprob);
+ }
+ strcpy(fileresprobcov,"PROBCOV_");
+ strcat(fileresprobcov,fileresu);
+ if((ficresprobcov=fopen(fileresprobcov,"w"))==NULL) {
+ printf("Problem with resultfile: %s\n", fileresprobcov);
+ fprintf(ficlog,"Problem with resultfile: %s\n", fileresprobcov);
+ }
+ strcpy(fileresprobcor,"PROBCOR_");
+ strcat(fileresprobcor,fileresu);
+ if((ficresprobcor=fopen(fileresprobcor,"w"))==NULL) {
+ printf("Problem with resultfile: %s\n", fileresprobcor);
+ fprintf(ficlog,"Problem with resultfile: %s\n", fileresprobcor);
+ }
+ printf("Computing standard deviation of one-step probabilities: result on file '%s' \n",fileresprob);
+ fprintf(ficlog,"Computing standard deviation of one-step probabilities: result on file '%s' \n",fileresprob);
+ printf("Computing matrix of variance covariance of one-step probabilities: result on file '%s' \n",fileresprobcov);
+ fprintf(ficlog,"Computing matrix of variance covariance of one-step probabilities: result on file '%s' \n",fileresprobcov);
+ printf("and correlation matrix of one-step probabilities: result on file '%s' \n",fileresprobcor);
+ fprintf(ficlog,"and correlation matrix of one-step probabilities: result on file '%s' \n",fileresprobcor);
+ pstamp(ficresprob);
+ fprintf(ficresprob,"#One-step probabilities and stand. devi in ()\n");
+ fprintf(ficresprob,"# Age");
+ pstamp(ficresprobcov);
+ fprintf(ficresprobcov,"#One-step probabilities and covariance matrix\n");
+ fprintf(ficresprobcov,"# Age");
+ pstamp(ficresprobcor);
+ fprintf(ficresprobcor,"#One-step probabilities and correlation matrix\n");
+ fprintf(ficresprobcor,"# Age");
+
+
+ for(i=1; i<=nlstate;i++)
+ for(j=1; j<=(nlstate+ndeath);j++){
+ fprintf(ficresprob," p%1d-%1d (SE)",i,j);
fprintf(ficresprobcov," p%1d-%1d ",i,j);
fprintf(ficresprobcor," p%1d-%1d ",i,j);
}
@@ -6185,7 +6386,7 @@ void varprob(char optionfilefiname[], do
fprintf(fichtm,"\n
Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year-1\
: \
%s_%d%1d%1d-%1d%1d.svg, ",k1,l1,k2,l2,\
subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2, \
@@ -6413,16 +6614,16 @@ To be simple, these graphs help to under
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));
+ mu1,std,v11,sqrt(lc1),v12,sqrt(fabs(lc2)), \
+ mu2,std,v21,sqrt(lc1),v22,sqrt(fabs(lc2))); /* For gnuplot only */
}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));
+ mu1,std,v11,sqrt(lc1),v12,sqrt(fabs(lc2)), \
+ mu2,std,v21,sqrt(lc1),v22,sqrt(fabs(lc2)));
}/* if first */
} /* age mod 5 */
} /* end loop age */
@@ -6606,10 +6807,17 @@ divided by h: hPij
if(prevfcast==1){
/* Projection of prevalence up to period (stable) prevalence in each health state */
for(cpt=1; cpt<=nlstate;cpt++){
- fprintf(fichtm,"
\n- Projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f and mobil_average=%d) up to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. %s_%d-%d-%d.svg
\
+ fprintf(fichtm,"
\n- Projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f and mobil_average=%d) up to period (stable) prevalence in state %d. Or probability to be in state %d being in an observed weighted state (from 1 to %d). %s_%d-%d-%d.svg
\
", dateprev1, dateprev2, mobilavproj, cpt, cpt, nlstate, subdirf2(optionfilefiname,"PROJ_"),cpt,k1,nres,subdirf2(optionfilefiname,"PROJ_"),cpt,k1,nres,subdirf2(optionfilefiname,"PROJ_"),cpt,k1,nres);
}
}
+ if(backcast==1){
+ /* Back projection of prevalence up to stable (mixed) back-prevalence in each health state */
+ for(cpt=1; cpt<=nlstate;cpt++){
+ fprintf(fichtm,"
\n- Back projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f and mobil_average=%d) up to stable (mixed) back prevalence in state %d. Or probability to have been in an state %d, knowing that the person was in either state (1 or %d) with weights corresponding to observed prevalence at different ages. %s_%d-%d-%d.svg
\
+", dateprev1, dateprev2, mobilavproj, cpt, cpt, nlstate, subdirf2(optionfilefiname,"PROJB_"),cpt,k1,nres,subdirf2(optionfilefiname,"PROJB_"),cpt,k1,nres,subdirf2(optionfilefiname,"PROJB_"),cpt,k1,nres);
+ }
+ }
for(cpt=1; cpt<=nlstate;cpt++) {
fprintf(fichtm,"\n
- 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): %s_%d-%d-%d.svg
\
@@ -6713,7 +6921,7 @@ true period expectancies (those weighted
}
/******************* Gnuplot file **************/
-void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar, double agemaxpar, double fage , int prevfcast, int backcast, char pathc[], double p[]){
+void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar, double agemaxpar, double fage , int prevfcast, int backcast, char pathc[], double p[], int offyear, int offbyear){
char dirfileres[132],optfileres[132];
char gplotcondition[132], gplotlabel[132];
@@ -6723,6 +6931,7 @@ void printinggnuplot(char fileresu[], ch
int vpopbased;
int ioffset; /* variable offset for columns */
int nres=0; /* Index of resultline */
+ int istart=1; /* For starting graphs in projections */
/* if((ficgp=fopen(optionfilegnuplot,"a"))==NULL) { */
/* printf("Problem with file %s",optionfilegnuplot); */
@@ -6876,6 +7085,25 @@ void printinggnuplot(char fileresu[], ch
}
} /* end covariate */
} /* end if no covariate */
+ if(backcast == 1){
+ fprintf(ficgp,", \"%s\" every :::%d::%d u 1:($2==%d ? $3:1/0) \"%%lf %%lf",subdirf2(fileresu,"VBL_"),nres-1,nres-1,nres);
+ /* k1-1 error should be nres-1*/
+ for (i=1; i<= nlstate ; i ++) {
+ if (i==cpt) fprintf(ficgp," %%lf (%%lf)");
+ else fprintf(ficgp," %%*lf (%%*lf)");
+ }
+ fprintf(ficgp,"\" t\"Backward (stable) prevalence\" w l lt 0,\"%s\" every :::%d::%d u 1:($2==%d ? $3+1.96*$4 : 1/0) \"%%lf %%lf",subdirf2(fileresu,"VBL_"),nres-1,nres-1,nres);
+ for (i=1; i<= nlstate ; i ++) {
+ if (i==cpt) fprintf(ficgp," %%lf (%%lf)");
+ else fprintf(ficgp," %%*lf (%%*lf)");
+ }
+ fprintf(ficgp,"\" t\"95%% CI\" w l lt 1,\"%s\" every :::%d::%d u 1:($2==%d ? $3-1.96*$4 : 1/0) \"%%lf %%lf",subdirf2(fileresu,"VBL_"),nres-1,nres-1,nres);
+ for (i=1; i<= nlstate ; i ++) {
+ if (i==cpt) fprintf(ficgp," %%lf (%%lf)");
+ else fprintf(ficgp," %%*lf (%%*lf)");
+ }
+ fprintf(ficgp,"\" t\"\" w l lt 1");
+ } /* end if backprojcast */
} /* end if backcast */
fprintf(ficgp,"\nset out ;unset label;\n");
} /* nres */
@@ -7169,7 +7397,7 @@ set ter svg size 640, 480\nunset log y\n
for(nres=1; nres <= nresult; nres++){ /* For each resultline */
if(m != 1 && TKresult[nres]!= k1)
continue;
- for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life ending state */
+ for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life origin state */
strcpy(gplotlabel,"(");
fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pijb' files, covariatecombination#=%d state=%d",k1, cpt);
for (k=1; k<=cptcoveff; k++){ /* For each covariate and each value */
@@ -7193,11 +7421,11 @@ set ter svg size 640, 480\nunset log y\n
}
fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1,nres);
- fprintf(ficgp,"set label \"Ending alive state %d %s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",cpt,gplotlabel);
+ fprintf(ficgp,"set label \"Origin alive state %d %s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",cpt,gplotlabel);
fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\
set ter svg size 640, 480\nunset log y\nplot [%.f:%.f] ", ageminpar, agemaxpar);
k=3; /* Offset */
- for (i=1; i<= nlstate ; i ++){ /* State of origin */
+ for (i=1; i<= nlstate ; i ++){ /* State of arrival */
if(i==1)
fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJB_"));
else
@@ -7210,7 +7438,7 @@ set ter svg size 640, 480\nunset log y\n
/* 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);
+ fprintf(ficgp,") t \"bprev(%d,%d)\" w l",cpt,i);
} /* nlstate */
fprintf(ficgp,"\nset out; unset label;\n");
} /* end cpt state*/
@@ -7253,12 +7481,16 @@ set ter svg size 640, 480\nunset log y\n
fprintf(ficgp,"set label \"Alive state %d %s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",cpt,gplotlabel);
fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Prevalence\" \n\
set ter svg size 640, 480\nunset log y\nplot [%.f:%.f] ", ageminpar, agemaxpar);
- for (i=1; i<= nlstate+1 ; i ++){ /* nlstate +1 p11 p21 p.1 */
+
+ /* for (i=1; i<= nlstate+1 ; i ++){ /\* nlstate +1 p11 p21 p.1 *\/ */
+ istart=nlstate+1; /* Could be one if by state, but nlstate+1 is w.i projection only */
+ /*istart=1;*/ /* Could be one if by state, but nlstate+1 is w.i projection only */
+ for (i=istart; i<= nlstate+1 ; i ++){ /* nlstate +1 p11 p21 p.1 */
/*# 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 */
/*# 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 */
- if(i==1){
+ if(i==istart){
fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"F_"));
}else{
fprintf(ficgp,",\\\n '' ");
@@ -7270,10 +7502,15 @@ set ter svg size 640, 480\nunset log y\n
/*# V1 = 1 yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/
/*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */
fprintf(ficgp," u %d:(", ioffset);
- if(i==nlstate+1)
- fprintf(ficgp," $%d/(1.-$%d)) t 'pw.%d' with line ", \
+ if(i==nlstate+1){
+ fprintf(ficgp," $%d/(1.-$%d)):5 t 'pw.%d' with line lc variable ", \
ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt );
- else
+ fprintf(ficgp,",\\\n '' ");
+ fprintf(ficgp," u %d:(",ioffset);
+ fprintf(ficgp," (($5-$6) == %d ) ? $%d/(1.-$%d) : 1/0):5 with labels center not ", \
+ offyear, \
+ ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate );
+ }else
fprintf(ficgp," $%d/(1.-$%d)) t 'p%d%d' with line ", \
ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,i,cpt );
}else{ /* more than 2 covariates */
@@ -7305,8 +7542,14 @@ set ter svg size 640, 480\nunset log y\n
/*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, \
+ fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0):5 t 'p.%d' with line lc variable", gplotcondition, \
ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt );
+ fprintf(ficgp,",\\\n '' ");
+ fprintf(ficgp," u %d:(",ioffset);
+ fprintf(ficgp,"%s && (($5-$6) == %d ) ? $%d/(1.-$%d) : 1/0):5 with labels center not ", gplotcondition, \
+ offyear, \
+ ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate );
+/* '' u 6:(($1==1 && $2==0 && $3==2 && $4==0) && (($5-$6) == 1947) ? $10/(1.-$22) : 1/0):5 with labels center boxed not*/
}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 );
@@ -7318,6 +7561,123 @@ set ter svg size 640, 480\nunset log y\n
} /* end covariate */
} /* End if prevfcast */
+ if(backcast==1){
+ /* Back projection from cross-sectional to stable (mixed) for each covariate */
+
+ for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */
+ for(nres=1; nres <= nresult; nres++){ /* For each resultline */
+ if(m != 1 && TKresult[nres]!= k1)
+ continue;
+ for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
+ strcpy(gplotlabel,"(");
+ fprintf(ficgp,"\n#\n#\n#Back projection of prevalence to stable (mixed) back prevalence: 'BPROJ_' files, covariatecombination#=%d originstate=%d",k1, cpt);
+ for (k=1; k<=cptcoveff; k++){ /* For each correspondig covariate value */
+ lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */
+ /* 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);
+ sprintf(gplotlabel+strlen(gplotlabel)," V%d=%d ",Tvaraff[k],vlv);
+ }
+ for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
+ fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
+ sprintf(gplotlabel+strlen(gplotlabel)," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
+ }
+ strcpy(gplotlabel+strlen(gplotlabel),")");
+ fprintf(ficgp,"\n#\n");
+ if(invalidvarcomb[k1]){
+ fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);
+ continue;
+ }
+
+ fprintf(ficgp,"# hbijx=backprobability over h years, hb.jx is weighted by observed prev at destination state\n ");
+ fprintf(ficgp,"\nset out \"%s_%d-%d-%d.svg\" \n",subdirf2(optionfilefiname,"PROJB_"),cpt,k1,nres);
+ fprintf(ficgp,"set label \"Origin alive state %d %s\" at graph 0.98,0.5 center rotate font \"Helvetica,12\"\n",cpt,gplotlabel);
+ fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Prevalence\" \n\
+set ter svg size 640, 480\nunset log y\nplot [%.f:%.f] ", ageminpar, agemaxpar);
+
+ /* for (i=1; i<= nlstate+1 ; i ++){ /\* nlstate +1 p11 p21 p.1 *\/ */
+ istart=nlstate+1; /* Could be one if by state, but nlstate+1 is w.i projection only */
+ /*istart=1;*/ /* Could be one if by state, but nlstate+1 is w.i projection only */
+ for (i=istart; i<= nlstate+1 ; i ++){ /* nlstate +1 p11 p21 p.1 */
+ /*# 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 */
+ /*# 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 */
+ if(i==istart){
+ fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"FB_"));
+ }else{
+ fprintf(ficgp,",\\\n '' ");
+ }
+ if(cptcoveff ==0){ /* No covariate */
+ ioffset=2; /* Age is in 2 */
+ /*# yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/
+ /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */
+ /*# V1 = 1 yearproj age p11 p21 p31 p.1 p12 p22 p32 p.2 p13 p23 p33 p.3 p14 p24 p34 p.4*/
+ /*# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */
+ fprintf(ficgp," u %d:(", ioffset);
+ if(i==nlstate+1){
+ fprintf(ficgp," $%d/(1.-$%d)):5 t 'bw%d' with line lc variable ", \
+ ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt );
+ fprintf(ficgp,",\\\n '' ");
+ fprintf(ficgp," u %d:(",ioffset);
+ fprintf(ficgp," (($5-$6) == %d ) ? $%d : 1/0):5 with labels center not ", \
+ offbyear, \
+ ioffset+(cpt-1)*(nlstate+1)+1+(i-1) );
+ }else
+ fprintf(ficgp," $%d/(1.-$%d)) t 'b%d%d' with line ", \
+ ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt,i );
+ }else{ /* more than 2 covariates */
+ if(cptcoveff ==1){
+ ioffset=4; /* Age is in 4 */
+ }else{
+ ioffset=6; /* Age is in 6 */
+ /*# 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);
+ kl=0;
+ 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]; /* Value of the modality of Tvaraff[k] */
+ kl++;
+ sprintf(gplotcondition+strlen(gplotcondition),"$%d==%d && $%d==%d " ,kl,Tvaraff[k], kl+1, nbcode[Tvaraff[k]][lv]);
+ kl++;
+ if(k
\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] */
@@ -11492,7 +11954,7 @@ Please run with mle=-1 to get a correct
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{
- printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p);
+ printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p, (int)anproj1-(int)agemin, (int)anback1-(int)agemax+1);
}
printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt, \
model,imx,jmin,jmax,jmean,rfileres,popforecast,mobilav,prevfcast,mobilavproj,backcast, estepm, \
@@ -11542,7 +12004,7 @@ Please run with mle=-1 to get a correct
if (mobilav!=0 ||mobilavproj !=0 ) {
mobaverages= ma3x(1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax);
for(i=1;i<=AGESUP;i++)
- for(j=1;j<=nlstate;j++)
+ for(j=1;j<=nlstate+ndeath;j++)
for(k=1;k<=ncovcombmax;k++)
mobaverages[i][j][k]=0.;
mobaverage=mobaverages;
@@ -11554,8 +12016,14 @@ Please run with mle=-1 to get a correct
printf(" Error in movingaverage mobilav=%d\n",mobilav);
}
}
- /* /\* Prevalence for each covariates in probs[age][status][cov] *\/ */
- /* prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); */
+ /* else if(mobilavproj==-1){ /\* Forcing raw observed prevalences *\/ */
+ /* for(i=1;i<=AGESUP;i++) */
+ /* for(j=1;j<=nlstate;j++) */
+ /* for(k=1;k<=ncovcombmax;k++) */
+ /* mobaverages[i][j][k]=probs[i][j][k]; */
+ /* /\* /\\* Prevalence for each covariates in probs[age][status][cov] *\\/ *\/ */
+ /* /\* prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); *\/ */
+ /* } */
else if (mobilavproj !=0) {
printf("Movingaveraging projected observed prevalence\n");
fprintf(ficlog,"Movingaveraging projected observed prevalence\n");
@@ -11585,15 +12053,67 @@ Please run with mle=-1 to get a correct
hBijx(p, bage, fage, mobaverage);
fclose(ficrespijb);
- free_matrix(bprlim,1,nlstate,1,nlstate); /*here or after loop ? */
+ /* free_matrix(bprlim,1,nlstate,1,nlstate); /\*here or after loop ? *\/ */
+
+ prevbackforecast(fileresu, mobaverage, anback1, mback1, jback1, agemin, agemax, dateprev1, dateprev2, mobilavproj,
+ bage, fage, firstpass, lastpass, anback2, p, cptcoveff);
+
+ /*------- Variance of back (stable) prevalence------*/
+
+ strcpy(fileresvbl,"VBL_");
+ strcat(fileresvbl,fileresu);
+ if((ficresvbl=fopen(fileresvbl,"w"))==NULL) {
+ printf("Problem with variance of back (stable) prevalence resultfile: %s\n", fileresvbl);
+ exit(0);
+ }
+ printf("Computing Variance-covariance of back (stable) prevalence: file '%s' ...", fileresvbl);fflush(stdout);
+ fprintf(ficlog, "Computing Variance-covariance of back (stable) prevalence: file '%s' ...", fileresvbl);fflush(ficlog);
+
+ /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){
+ for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/
+
+ i1=pow(2,cptcoveff);
+ if (cptcovn < 1){i1=1;}
+
+ for(nres=1; nres <= nresult; nres++) /* For each resultline */
+ for(k=1; k<=i1;k++){
+ if(i1 != 1 && TKresult[nres]!= k)
+ continue;
+ fprintf(ficresvbl,"\n#****** ");
+ printf("\n#****** ");
+ fprintf(ficlog,"\n#****** ");
+ for(j=1;j<=cptcoveff;j++) {
+ fprintf(ficresvbl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
+ fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
+ printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
+ }
+ for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
+ printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
+ fprintf(ficresvbl," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
+ fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
+ }
+ fprintf(ficresvbl,"******\n");
+ printf("******\n");
+ fprintf(ficlog,"******\n");
+
+ varbpl=matrix(1,nlstate,(int) bage, (int) fage);
+ oldm=oldms;savm=savms;
+
+ varbrevlim(fileres, varbpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, bprlim, ftolpl, mobilavproj, &ncvyear, k, strstart, nres);
+ free_matrix(varbpl,1,nlstate,(int) bage, (int)fage);
+ /*}*/
+ }
+
+ fclose(ficresvbl);
+ printf("done variance-covariance of back prevalence\n");fflush(stdout);
+ fprintf(ficlog,"done variance-covariance of back prevalence\n");fflush(ficlog);
- /* prevbackforecast(fileresu, anback1, mback1, jback1, agemin, agemax, dateprev1, dateprev2, mobilavproj,
- bage, fage, firstpass, lastpass, anback2, p, cptcoveff); */
free_matrix(ddnewms, 1, nlstate+ndeath, 1, nlstate+ndeath);
free_matrix(ddsavms, 1, nlstate+ndeath, 1, nlstate+ndeath);
free_matrix(ddoldms, 1, nlstate+ndeath, 1, nlstate+ndeath);
}
-
+ free_matrix(bprlim,1,nlstate,1,nlstate); /*here or after loop ? */
+
/* ------ Other prevalence ratios------------ */
@@ -11864,6 +12384,7 @@ Please run with mle=-1 to get a correct
fclose(ficresvpl);
printf("done variance-covariance of period prevalence\n");fflush(stdout);
fprintf(ficlog,"done variance-covariance of period prevalence\n");fflush(ficlog);
+
free_vector(weight,1,n);
free_imatrix(Tvard,1,NCOVMAX,1,2);
@@ -11890,9 +12411,9 @@ Please run with mle=-1 to get a correct
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_ma3x(cotqvar,1,maxwav,1,nqtv,1,n);
- free_ma3x(cotvar,1,maxwav,1,ntv+nqtv,1,n);
- free_matrix(coqvar,1,maxwav,1,n);
+ if(ntv+nqtv>=1)free_ma3x(cotvar,1,maxwav,1,ntv+nqtv,1,n);
+ if(nqtv>=1)free_ma3x(cotqvar,1,maxwav,1,nqtv,1,n);
+ if(nqv>=1)free_matrix(coqvar,1,nqv,1,n);
free_matrix(covar,0,NCOVMAX,1,n);
free_matrix(matcov,1,npar,1,npar);
free_matrix(hess,1,npar,1,npar);