version 1.223, 2016/02/19 09:23:35
|
version 1.225, 2016/07/12 08:40:03
|
Line 1
|
Line 1
|
/* $Id$ |
/* $Id$ |
$State$ |
$State$ |
$Log$ |
$Log$ |
|
Revision 1.225 2016/07/12 08:40:03 brouard |
|
Summary: saving but not running |
|
|
|
Revision 1.224 2016/07/01 13:16:01 brouard |
|
Summary: Fixes |
|
|
Revision 1.223 2016/02/19 09:23:35 brouard |
Revision 1.223 2016/02/19 09:23:35 brouard |
Summary: temporary |
Summary: temporary |
|
|
Line 745 Back prevalence and projections:
|
Line 751 Back prevalence and projections:
|
/* #define DEBUGLINMIN */ |
/* #define DEBUGLINMIN */ |
/* #define DEBUGHESS */ |
/* #define DEBUGHESS */ |
#define DEBUGHESSIJ |
#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 POWELL /* Instead of NLOPT */ |
#define POWELLF1F3 /* Skip test */ |
#define POWELLNOF3INFF1TEST /* Skip test */ |
/* #define POWELLORIGINAL /\* Don't use Directest to decide new direction but original Powell test *\/ */ |
/* #define POWELLORIGINAL /\* Don't use Directest to decide new direction but original Powell test *\/ */ |
/* #define MNBRAKORIGINAL /\* Don't use mnbrak fix *\/ */ |
/* #define MNBRAKORIGINAL /\* Don't use mnbrak fix *\/ */ |
|
|
Line 841 typedef struct {
|
Line 847 typedef struct {
|
/* $State$ */ |
/* $State$ */ |
#include "version.h" |
#include "version.h" |
char version[]=__IMACH_VERSION__; |
char version[]=__IMACH_VERSION__; |
char copyright[]="October 2015,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015"; |
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$ $Date$"; |
char fullversion[]="$Revision$ $Date$"; |
char strstart[80]; |
char strstart[80]; |
char optionfilext[10], optionfilefiname[FILENAMELENGTH]; |
char optionfilext[10], optionfilefiname[FILENAMELENGTH]; |
Line 850 int nagesqr=0, nforce=0; /* nagesqr=1 if
|
Line 856 int nagesqr=0, nforce=0; /* nagesqr=1 if
|
/* Number of covariates model=V2+V1+ V3*age+V2*V4 */ |
/* Number of covariates model=V2+V1+ V3*age+V2*V4 */ |
int cptcovn=0; /**< cptcovn number of covariates added in the model (excepting constant and age and age*product) */ |
int cptcovn=0; /**< cptcovn number of covariates added in the model (excepting constant and age and age*product) */ |
int cptcovt=0; /**< cptcovt number of covariates added in the model (excepting constant and age) */ |
int cptcovt=0; /**< cptcovt number of covariates added in the model (excepting constant and age) */ |
int cptcovs=0; /**< cptcovs number of simple covariates V2+V1 =2 */ |
int cptcovs=0; /**< cptcovs number of simple covariates in the model V2+V1 =2 */ |
|
int cptcovsnq=0; /**< cptcovsnq number of simple covariates in the model but non quantitative V2+V1 =2 */ |
int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */ |
int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */ |
int cptcovprodnoage=0; /**< Number of covariate products without age */ |
int cptcovprodnoage=0; /**< Number of covariate products without age */ |
int cptcoveff=0; /* Total number of covariates to vary for printing results */ |
int cptcoveff=0; /* Total number of covariates to vary for printing results */ |
|
int ncoveff=0; /* Total number of effective covariates in the model */ |
|
int nqfveff=0; /**< nqfveff Number of Quantitative Fixed Variables Effective */ |
|
int ntveff=0; /**< ntveff number of effective time varying variables */ |
|
int nqtveff=0; /**< ntqveff number of effective time varying quantitative variables */ |
int cptcov=0; /* Working variable */ |
int cptcov=0; /* Working variable */ |
int ncovcombmax=NCOVMAX; /* Maximum calculated number of covariate combination = pow(2, cptcoveff) */ |
int ncovcombmax=NCOVMAX; /* Maximum calculated number of covariate combination = pow(2, cptcoveff) */ |
int npar=NPARMAX; |
int npar=NPARMAX; |
Line 999 double *agedc;
|
Line 1010 double *agedc;
|
double **covar; /**< covar[j,i], value of jth covariate for individual i, |
double **covar; /**< covar[j,i], value of jth covariate for individual i, |
* covar=matrix(0,NCOVMAX,1,n); |
* covar=matrix(0,NCOVMAX,1,n); |
* cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*age; */ |
* cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*age; */ |
double ***cotvar; /* Time varying covariate */ |
double **coqvar; /* Fixed quantitative covariate iqv */ |
double ***cotqvar; /* Time varying quantitative covariate */ |
double ***cotvar; /* Time varying covariate itv */ |
double **coqvar; /* Fixed quantitative covariate */ |
double ***cotqvar; /* Time varying quantitative covariate itqv */ |
double idx; |
double idx; |
int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */ |
int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */ |
|
int *Typevar; /**< 1 for qualitative fixed, 2 for quantitative fixed, 3 for qualitive varying, 4 for quanti varying*/ |
int *Tage; |
int *Tage; |
int *Ndum; /** Freq of modality (tricode */ |
int *Ndum; /** Freq of modality (tricode */ |
/* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */ |
/* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */ |
Line 1549 double brent(double ax, double bx, doubl
|
Line 1561 double brent(double ax, double bx, doubl
|
etemp=e; |
etemp=e; |
e=d; |
e=d; |
if (fabs(p) >= fabs(0.5*q*etemp) || p <= q*(a-x) || p >= q*(b-x)) |
if (fabs(p) >= fabs(0.5*q*etemp) || p <= q*(a-x) || p >= q*(b-x)) |
d=CGOLD*(e=(x >= xm ? a-x : b-x)); |
d=CGOLD*(e=(x >= xm ? a-x : b-x)); |
else { |
else { |
d=p/q; |
d=p/q; |
u=x+d; |
u=x+d; |
if (u-a < tol2 || b-u < tol2) |
if (u-a < tol2 || b-u < tol2) |
d=SIGN(tol1,xm-x); |
d=SIGN(tol1,xm-x); |
} |
} |
} else { |
} else { |
d=CGOLD*(e=(x >= xm ? a-x : b-x)); |
d=CGOLD*(e=(x >= xm ? a-x : b-x)); |
Line 1568 double brent(double ax, double bx, doubl
|
Line 1580 double brent(double ax, double bx, doubl
|
} else { |
} else { |
if (u < x) a=u; else b=u; |
if (u < x) a=u; else b=u; |
if (fu <= fw || w == x) { |
if (fu <= fw || w == x) { |
v=w; |
v=w; |
w=u; |
w=u; |
fv=fw; |
fv=fw; |
fw=fu; |
fw=fu; |
} else if (fu <= fv || v == x || v == w) { |
} else if (fu <= fv || v == x || v == w) { |
v=u; |
v=u; |
fv=fu; |
fv=fu; |
} |
} |
} |
} |
} |
} |
Line 1615 values at the three points, fa, fb , and
|
Line 1627 values at the three points, fa, fb , and
|
*cx=(*bx)+GOLD*(*bx-*ax); |
*cx=(*bx)+GOLD*(*bx-*ax); |
*fc=(*func)(*cx); |
*fc=(*func)(*cx); |
#ifdef DEBUG |
#ifdef DEBUG |
printf("mnbrak0 *fb=%.12e *fc=%.12e\n",*fb,*fc); |
printf("mnbrak0 a=%lf *fa=%lf, b=%lf *fb=%lf, c=%lf *fc=%lf\n",*ax,*fa,*bx,*fb,*cx, *fc); |
fprintf(ficlog,"mnbrak0 *fb=%.12e *fc=%.12e\n",*fb,*fc); |
fprintf(ficlog,"mnbrak0 a=%lf *fa=%lf, b=%lf *fb=%lf, c=%lf *fc=%lf\n",*ax,*fa,*bx,*fb,*cx, *fc); |
#endif |
#endif |
while (*fb > *fc) { /* Declining a,b,c with fa> fb > fc */ |
while (*fb > *fc) { /* Declining a,b,c with fa> fb > fc. If fc=inf it exits and if flat fb=fc it exits too.*/ |
r=(*bx-*ax)*(*fb-*fc); |
r=(*bx-*ax)*(*fb-*fc); |
q=(*bx-*cx)*(*fb-*fa); |
q=(*bx-*cx)*(*fb-*fa); /* What if fa=inf */ |
u=(*bx)-((*bx-*cx)*q-(*bx-*ax)*r)/ |
u=(*bx)-((*bx-*cx)*q-(*bx-*ax)*r)/ |
(2.0*SIGN(FMAX(fabs(q-r),TINY),q-r)); /* Minimum abscissa of a parabolic estimated from (a,fa), (b,fb) and (c,fc). */ |
(2.0*SIGN(FMAX(fabs(q-r),TINY),q-r)); /* Minimum abscissa of a parabolic estimated from (a,fa), (b,fb) and (c,fc). */ |
ulim=(*bx)+GLIMIT*(*cx-*bx); /* Maximum abscissa where function should be evaluated */ |
ulim=(*bx)+GLIMIT*(*cx-*bx); /* Maximum abscissa where function should be evaluated */ |
Line 1631 values at the three points, fa, fb , and
|
Line 1643 values at the three points, fa, fb , and
|
double A, fparabu; |
double A, fparabu; |
A= (*fb - *fa)/(*bx-*ax)/(*bx+*ax-2*u); |
A= (*fb - *fa)/(*bx-*ax)/(*bx+*ax-2*u); |
fparabu= *fa - A*(*ax-u)*(*ax-u); |
fparabu= *fa - A*(*ax-u)*(*ax-u); |
printf("mnbrak (*ax=%.12f, *fa=%.12lf), (*bx=%.12f, *fb=%.12lf), (*cx=%.12f, *fc=%.12lf), (*u=%.12f, fu=%.12lf, fparabu=%.12f)\n",*ax,*fa,*bx,*fb,*cx,*fc,u,fu, fparabu); |
printf("\nmnbrak (*ax=%.12f, *fa=%.12lf), (*bx=%.12f, *fb=%.12lf), (*cx=%.12f, *fc=%.12lf), (*u=%.12f, fu=%.12lf, fparabu=%.12f, q=%lf < %lf=r)\n",*ax,*fa,*bx,*fb,*cx,*fc,u,fu, fparabu,q,r); |
fprintf(ficlog, "mnbrak (*ax=%.12f, *fa=%.12lf), (*bx=%.12f, *fb=%.12lf), (*cx=%.12f, *fc=%.12lf), (*u=%.12f, fu=%.12lf, fparabu=%.12f)\n",*ax,*fa,*bx,*fb,*cx,*fc,u,fu, fparabu); |
fprintf(ficlog,"\nmnbrak (*ax=%.12f, *fa=%.12lf), (*bx=%.12f, *fb=%.12lf), (*cx=%.12f, *fc=%.12lf), (*u=%.12f, fu=%.12lf, fparabu=%.12f, q=%lf < %lf=r)\n",*ax,*fa,*bx,*fb,*cx,*fc,u,fu, fparabu,q,r); |
/* And thus,it can be that fu > *fc even if fparabu < *fc */ |
/* And thus,it can be that fu > *fc even if fparabu < *fc */ |
/* mnbrak (*ax=7.666299858533, *fa=299039.693133272231), (*bx=8.595447774979, *fb=298976.598289369489), |
/* mnbrak (*ax=7.666299858533, *fa=299039.693133272231), (*bx=8.595447774979, *fb=298976.598289369489), |
(*cx=10.098840694817, *fc=298946.631474258087), (*u=9.852501168332, fu=298948.773013752128, fparabu=298945.434711494134) */ |
(*cx=10.098840694817, *fc=298946.631474258087), (*u=9.852501168332, fu=298948.773013752128, fparabu=298945.434711494134) */ |
Line 1665 values at the three points, fa, fb , and
|
Line 1677 values at the three points, fa, fb , and
|
/* fu = *fc; */ |
/* fu = *fc; */ |
/* *fc =dum; */ |
/* *fc =dum; */ |
/* } */ |
/* } */ |
#ifdef DEBUG |
#ifdef DEBUGMNBRAK |
printf("mnbrak34 fu < or >= fc \n"); |
double A, fparabu; |
fprintf(ficlog, "mnbrak34 fu < fc\n"); |
A= (*fb - *fa)/(*bx-*ax)/(*bx+*ax-2*u); |
|
fparabu= *fa - A*(*ax-u)*(*ax-u); |
|
printf("\nmnbrak35 ax=%lf fa=%lf bx=%lf fb=%lf, u=%lf fp=%lf fu=%lf < or >= fc=%lf cx=%lf, q=%lf < %lf=r \n",*ax, *fa, *bx,*fb,u,fparabu,fu,*fc,*cx,q,r); |
|
fprintf(ficlog,"\nmnbrak35 ax=%lf fa=%lf bx=%lf fb=%lf, u=%lf fp=%lf fu=%lf < or >= fc=%lf cx=%lf, q=%lf < %lf=r \n",*ax, *fa, *bx,*fb,u,fparabu,fu,*fc,*cx,q,r); |
#endif |
#endif |
dum=u; /* Shifting c and u */ |
dum=u; /* Shifting c and u */ |
u = *cx; |
u = *cx; |
Line 1678 values at the three points, fa, fb , and
|
Line 1693 values at the three points, fa, fb , and
|
#endif |
#endif |
} else if ((*cx-u)*(u-ulim) > 0.0) { /* u is after c but before ulim */ |
} else if ((*cx-u)*(u-ulim) > 0.0) { /* u is after c but before ulim */ |
#ifdef DEBUG |
#ifdef DEBUG |
printf("mnbrak2 u after c but before ulim\n"); |
printf("\nmnbrak2 u=%lf after c=%lf but before ulim\n",u,*cx); |
fprintf(ficlog, "mnbrak2 u after c but before ulim\n"); |
fprintf(ficlog,"\nmnbrak2 u=%lf after c=%lf but before ulim\n",u,*cx); |
#endif |
#endif |
fu=(*func)(u); |
fu=(*func)(u); |
if (fu < *fc) { |
if (fu < *fc) { |
#ifdef DEBUG |
#ifdef DEBUG |
printf("mnbrak2 u after c but before ulim AND fu < fc\n"); |
printf("\nmnbrak2 u=%lf after c=%lf but before ulim=%lf AND fu=%lf < %lf=fc\n",u,*cx,ulim,fu, *fc); |
fprintf(ficlog, "mnbrak2 u after c but before ulim AND fu <fc \n"); |
fprintf(ficlog,"\nmnbrak2 u=%lf after c=%lf but before ulim=%lf AND fu=%lf < %lf=fc\n",u,*cx,ulim,fu, *fc); |
|
#endif |
|
SHFT(*bx,*cx,u,*cx+GOLD*(*cx-*bx)) |
|
SHFT(*fb,*fc,fu,(*func)(u)) |
|
#ifdef DEBUG |
|
printf("\nmnbrak2 shift GOLD c=%lf",*cx+GOLD*(*cx-*bx)); |
#endif |
#endif |
SHFT(*bx,*cx,u,*cx+GOLD*(*cx-*bx)) |
|
SHFT(*fb,*fc,fu,(*func)(u)) |
|
} |
} |
} else if ((u-ulim)*(ulim-*cx) >= 0.0) { /* u outside ulim (verifying that ulim is beyond c) */ |
} else if ((u-ulim)*(ulim-*cx) >= 0.0) { /* u outside ulim (verifying that ulim is beyond c) */ |
#ifdef DEBUG |
#ifdef DEBUG |
printf("mnbrak2 u outside ulim (verifying that ulim is beyond c)\n"); |
printf("\nmnbrak2 u=%lf outside ulim=%lf (verifying that ulim is beyond c=%lf)\n",u,ulim,*cx); |
fprintf(ficlog, "mnbrak2 u outside ulim (verifying that ulim is beyond c)\n"); |
fprintf(ficlog,"\nmnbrak2 u=%lf outside ulim=%lf (verifying that ulim is beyond c=%lf)\n",u,ulim,*cx); |
#endif |
#endif |
u=ulim; |
u=ulim; |
fu=(*func)(u); |
fu=(*func)(u); |
} else { /* u could be left to b (if r > q parabola has a maximum) */ |
} else { /* u could be left to b (if r > q parabola has a maximum) */ |
#ifdef DEBUG |
#ifdef DEBUG |
printf("mnbrak2 u could be left to b (if r > q parabola has a maximum)\n"); |
printf("\nmnbrak2 u=%lf could be left to b=%lf (if r=%lf > q=%lf parabola has a maximum)\n",u,*bx,r,q); |
fprintf(ficlog, "mnbrak2 u could be left to b (if r > q parabola has a maximum)\n"); |
fprintf(ficlog,"\nmnbrak2 u=%lf could be left to b=%lf (if r=%lf > q=%lf parabola has a maximum)\n",u,*bx,r,q); |
#endif |
#endif |
u=(*cx)+GOLD*(*cx-*bx); |
u=(*cx)+GOLD*(*cx-*bx); |
fu=(*func)(u); |
fu=(*func)(u); |
|
#ifdef DEBUG |
|
printf("\nmnbrak2 new u=%lf fu=%lf shifted gold left from c=%lf and b=%lf \n",u,fu,*cx,*bx); |
|
fprintf(ficlog,"\nmnbrak2 new u=%lf fu=%lf shifted gold left from c=%lf and b=%lf \n",u,fu,*cx,*bx); |
|
#endif |
} /* end tests */ |
} /* end tests */ |
SHFT(*ax,*bx,*cx,u) |
SHFT(*ax,*bx,*cx,u) |
SHFT(*fa,*fb,*fc,fu) |
SHFT(*fa,*fb,*fc,fu) |
#ifdef DEBUG |
#ifdef DEBUG |
printf("mnbrak2 (*ax=%.12f, *fa=%.12lf), (*bx=%.12f, *fb=%.12lf), (*cx=%.12f, *fc=%.12lf), (*u=%.12f, fu=%.12lf)\n",*ax,*fa,*bx,*fb,*cx,*fc,u,fu); |
printf("\nmnbrak2 shift (*ax=%.12f, *fa=%.12lf), (*bx=%.12f, *fb=%.12lf), (*cx=%.12f, *fc=%.12lf)\n",*ax,*fa,*bx,*fb,*cx,*fc); |
fprintf(ficlog, "mnbrak2 (*ax=%.12f, *fa=%.12lf), (*bx=%.12f, *fb=%.12lf), (*cx=%.12f, *fc=%.12lf), (*u=%.12f, fu=%.12lf)\n",*ax,*fa,*bx,*fb,*cx,*fc,u,fu); |
fprintf(ficlog, "\nmnbrak2 shift (*ax=%.12f, *fa=%.12lf), (*bx=%.12f, *fb=%.12lf), (*cx=%.12f, *fc=%.12lf)\n",*ax,*fa,*bx,*fb,*cx,*fc); |
#endif |
#endif |
} /* end while; ie return (a, b, c, fa, fb, fc) such that a < b < c with f(a) > f(b) and fb < f(c) */ |
} /* end while; ie return (a, b, c, fa, fb, fc) such that a < b < c with f(a) > f(b) and fb < f(c) */ |
} |
} |
Line 1724 int ncom;
|
Line 1746 int ncom;
|
double *pcom,*xicom; |
double *pcom,*xicom; |
double (*nrfunc)(double []); |
double (*nrfunc)(double []); |
|
|
|
#ifdef LINMINORIGINAL |
void linmin(double p[], double xi[], int n, double *fret,double (*func)(double [])) |
void linmin(double p[], double xi[], int n, double *fret,double (*func)(double [])) |
|
#else |
|
void linmin(double p[], double xi[], int n, double *fret,double (*func)(double []), int *flat) |
|
#endif |
{ |
{ |
double brent(double ax, double bx, double cx, |
double brent(double ax, double bx, double cx, |
double (*f)(double), double tol, double *xmin); |
double (*f)(double), double tol, double *xmin); |
Line 1768 void linmin(double p[], double xi[], int
|
Line 1794 void linmin(double p[], double xi[], int
|
#ifdef LINMINORIGINAL |
#ifdef LINMINORIGINAL |
#else |
#else |
if (fx != fx){ |
if (fx != fx){ |
xxs=xxs/scale; /* Trying a smaller xx, closer to initial ax=0 */ |
xxs=xxs/scale; /* Trying a smaller xx, closer to initial ax=0 */ |
printf("|"); |
printf("|"); |
fprintf(ficlog,"|"); |
fprintf(ficlog,"|"); |
#ifdef DEBUGLINMIN |
#ifdef DEBUGLINMIN |
printf("\nLinmin NAN : input [axs=%lf:xxs=%lf], mnbrak outputs fx=%lf <(fb=%lf and fa=%lf) with xx=%lf in [ax=%lf:bx=%lf] \n", axs, xxs, fx,fb, fa, xx, ax, bx); |
printf("\nLinmin NAN : input [axs=%lf:xxs=%lf], mnbrak outputs fx=%lf <(fb=%lf and fa=%lf) with xx=%lf in [ax=%lf:bx=%lf] \n", axs, xxs, fx,fb, fa, xx, ax, bx); |
#endif |
#endif |
} |
} |
}while(fx != fx); |
}while(fx != fx && xxs > 1.e-5); |
#endif |
#endif |
|
|
#ifdef DEBUGLINMIN |
#ifdef DEBUGLINMIN |
printf("\nLinmin after mnbrak: ax=%12.7f xx=%12.7f bx=%12.7f fa=%12.2f fx=%12.2f fb=%12.2f\n", ax,xx,bx,fa,fx,fb); |
printf("\nLinmin after mnbrak: ax=%12.7f xx=%12.7f bx=%12.7f fa=%12.2f fx=%12.2f fb=%12.2f\n", ax,xx,bx,fa,fx,fb); |
fprintf(ficlog,"\nLinmin after mnbrak: ax=%12.7f xx=%12.7f bx=%12.7f fa=%12.2f fx=%12.2f fb=%12.2f\n", ax,xx,bx,fa,fx,fb); |
fprintf(ficlog,"\nLinmin after mnbrak: ax=%12.7f xx=%12.7f bx=%12.7f fa=%12.2f fx=%12.2f fb=%12.2f\n", ax,xx,bx,fa,fx,fb); |
#endif |
#endif |
|
#ifdef LINMINORIGINAL |
|
#else |
|
if(fb == fx){ /* Flat function in the direction */ |
|
xmin=xx; |
|
*flat=1; |
|
}else{ |
|
*flat=0; |
|
#endif |
|
/*Flat mnbrak2 shift (*ax=0.000000000000, *fa=51626.272983130431), (*bx=-1.618034000000, *fb=51590.149499362531), (*cx=-4.236068025156, *fc=51590.149499362531) */ |
*fret=brent(ax,xx,bx,f1dim,TOL,&xmin); /* Giving a bracketting triplet (ax, xx, bx), find a minimum, xmin, according to f1dim, *fret(xmin),*/ |
*fret=brent(ax,xx,bx,f1dim,TOL,&xmin); /* Giving a bracketting triplet (ax, xx, bx), find a minimum, xmin, according to f1dim, *fret(xmin),*/ |
/* fa = f(p[j] + ax * xi[j]), fx = f(p[j] + xx * xi[j]), fb = f(p[j] + bx * xi[j]) */ |
/* fa = f(p[j] + ax * xi[j]), fx = f(p[j] + xx * xi[j]), fb = f(p[j] + bx * xi[j]) */ |
/* fmin = f(p[j] + xmin * xi[j]) */ |
/* fmin = f(p[j] + xmin * xi[j]) */ |
/* P+lambda n in that direction (lambdamin), with TOL between abscisses */ |
/* P+lambda n in that direction (lambdamin), with TOL between abscisses */ |
/* f1dim(xmin): for (j=1;j<=ncom;j++) xt[j]=pcom[j]+xmin*xicom[j]; */ |
/* f1dim(xmin): for (j=1;j<=ncom;j++) xt[j]=pcom[j]+xmin*xicom[j]; */ |
#ifdef DEBUG |
#ifdef DEBUG |
printf("retour brent fret=%.12e xmin=%.12e\n",*fret,xmin); |
printf("retour brent from bracket (a=%lf fa=%lf, xx=%lf fx=%lf, b=%lf fb=%lf): fret=%lf xmin=%lf\n",ax,fa,xx,fx,bx,fb,*fret,xmin); |
fprintf(ficlog,"retour brent fret=%.12e xmin=%.12e\n",*fret,xmin); |
fprintf(ficlog,"retour brent from bracket (a=%lf fa=%lf, xx=%lf fx=%lf, b=%lf fb=%lf): fret=%lf xmin=%lf\n",ax,fa,xx,fx,bx,fb,*fret,xmin); |
|
#endif |
|
#ifdef LINMINORIGINAL |
|
#else |
|
} |
#endif |
#endif |
#ifdef DEBUGLINMIN |
#ifdef DEBUGLINMIN |
printf("linmin end "); |
printf("linmin end "); |
Line 1839 such that failure to decrease by more th
|
Line 1878 such that failure to decrease by more th
|
output, p is set to the best point found, xi is the then-current direction set, fret is the returned |
output, p is set to the best point found, xi is the then-current direction set, fret is the returned |
function value at p , and iter is the number of iterations taken. The routine linmin is used. |
function value at p , and iter is the number of iterations taken. The routine linmin is used. |
*/ |
*/ |
|
#ifdef LINMINORIGINAL |
|
#else |
|
int *flatdir; /* Function is vanishing in that direction */ |
|
int flat=0, flatd=0; /* Function is vanishing in that direction */ |
|
#endif |
void powell(double p[], double **xi, int n, double ftol, int *iter, double *fret, |
void powell(double p[], double **xi, int n, double ftol, int *iter, double *fret, |
double (*func)(double [])) |
double (*func)(double [])) |
{ |
{ |
void linmin(double p[], double xi[], int n, double *fret, |
#ifdef LINMINORIGINAL |
|
void linmin(double p[], double xi[], int n, double *fret, |
double (*func)(double [])); |
double (*func)(double [])); |
|
#else |
|
void linmin(double p[], double xi[], int n, double *fret, |
|
double (*func)(double []),int *flat); |
|
#endif |
int i,ibig,j; |
int i,ibig,j; |
double del,t,*pt,*ptt,*xit; |
double del,t,*pt,*ptt,*xit; |
double directest; |
double directest; |
double fp,fptt; |
double fp,fptt; |
double *xits; |
double *xits; |
int niterf, itmp; |
int niterf, itmp; |
|
#ifdef LINMINORIGINAL |
|
#else |
|
|
|
flatdir=ivector(1,n); |
|
for (j=1;j<=n;j++) flatdir[j]=0; |
|
#endif |
|
|
pt=vector(1,n); |
pt=vector(1,n); |
ptt=vector(1,n); |
ptt=vector(1,n); |
Line 1883 void powell(double p[], double **xi, int
|
Line 1938 void powell(double p[], double **xi, int
|
rforecast_time=rcurr_time; |
rforecast_time=rcurr_time; |
itmp = strlen(strcurr); |
itmp = strlen(strcurr); |
if(strcurr[itmp-1]=='\n') /* Windows outputs with a new line */ |
if(strcurr[itmp-1]=='\n') /* Windows outputs with a new line */ |
strcurr[itmp-1]='\0'; |
strcurr[itmp-1]='\0'; |
printf("\nConsidering the time needed for the last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); |
printf("\nConsidering the time needed for the last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); |
fprintf(ficlog,"\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); |
fprintf(ficlog,"\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); |
for(niterf=10;niterf<=30;niterf+=10){ |
for(niterf=10;niterf<=30;niterf+=10){ |
rforecast_time=rcurr_time+(niterf-*iter)*(rcurr_time-rlast_time); |
rforecast_time=rcurr_time+(niterf-*iter)*(rcurr_time-rlast_time); |
forecast_time = *localtime(&rforecast_time); |
forecast_time = *localtime(&rforecast_time); |
strcpy(strfor,asctime(&forecast_time)); |
strcpy(strfor,asctime(&forecast_time)); |
itmp = strlen(strfor); |
itmp = strlen(strfor); |
if(strfor[itmp-1]=='\n') |
if(strfor[itmp-1]=='\n') |
strfor[itmp-1]='\0'; |
strfor[itmp-1]='\0'; |
printf(" - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); |
printf(" - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); |
fprintf(ficlog," - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); |
fprintf(ficlog," - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); |
} |
} |
} |
} |
for (i=1;i<=n;i++) { /* For each direction i */ |
for (i=1;i<=n;i++) { /* For each direction i */ |
Line 1906 void powell(double p[], double **xi, int
|
Line 1961 void powell(double p[], double **xi, int
|
#endif |
#endif |
printf("%d",i);fflush(stdout); /* print direction (parameter) i */ |
printf("%d",i);fflush(stdout); /* print direction (parameter) i */ |
fprintf(ficlog,"%d",i);fflush(ficlog); |
fprintf(ficlog,"%d",i);fflush(ficlog); |
|
#ifdef LINMINORIGINAL |
linmin(p,xit,n,fret,func); /* Point p[n]. xit[n] has been loaded for direction i as input.*/ |
linmin(p,xit,n,fret,func); /* Point p[n]. xit[n] has been loaded for direction i as input.*/ |
/* Outputs are fret(new point p) p is updated and xit rescaled */ |
#else |
|
linmin(p,xit,n,fret,func,&flat); /* Point p[n]. xit[n] has been loaded for direction i as input.*/ |
|
flatdir[i]=flat; /* Function is vanishing in that direction i */ |
|
#endif |
|
/* Outputs are fret(new point p) p is updated and xit rescaled */ |
if (fabs(fptt-(*fret)) > del) { /* We are keeping the max gain on each of the n directions */ |
if (fabs(fptt-(*fret)) > del) { /* We are keeping the max gain on each of the n directions */ |
/* because that direction will be replaced unless the gain del is small */ |
/* because that direction will be replaced unless the gain del is small */ |
/* in comparison with the 'probable' gain, mu^2, with the last average direction. */ |
/* in comparison with the 'probable' gain, mu^2, with the last average direction. */ |
/* Unless the n directions are conjugate some gain in the determinant may be obtained */ |
/* Unless the n directions are conjugate some gain in the determinant may be obtained */ |
/* with the new direction. */ |
/* with the new direction. */ |
del=fabs(fptt-(*fret)); |
del=fabs(fptt-(*fret)); |
ibig=i; |
ibig=i; |
} |
} |
#ifdef DEBUG |
#ifdef DEBUG |
printf("%d %.12e",i,(*fret)); |
printf("%d %.12e",i,(*fret)); |
fprintf(ficlog,"%d %.12e",i,(*fret)); |
fprintf(ficlog,"%d %.12e",i,(*fret)); |
for (j=1;j<=n;j++) { |
for (j=1;j<=n;j++) { |
xits[j]=FMAX(fabs(p[j]-pt[j]),1.e-5); |
xits[j]=FMAX(fabs(p[j]-pt[j]),1.e-5); |
printf(" x(%d)=%.12e",j,xit[j]); |
printf(" x(%d)=%.12e",j,xit[j]); |
fprintf(ficlog," x(%d)=%.12e",j,xit[j]); |
fprintf(ficlog," x(%d)=%.12e",j,xit[j]); |
} |
} |
for(j=1;j<=n;j++) { |
for(j=1;j<=n;j++) { |
printf(" p(%d)=%.12e",j,p[j]); |
printf(" p(%d)=%.12e",j,p[j]); |
fprintf(ficlog," p(%d)=%.12e",j,p[j]); |
fprintf(ficlog," p(%d)=%.12e",j,p[j]); |
} |
} |
printf("\n"); |
printf("\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficlog,"\n"); |
Line 1935 void powell(double p[], double **xi, int
|
Line 1995 void powell(double p[], double **xi, int
|
/* Convergence test will use last linmin estimation (fret) and compare former iteration (fp) */ |
/* Convergence test will use last linmin estimation (fret) and compare former iteration (fp) */ |
/* But p and xit have been updated at the end of linmin, *fret corresponds to new p, xit */ |
/* But p and xit have been updated at the end of linmin, *fret corresponds to new p, xit */ |
/* New value of last point Pn is not computed, P(n-1) */ |
/* New value of last point Pn is not computed, P(n-1) */ |
|
for(j=1;j<=n;j++) { |
|
if(flatdir[j] >0){ |
|
printf(" p(%d)=%lf flat=%d ",j,p[j],flatdir[j]); |
|
fprintf(ficlog," p(%d)=%lf flat=%d ",j,p[j],flatdir[j]); |
|
} |
|
/* printf("\n"); */ |
|
/* fprintf(ficlog,"\n"); */ |
|
} |
if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { /* Did we reach enough precision? */ |
if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { /* Did we reach enough precision? */ |
/* We could compare with a chi^2. chisquare(0.95,ddl=1)=3.84 */ |
/* We could compare with a chi^2. chisquare(0.95,ddl=1)=3.84 */ |
/* By adding age*age in a model, the new -2LL should be lower and the difference follows a */ |
/* By adding age*age in a model, the new -2LL should be lower and the difference follows a */ |
Line 1943 void powell(double p[], double **xi, int
|
Line 2011 void powell(double p[], double **xi, int
|
/* By adding age*age and V1*age the gain (-2LL) should be more than 5.99 (ddl=2) */ |
/* By adding age*age and V1*age the gain (-2LL) should be more than 5.99 (ddl=2) */ |
/* By using V1+V2+V3, the gain should be 7.82, compared with basic 1+age. */ |
/* By using V1+V2+V3, the gain should be 7.82, compared with basic 1+age. */ |
/* By adding 10 parameters more the gain should be 18.31 */ |
/* By adding 10 parameters more the gain should be 18.31 */ |
|
|
/* Starting the program with initial values given by a former maximization will simply change */ |
/* Starting the program with initial values given by a former maximization will simply change */ |
/* the scales of the directions and the directions, because the are reset to canonical directions */ |
/* the scales of the directions and the directions, because the are reset to canonical directions */ |
/* Thus the first calls to linmin will give new points and better maximizations until fp-(*fret) is */ |
/* Thus the first calls to linmin will give new points and better maximizations until fp-(*fret) is */ |
Line 1971 void powell(double p[], double **xi, int
|
Line 2039 void powell(double p[], double **xi, int
|
} |
} |
#endif |
#endif |
|
|
|
#ifdef LINMINORIGINAL |
|
#else |
|
free_ivector(flatdir,1,n); |
|
#endif |
free_vector(xit,1,n); |
free_vector(xit,1,n); |
free_vector(xits,1,n); |
free_vector(xits,1,n); |
free_vector(ptt,1,n); |
free_vector(ptt,1,n); |
Line 1985 void powell(double p[], double **xi, int
|
Line 2056 void powell(double p[], double **xi, int
|
pt[j]=p[j]; |
pt[j]=p[j]; |
} |
} |
fptt=(*func)(ptt); /* f_3 */ |
fptt=(*func)(ptt); /* f_3 */ |
#ifdef POWELLF1F3 |
#ifdef NODIRECTIONCHANGEDUNTILNITER /* No change in drections until some iterations are done */ |
|
if (*iter <=4) { |
|
#else |
|
#endif |
|
#ifdef POWELLNOF3INFF1TEST /* skips test F3 <F1 */ |
#else |
#else |
if (fptt < fp) { /* If extrapolated point is better, decide if we keep that new direction or not */ |
if (fptt < fp) { /* If extrapolated point is better, decide if we keep that new direction or not */ |
#endif |
#endif |
Line 1994 void powell(double p[], double **xi, int
|
Line 2069 void powell(double p[], double **xi, int
|
/* Let f"(x2) be the 2nd derivative equal everywhere. */ |
/* Let f"(x2) be the 2nd derivative equal everywhere. */ |
/* Then the parabolic through (x1,f1), (x2,f2) and (x3,f3) */ |
/* Then the parabolic through (x1,f1), (x2,f2) and (x3,f3) */ |
/* will reach at f3 = fm + h^2/2 f"m ; f" = (f1 -2f2 +f3 ) / h**2 */ |
/* will reach at f3 = fm + h^2/2 f"m ; f" = (f1 -2f2 +f3 ) / h**2 */ |
/* Conditional for using this new direction is that mu^2 = (f1-2f2+f3)^2 /2 < del */ |
/* Conditional for using this new direction is that mu^2 = (f1-2f2+f3)^2 /2 < del or directest <0 */ |
|
/* also lamda^2=(f1-f2)^2/mu² is a parasite solution of powell */ |
|
/* For powell, inclusion of this average direction is only if t(del)<0 or del inbetween mu^2 and lambda^2 */ |
/* t=2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del)-del*SQR(fp-fptt); */ |
/* t=2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del)-del*SQR(fp-fptt); */ |
|
/* Even if f3 <f1, directest can be negative and t >0 */ |
|
/* mu² and del² are equal when f3=f1 */ |
|
/* f3 < f1 : mu² < del <= lambda^2 both test are equivalent */ |
|
/* f3 < f1 : mu² < lambda^2 < del then directtest is negative and powell t is positive */ |
|
/* f3 > f1 : lambda² < mu^2 < del then t is negative and directest >0 */ |
|
/* f3 > f1 : lambda² < del < mu^2 then t is positive and directest >0 */ |
#ifdef NRCORIGINAL |
#ifdef NRCORIGINAL |
t=2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del)- del*SQR(fp-fptt); /* Original Numerical Recipes in C*/ |
t=2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del)- del*SQR(fp-fptt); /* Original Numerical Recipes in C*/ |
#else |
#else |
Line 2017 void powell(double p[], double **xi, int
|
Line 2100 void powell(double p[], double **xi, int
|
if (t < 0.0) { /* Then we use it for new direction */ |
if (t < 0.0) { /* Then we use it for new direction */ |
#else |
#else |
if (directest*t < 0.0) { /* Contradiction between both tests */ |
if (directest*t < 0.0) { /* Contradiction between both tests */ |
printf("directest= %.12lf (if <0 we include P0 Pn as new direction), t= %.12lf, f1= %.12lf,f2= %.12lf,f3= %.12lf, del= %.12lf\n",directest, t, fp,(*fret),fptt,del); |
printf("directest= %.12lf (if <0 we include P0 Pn as new direction), t= %.12lf, f1= %.12lf,f2= %.12lf,f3= %.12lf, del= %.12lf\n",directest, t, fp,(*fret),fptt,del); |
printf("f1-2f2+f3= %.12lf, f1-f2-del= %.12lf, f1-f3= %.12lf\n",fp-2.0*(*fret)+fptt, fp -(*fret) -del, fp-fptt); |
printf("f1-2f2+f3= %.12lf, f1-f2-del= %.12lf, f1-f3= %.12lf\n",fp-2.0*(*fret)+fptt, fp -(*fret) -del, fp-fptt); |
fprintf(ficlog,"directest= %.12lf (if <0 we include P0 Pn as new direction), t= %.12lf, f1= %.12lf,f2= %.12lf,f3= %.12lf, del= %.12lf\n",directest, t, fp,(*fret),fptt, del); |
fprintf(ficlog,"directest= %.12lf (if directest<0 or t<0 we include P0 Pn as new direction), t= %.12lf, f1= %.12lf,f2= %.12lf,f3= %.12lf, del= %.12lf\n",directest, t, fp,(*fret),fptt, del); |
fprintf(ficlog,"f1-2f2+f3= %.12lf, f1-f2-del= %.12lf, f1-f3= %.12lf\n",fp-2.0*(*fret)+fptt, fp -(*fret) -del, fp-fptt); |
fprintf(ficlog,"f1-2f2+f3= %.12lf, f1-f2-del= %.12lf, f1-f3= %.12lf\n",fp-2.0*(*fret)+fptt, fp -(*fret) -del, fp-fptt); |
} |
} |
if (directest < 0.0) { /* Then we use it for new direction */ |
if (directest < 0.0) { /* Then we use it for new direction */ |
#endif |
#endif |
#ifdef DEBUGLINMIN |
#ifdef DEBUGLINMIN |
printf("Before linmin in direction P%d-P0\n",n); |
printf("Before linmin in direction P%d-P0\n",n); |
for (j=1;j<=n;j++) { |
for (j=1;j<=n;j++) { |
printf(" Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); |
printf(" Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); |
fprintf(ficlog," Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); |
fprintf(ficlog," Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); |
if(j % ncovmodel == 0){ |
if(j % ncovmodel == 0){ |
printf("\n"); |
printf("\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficlog,"\n"); |
} |
} |
} |
} |
#endif |
#endif |
linmin(p,xit,n,fret,func); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/ |
#ifdef LINMINORIGINAL |
#ifdef DEBUGLINMIN |
linmin(p,xit,n,fret,func); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/ |
for (j=1;j<=n;j++) { |
#else |
printf("After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); |
linmin(p,xit,n,fret,func,&flat); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/ |
fprintf(ficlog,"After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); |
flatdir[i]=flat; /* Function is vanishing in that direction i */ |
if(j % ncovmodel == 0){ |
|
printf("\n"); |
|
fprintf(ficlog,"\n"); |
|
} |
|
} |
|
#endif |
#endif |
for (j=1;j<=n;j++) { |
|
xi[j][ibig]=xi[j][n]; /* Replace direction with biggest decrease by last direction n */ |
|
xi[j][n]=xit[j]; /* and this nth direction by the by the average p_0 p_n */ |
|
} |
|
printf("Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig); |
|
fprintf(ficlog,"Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig); |
|
|
|
|
#ifdef DEBUGLINMIN |
|
for (j=1;j<=n;j++) { |
|
printf("After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); |
|
fprintf(ficlog,"After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]); |
|
if(j % ncovmodel == 0){ |
|
printf("\n"); |
|
fprintf(ficlog,"\n"); |
|
} |
|
} |
|
#endif |
|
for (j=1;j<=n;j++) { |
|
xi[j][ibig]=xi[j][n]; /* Replace direction with biggest decrease by last direction n */ |
|
xi[j][n]=xit[j]; /* and this nth direction by the by the average p_0 p_n */ |
|
} |
|
#ifdef LINMINORIGINAL |
|
#else |
|
for (j=1, flatd=0;j<=n;j++) { |
|
if(flatdir[j]>0) |
|
flatd++; |
|
} |
|
if(flatd >0){ |
|
printf("%d flat directions\n",flatd); |
|
fprintf(ficlog,"%d flat directions\n",flatd); |
|
for (j=1;j<=n;j++) { |
|
if(flatdir[j]>0){ |
|
printf("%d ",j); |
|
fprintf(ficlog,"%d ",j); |
|
} |
|
} |
|
printf("\n"); |
|
fprintf(ficlog,"\n"); |
|
} |
|
#endif |
|
printf("Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig); |
|
fprintf(ficlog,"Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig); |
|
|
#ifdef DEBUG |
#ifdef DEBUG |
printf("Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); |
printf("Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); |
fprintf(ficlog,"Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); |
fprintf(ficlog,"Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); |
for(j=1;j<=n;j++){ |
for(j=1;j<=n;j++){ |
printf(" %.12e",xit[j]); |
printf(" %lf",xit[j]); |
fprintf(ficlog," %.12e",xit[j]); |
fprintf(ficlog," %lf",xit[j]); |
} |
} |
printf("\n"); |
printf("\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficlog,"\n"); |
#endif |
#endif |
} /* end of t or directest negative */ |
} /* end of t or directest negative */ |
#ifdef POWELLF1F3 |
#ifdef POWELLNOF3INFF1TEST |
#else |
#else |
} /* end if (fptt < fp) */ |
} /* end if (fptt < fp) */ |
#endif |
#endif |
|
#ifdef NODIRECTIONCHANGEDUNTILNITER /* No change in drections until some iterations are done */ |
|
} /*NODIRECTIONCHANGEDUNTILNITER No change in drections until some iterations are done */ |
|
#else |
|
#endif |
} /* loop iteration */ |
} /* loop iteration */ |
} |
} |
|
|
Line 2778 double ***hbxij(double ***po, int nhstep
|
Line 2890 double ***hbxij(double ***po, int nhstep
|
/*************** log-likelihood *************/ |
/*************** log-likelihood *************/ |
double func( double *x) |
double func( double *x) |
{ |
{ |
int i, ii, j, k, mi, d, kk; |
int i, ii, j, k, mi, d, kk; |
int ioffset; |
int ioffset=0; |
double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; |
double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; |
double **out; |
double **out; |
double sw; /* Sum of weights */ |
double sw; /* Sum of weights */ |
double lli; /* Individual log likelihood */ |
double lli; /* Individual log likelihood */ |
int s1, s2; |
int s1, s2; |
int iv=0, iqv=0, itv=0, iqtv=0 ; /* Index of varying covariate, fixed quantitative cov, time varying covariate */ |
int iv=0, iqv=0, itv=0, iqtv=0 ; /* Index of varying covariate, fixed quantitative cov, time varying covariate, quatitative time varying covariate */ |
double bbh, survp; |
double bbh, survp; |
long ipmx; |
long ipmx; |
double agexact; |
double agexact; |
/*extern weight */ |
/*extern weight */ |
/* We are differentiating ll according to initial status */ |
/* We are differentiating ll according to initial status */ |
/* for (i=1;i<=npar;i++) printf("%f ", x[i]);*/ |
/* for (i=1;i<=npar;i++) printf("%f ", x[i]);*/ |
/*for(i=1;i<imx;i++) |
/*for(i=1;i<imx;i++) |
printf(" %d\n",s[4][i]); |
printf(" %d\n",s[4][i]); |
*/ |
*/ |
|
|
++countcallfunc; |
++countcallfunc; |
|
|
cov[1]=1.; |
cov[1]=1.; |
|
|
for(k=1; k<=nlstate; k++) ll[k]=0.; |
for(k=1; k<=nlstate; k++) ll[k]=0.; |
|
ioffset=0; |
|
if(mle==1){ |
|
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
|
/* Computes the values of the ncovmodel covariates of the model |
|
depending if the covariates are fixed or varying (age dependent) and stores them in cov[] |
|
Then computes with function pmij which return a matrix p[i][j] giving the elementary probability |
|
to be observed in j being in i according to the model. |
|
*/ |
|
ioffset=2+nagesqr+cptcovage; |
|
/* for (k=1; k<=cptcovn;k++){ /\* Simple and product covariates without age* products *\/ */ |
|
for (k=1; k<=ncoveff;k++){ /* Simple and product covariates without age* products */ |
|
cov[++ioffset]=covar[Tvar[k]][i]; |
|
} |
|
for(iqv=1; iqv <= nqfveff; iqv++){ /* Quantitatives and Fixed covariates */ |
|
cov[++ioffset]=coqvar[iqv][i]; |
|
} |
|
|
if(mle==1){ |
/* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2] |
/* Computes the values of the ncovmodel covariates of the model |
has been calculated etc */ |
depending if the covariates are fixed or varying (age dependent) and stores them in cov[] |
/* For an individual i, wav[i] gives the number of effective waves */ |
Then computes with function pmij which return a matrix p[i][j] giving the elementary probability |
/* We compute the contribution to Likelihood of each effective transition |
to be observed in j being in i according to the model. |
mw[mi][i] is real wave of the mi th effectve wave */ |
*/ |
/* Then statuses are computed at each begin and end of an effective wave s1=s[ mw[mi][i] ][i]; |
ioffset=2+nagesqr; |
s2=s[mw[mi+1][i]][i]; |
for (k=1; k<=cptcovn;k++){ /* Simple and product covariates without age* products */ |
And the iv th varying covariate is the cotvar[mw[mi+1][i]][iv][i] |
cov[++ioffset]=covar[Tvar[k]][i]; |
But if the variable is not in the model TTvar[iv] is the real variable effective in the model: |
} |
meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i] |
for(iqv=1; iqv <= nqv; iqv++){ /* Varying quantitatives covariates */ |
*/ |
/* cov[2+nagesqr+cptcovn+iqv]=varq[mw[mi+1][i]][iqv][i]; */ |
for(mi=1; mi<= wav[i]-1; mi++){ |
} |
for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */ |
|
cov[ioffset+itv]=cotvar[mw[mi][i]][itv][i]; |
/* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] |
} |
is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2] |
for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */ |
has been calculated etc */ |
if(cotqvar[mw[mi][i]][iqtv][i] == -1){ |
/* For an individual i, wav[i] gives the number of effective waves */ |
printf("i=%d, mi=%d, iqtv=%d, cotqvar[mw[mi][i]][iqtv][i]=%f",i,mi,iqtv,cotqvar[mw[mi][i]][iqtv][i]); |
/* We compute the contribution to Likelihood of each effective transition |
} |
mw[mi][i] is real wave of the mi th effectve wave */ |
cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i]; |
/* Then statuses are computed at each begin and end of an effective wave s1=s[ mw[mi][i] ][i]; |
} |
s2=s[mw[mi+1][i]][i]; |
/* ioffset=2+nagesqr+cptcovn+nqv+ntv+nqtv; */ |
And the iv th varying covariate is the cotvar[mw[mi+1][i]][iv][i] |
for (ii=1;ii<=nlstate+ndeath;ii++) |
But if the variable is not in the model TTvar[iv] is the real variable effective in the model: |
for (j=1;j<=nlstate+ndeath;j++){ |
meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i] |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
*/ |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
for(mi=1; mi<= wav[i]-1; mi++){ |
} |
for(itv=1; itv <= ntv; itv++){ /* Varying dummy covariates */ |
for(d=0; d<dh[mi][i]; d++){ |
cov[++ioffset]=cotvar[mw[mi+1][i]][itv][i]; |
newm=savm; |
} |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
for(iqtv=1; iqtv <= nqtv; iqtv++){ /* Varying quantitatives covariates */ |
cov[2]=agexact; |
/* cov[2+nagesqr+cptcovn+nqv+ntv+iqtv]=varq[mw[mi+1][i]][iqtv][i]; */ |
if(nagesqr==1) |
} |
cov[3]= agexact*agexact; /* Should be changed here */ |
ioffset=2+nagesqr+cptcovn+nqv+ntv+nqtv; |
for (kk=1; kk<=cptcovage;kk++) { |
for (ii=1;ii<=nlstate+ndeath;ii++) |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */ |
for (j=1;j<=nlstate+ndeath;j++){ |
} |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
} |
savm=oldm; |
for(d=0; d<dh[mi][i]; d++){ |
oldm=newm; |
newm=savm; |
} /* end mult */ |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
|
cov[2]=agexact; |
/*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */ |
if(nagesqr==1) |
/* But now since version 0.9 we anticipate for bias at large stepm. |
cov[3]= agexact*agexact; /* Should be changed here */ |
* If stepm is larger than one month (smallest stepm) and if the exact delay |
for (kk=1; kk<=cptcovage;kk++) { |
* (in months) between two waves is not a multiple of stepm, we rounded to |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */ |
* the nearest (and in case of equal distance, to the lowest) interval but now |
} |
* we keep into memory the bias bh[mi][i] and also the previous matrix product |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
* (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
* probability in order to take into account the bias as a fraction of the way |
savm=oldm; |
* from savm to out if bh is negative or even beyond if bh is positive. bh varies |
oldm=newm; |
* -stepm/2 to stepm/2 . |
} /* end mult */ |
* For stepm=1 the results are the same as for previous versions of Imach. |
|
* For stepm > 1 the results are less biased than in previous versions. |
/*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */ |
*/ |
/* But now since version 0.9 we anticipate for bias at large stepm. |
s1=s[mw[mi][i]][i]; |
* If stepm is larger than one month (smallest stepm) and if the exact delay |
s2=s[mw[mi+1][i]][i]; |
* (in months) between two waves is not a multiple of stepm, we rounded to |
bbh=(double)bh[mi][i]/(double)stepm; |
* the nearest (and in case of equal distance, to the lowest) interval but now |
/* bias bh is positive if real duration |
* we keep into memory the bias bh[mi][i] and also the previous matrix product |
* is higher than the multiple of stepm and negative otherwise. |
* (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the |
*/ |
* probability in order to take into account the bias as a fraction of the way |
/* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/ |
* from savm to out if bh is negative or even beyond if bh is positive. bh varies |
if( s2 > nlstate){ |
* -stepm/2 to stepm/2 . |
/* i.e. if s2 is a death state and if the date of death is known |
* For stepm=1 the results are the same as for previous versions of Imach. |
then the contribution to the likelihood is the probability to |
* For stepm > 1 the results are less biased than in previous versions. |
die between last step unit time and current step unit time, |
*/ |
which is also equal to probability to die before dh |
s1=s[mw[mi][i]][i]; |
minus probability to die before dh-stepm . |
s2=s[mw[mi+1][i]][i]; |
In version up to 0.92 likelihood was computed |
bbh=(double)bh[mi][i]/(double)stepm; |
as if date of death was unknown. Death was treated as any other |
/* bias bh is positive if real duration |
health state: the date of the interview describes the actual state |
* is higher than the multiple of stepm and negative otherwise. |
and not the date of a change in health state. The former idea was |
*/ |
to consider that at each interview the state was recorded |
/* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/ |
(healthy, disable or death) and IMaCh was corrected; but when we |
if( s2 > nlstate){ |
introduced the exact date of death then we should have modified |
/* i.e. if s2 is a death state and if the date of death is known |
the contribution of an exact death to the likelihood. This new |
then the contribution to the likelihood is the probability to |
contribution is smaller and very dependent of the step unit |
die between last step unit time and current step unit time, |
stepm. It is no more the probability to die between last interview |
which is also equal to probability to die before dh |
and month of death but the probability to survive from last |
minus probability to die before dh-stepm . |
interview up to one month before death multiplied by the |
In version up to 0.92 likelihood was computed |
probability to die within a month. Thanks to Chris |
as if date of death was unknown. Death was treated as any other |
Jackson for correcting this bug. Former versions increased |
health state: the date of the interview describes the actual state |
mortality artificially. The bad side is that we add another loop |
and not the date of a change in health state. The former idea was |
which slows down the processing. The difference can be up to 10% |
to consider that at each interview the state was recorded |
lower mortality. |
(healthy, disable or death) and IMaCh was corrected; but when we |
*/ |
introduced the exact date of death then we should have modified |
/* If, at the beginning of the maximization mostly, the |
the contribution of an exact death to the likelihood. This new |
cumulative probability or probability to be dead is |
contribution is smaller and very dependent of the step unit |
constant (ie = 1) over time d, the difference is equal to |
stepm. It is no more the probability to die between last interview |
0. out[s1][3] = savm[s1][3]: probability, being at state |
and month of death but the probability to survive from last |
s1 at precedent wave, to be dead a month before current |
interview up to one month before death multiplied by the |
wave is equal to probability, being at state s1 at |
probability to die within a month. Thanks to Chris |
precedent wave, to be dead at mont of the current |
Jackson for correcting this bug. Former versions increased |
wave. Then the observed probability (that this person died) |
mortality artificially. The bad side is that we add another loop |
is null according to current estimated parameter. In fact, |
which slows down the processing. The difference can be up to 10% |
it should be very low but not zero otherwise the log go to |
lower mortality. |
infinity. |
*/ |
*/ |
/* If, at the beginning of the maximization mostly, the |
|
cumulative probability or probability to be dead is |
|
constant (ie = 1) over time d, the difference is equal to |
|
0. out[s1][3] = savm[s1][3]: probability, being at state |
|
s1 at precedent wave, to be dead a month before current |
|
wave is equal to probability, being at state s1 at |
|
precedent wave, to be dead at mont of the current |
|
wave. Then the observed probability (that this person died) |
|
is null according to current estimated parameter. In fact, |
|
it should be very low but not zero otherwise the log go to |
|
infinity. |
|
*/ |
|
/* #ifdef INFINITYORIGINAL */ |
/* #ifdef INFINITYORIGINAL */ |
/* lli=log(out[s1][s2] - savm[s1][s2]); */ |
/* lli=log(out[s1][s2] - savm[s1][s2]); */ |
/* #else */ |
/* #else */ |
Line 2921 double func( double *x)
|
Line 3037 double func( double *x)
|
/* else */ |
/* else */ |
/* lli=log(out[s1][s2] - savm[s1][s2]); */ |
/* lli=log(out[s1][s2] - savm[s1][s2]); */ |
/* #endif */ |
/* #endif */ |
lli=log(out[s1][s2] - savm[s1][s2]); |
lli=log(out[s1][s2] - savm[s1][s2]); |
|
|
} else if ( s2==-1 ) { /* alive */ |
} else if ( s2==-1 ) { /* alive */ |
for (j=1,survp=0. ; j<=nlstate; j++) |
for (j=1,survp=0. ; j<=nlstate; j++) |
survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; |
survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; |
/*survp += out[s1][j]; */ |
/*survp += out[s1][j]; */ |
lli= log(survp); |
lli= log(survp); |
} |
} |
else if (s2==-4) { |
else if (s2==-4) { |
for (j=3,survp=0. ; j<=nlstate; j++) |
for (j=3,survp=0. ; j<=nlstate; j++) |
survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; |
survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; |
lli= log(survp); |
lli= log(survp); |
} |
} |
else if (s2==-5) { |
else if (s2==-5) { |
for (j=1,survp=0. ; j<=2; j++) |
for (j=1,survp=0. ; j<=2; j++) |
survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; |
survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j]; |
lli= log(survp); |
lli= log(survp); |
} |
} |
else{ |
else{ |
lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ |
lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */ |
/* lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2]));*/ /* linear interpolation */ |
/* lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2]));*/ /* linear interpolation */ |
} |
} |
/*lli=(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]);*/ |
/*lli=(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]);*/ |
/*if(lli ==000.0)*/ |
/*if(lli ==000.0)*/ |
/*printf("bbh= %f lli=%f savm=%f out=%f %d\n",bbh,lli,savm[s1][s2], out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]],i); */ |
/*printf("bbh= %f lli=%f savm=%f out=%f %d\n",bbh,lli,savm[s1][s2], out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]],i); */ |
ipmx +=1; |
ipmx +=1; |
sw += weight[i]; |
sw += weight[i]; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
/* if (lli < log(mytinydouble)){ */ |
/* if (lli < log(mytinydouble)){ */ |
/* printf("Close to inf lli = %.10lf < %.10lf i= %d mi= %d, s[%d][i]=%d s1=%d s2=%d\n", lli,log(mytinydouble), i, mi,mw[mi][i], s[mw[mi][i]][i], s1,s2); */ |
/* printf("Close to inf lli = %.10lf < %.10lf i= %d mi= %d, s[%d][i]=%d s1=%d s2=%d\n", lli,log(mytinydouble), i, mi,mw[mi][i], s[mw[mi][i]][i], s1,s2); */ |
/* fprintf(ficlog,"Close to inf lli = %.10lf i= %d mi= %d, s[mw[mi][i]][i]=%d\n", lli, i, mi,s[mw[mi][i]][i]); */ |
/* fprintf(ficlog,"Close to inf lli = %.10lf i= %d mi= %d, s[mw[mi][i]][i]=%d\n", lli, i, mi,s[mw[mi][i]][i]); */ |
/* } */ |
/* } */ |
} /* end of wave */ |
} /* end of wave */ |
} /* end of individual */ |
} /* end of individual */ |
} else if(mle==2){ |
} else if(mle==2){ |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; |
for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; |
for(mi=1; mi<= wav[i]-1; mi++){ |
for(mi=1; mi<= wav[i]-1; mi++){ |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (j=1;j<=nlstate+ndeath;j++){ |
for (j=1;j<=nlstate+ndeath;j++){ |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
} |
} |
for(d=0; d<=dh[mi][i]; d++){ |
for(d=0; d<=dh[mi][i]; d++){ |
newm=savm; |
newm=savm; |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
cov[2]=agexact; |
cov[2]=agexact; |
if(nagesqr==1) |
if(nagesqr==1) |
cov[3]= agexact*agexact; |
cov[3]= agexact*agexact; |
for (kk=1; kk<=cptcovage;kk++) { |
for (kk=1; kk<=cptcovage;kk++) { |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
} |
} |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
savm=oldm; |
savm=oldm; |
oldm=newm; |
oldm=newm; |
} /* end mult */ |
} /* end mult */ |
|
|
s1=s[mw[mi][i]][i]; |
s1=s[mw[mi][i]][i]; |
s2=s[mw[mi+1][i]][i]; |
s2=s[mw[mi+1][i]][i]; |
bbh=(double)bh[mi][i]/(double)stepm; |
bbh=(double)bh[mi][i]/(double)stepm; |
lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2])); /* linear interpolation */ |
lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*(savm[s1][s2])):log((1.+bbh)*out[s1][s2])); /* linear interpolation */ |
ipmx +=1; |
ipmx +=1; |
sw += weight[i]; |
sw += weight[i]; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
} /* end of wave */ |
} /* end of wave */ |
} /* end of individual */ |
} /* end of individual */ |
} else if(mle==3){ /* exponential inter-extrapolation */ |
} else if(mle==3){ /* exponential inter-extrapolation */ |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; |
for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; |
for(mi=1; mi<= wav[i]-1; mi++){ |
for(mi=1; mi<= wav[i]-1; mi++){ |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (j=1;j<=nlstate+ndeath;j++){ |
for (j=1;j<=nlstate+ndeath;j++){ |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
} |
} |
for(d=0; d<dh[mi][i]; d++){ |
for(d=0; d<dh[mi][i]; d++){ |
newm=savm; |
newm=savm; |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
cov[2]=agexact; |
cov[2]=agexact; |
if(nagesqr==1) |
if(nagesqr==1) |
cov[3]= agexact*agexact; |
cov[3]= agexact*agexact; |
for (kk=1; kk<=cptcovage;kk++) { |
for (kk=1; kk<=cptcovage;kk++) { |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
} |
} |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
savm=oldm; |
savm=oldm; |
oldm=newm; |
oldm=newm; |
} /* end mult */ |
} /* end mult */ |
|
|
s1=s[mw[mi][i]][i]; |
s1=s[mw[mi][i]][i]; |
s2=s[mw[mi+1][i]][i]; |
s2=s[mw[mi+1][i]][i]; |
bbh=(double)bh[mi][i]/(double)stepm; |
bbh=(double)bh[mi][i]/(double)stepm; |
lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */ |
lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */ |
ipmx +=1; |
ipmx +=1; |
sw += weight[i]; |
sw += weight[i]; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
} /* end of wave */ |
} /* end of wave */ |
} /* end of individual */ |
} /* end of individual */ |
}else if (mle==4){ /* ml=4 no inter-extrapolation */ |
}else if (mle==4){ /* ml=4 no inter-extrapolation */ |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; |
for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; |
for(mi=1; mi<= wav[i]-1; mi++){ |
for(mi=1; mi<= wav[i]-1; mi++){ |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (j=1;j<=nlstate+ndeath;j++){ |
for (j=1;j<=nlstate+ndeath;j++){ |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
} |
} |
for(d=0; d<dh[mi][i]; d++){ |
for(d=0; d<dh[mi][i]; d++){ |
newm=savm; |
newm=savm; |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
cov[2]=agexact; |
cov[2]=agexact; |
if(nagesqr==1) |
if(nagesqr==1) |
cov[3]= agexact*agexact; |
cov[3]= agexact*agexact; |
for (kk=1; kk<=cptcovage;kk++) { |
for (kk=1; kk<=cptcovage;kk++) { |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
} |
} |
|
|
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
savm=oldm; |
savm=oldm; |
oldm=newm; |
oldm=newm; |
} /* end mult */ |
} /* end mult */ |
|
|
s1=s[mw[mi][i]][i]; |
s1=s[mw[mi][i]][i]; |
s2=s[mw[mi+1][i]][i]; |
s2=s[mw[mi+1][i]][i]; |
if( s2 > nlstate){ |
if( s2 > nlstate){ |
lli=log(out[s1][s2] - savm[s1][s2]); |
lli=log(out[s1][s2] - savm[s1][s2]); |
} else if ( s2==-1 ) { /* alive */ |
} else if ( s2==-1 ) { /* alive */ |
for (j=1,survp=0. ; j<=nlstate; j++) |
for (j=1,survp=0. ; j<=nlstate; j++) |
survp += out[s1][j]; |
survp += out[s1][j]; |
lli= log(survp); |
lli= log(survp); |
}else{ |
}else{ |
lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]); /* Original formula */ |
lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]); /* Original formula */ |
} |
} |
ipmx +=1; |
ipmx +=1; |
sw += weight[i]; |
sw += weight[i]; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
/* printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ |
/* printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ |
} /* end of wave */ |
} /* end of wave */ |
} /* end of individual */ |
} /* end of individual */ |
}else{ /* ml=5 no inter-extrapolation no jackson =0.8a */ |
}else{ /* ml=5 no inter-extrapolation no jackson =0.8a */ |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; |
for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; |
for(mi=1; mi<= wav[i]-1; mi++){ |
for(mi=1; mi<= wav[i]-1; mi++){ |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (j=1;j<=nlstate+ndeath;j++){ |
for (j=1;j<=nlstate+ndeath;j++){ |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
savm[ii][j]=(ii==j ? 1.0 : 0.0); |
} |
} |
for(d=0; d<dh[mi][i]; d++){ |
for(d=0; d<dh[mi][i]; d++){ |
newm=savm; |
newm=savm; |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
agexact=agev[mw[mi][i]][i]+d*stepm/YEARM; |
cov[2]=agexact; |
cov[2]=agexact; |
if(nagesqr==1) |
if(nagesqr==1) |
cov[3]= agexact*agexact; |
cov[3]= agexact*agexact; |
for (kk=1; kk<=cptcovage;kk++) { |
for (kk=1; kk<=cptcovage;kk++) { |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
} |
} |
|
|
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
savm=oldm; |
savm=oldm; |
oldm=newm; |
oldm=newm; |
} /* end mult */ |
} /* end mult */ |
|
|
s1=s[mw[mi][i]][i]; |
s1=s[mw[mi][i]][i]; |
s2=s[mw[mi+1][i]][i]; |
s2=s[mw[mi+1][i]][i]; |
lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]); /* Original formula */ |
lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]); /* Original formula */ |
ipmx +=1; |
ipmx +=1; |
sw += weight[i]; |
sw += weight[i]; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
/*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]);*/ |
/*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]);*/ |
} /* end of wave */ |
} /* end of wave */ |
} /* end of individual */ |
} /* end of individual */ |
} /* End of if */ |
} /* End of if */ |
for(k=1,l=0.; k<=nlstate; k++) l += ll[k]; |
for(k=1,l=0.; k<=nlstate; k++) l += ll[k]; |
/* printf("l1=%f l2=%f ",ll[1],ll[2]); */ |
/* printf("l1=%f l2=%f ",ll[1],ll[2]); */ |
l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */ |
l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */ |
return -l; |
return -l; |
} |
} |
|
|
/*************** log-likelihood *************/ |
/*************** log-likelihood *************/ |
Line 3109 double funcone( double *x)
|
Line 3225 double funcone( double *x)
|
{ |
{ |
/* Same as likeli but slower because of a lot of printf and if */ |
/* Same as likeli but slower because of a lot of printf and if */ |
int i, ii, j, k, mi, d, kk; |
int i, ii, j, k, mi, d, kk; |
|
int ioffset=0; |
double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; |
double l, ll[NLSTATEMAX+1], cov[NCOVMAX+1]; |
double **out; |
double **out; |
double lli; /* Individual log likelihood */ |
double lli; /* Individual log likelihood */ |
double llt; |
double llt; |
int s1, s2; |
int s1, s2; |
|
int iv=0, iqv=0, itv=0, iqtv=0 ; /* Index of varying covariate, fixed quantitative cov, time varying covariate */ |
double bbh, survp; |
double bbh, survp; |
double agexact; |
double agexact; |
double agebegin, ageend; |
double agebegin, ageend; |
Line 3126 double funcone( double *x)
|
Line 3244 double funcone( double *x)
|
cov[1]=1.; |
cov[1]=1.; |
|
|
for(k=1; k<=nlstate; k++) ll[k]=0.; |
for(k=1; k<=nlstate; k++) ll[k]=0.; |
|
ioffset=0; |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (i=1,ipmx=0, sw=0.; i<=imx; i++){ |
for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; |
ioffset=2+nagesqr+cptcovage; |
|
/* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */ |
|
for (k=1; k<=ncoveff;k++){ /* Simple and product covariates without age* products */ |
|
cov[++ioffset]=covar[Tvar[k]][i]; |
|
} |
|
for(iqv=1; iqv <= nqfveff; iqv++){ /* Quantitatives Fixed covariates */ |
|
cov[++ioffset]=coqvar[iqv][i]; |
|
} |
|
|
for(mi=1; mi<= wav[i]-1; mi++){ |
for(mi=1; mi<= wav[i]-1; mi++){ |
|
for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */ |
|
cov[ioffset+itv]=cotvar[mw[mi][i]][itv][i]; |
|
} |
|
for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */ |
|
cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i]; |
|
} |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (ii=1;ii<=nlstate+ndeath;ii++) |
for (j=1;j<=nlstate+ndeath;j++){ |
for (j=1;j<=nlstate+ndeath;j++){ |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
oldm[ii][j]=(ii==j ? 1.0 : 0.0); |
Line 3149 double funcone( double *x)
|
Line 3281 double funcone( double *x)
|
for (kk=1; kk<=cptcovage;kk++) { |
for (kk=1; kk<=cptcovage;kk++) { |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; |
} |
} |
|
/* printf("i=%d,mi=%d,d=%d,mw[mi][i]=%d\n",i, mi,d,mw[mi][i]); */ |
/* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ |
/* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); |
Line 3192 double funcone( double *x)
|
Line 3324 double funcone( double *x)
|
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; |
/*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ |
/*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ |
if(globpr){ |
if(globpr){ |
fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %11.6f %8.4f %8.3f\ |
fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\ |
%11.6f %11.6f %11.6f ", \ |
%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, |
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,out[s1][s2],savm[s1][s2]); |
Line 3717 void pstamp(FILE *fichier)
|
Line 3849 void pstamp(FILE *fichier)
|
int mi; /* Effective wave */ |
int mi; /* Effective wave */ |
int first; |
int first; |
double ***freq; /* Frequencies */ |
double ***freq; /* Frequencies */ |
|
double *meanq; |
|
double **meanqt; |
double *pp, **prop, *posprop, *pospropt; |
double *pp, **prop, *posprop, *pospropt; |
double pos=0., posproptt=0., pospropta=0., k2, dateintsum=0,k2cpt=0; |
double pos=0., posproptt=0., pospropta=0., k2, dateintsum=0,k2cpt=0; |
char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH], fileresphtmfr[FILENAMELENGTH]; |
char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH], fileresphtmfr[FILENAMELENGTH]; |
Line 3727 void pstamp(FILE *fichier)
|
Line 3861 void pstamp(FILE *fichier)
|
posprop=vector(1,nlstate); /* Counting the number of transition starting from a live state per age */ |
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 */ |
pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */ |
/* prop=matrix(1,nlstate,iagemin,iagemax+3); */ |
/* prop=matrix(1,nlstate,iagemin,iagemax+3); */ |
|
meanq=vector(1,nqfveff); /* Number of Quantitative Fixed Variables Effective */ |
|
meanqt=matrix(1,lastpass,1,nqtveff); |
strcpy(fileresp,"P_"); |
strcpy(fileresp,"P_"); |
strcat(fileresp,fileresu); |
strcat(fileresp,fileresu); |
/*strcat(fileresphtm,fileresu);*/ |
/*strcat(fileresphtm,fileresu);*/ |
Line 3769 Title=%s <br>Datafile=%s Firstpass=%d La
|
Line 3905 Title=%s <br>Datafile=%s Firstpass=%d La
|
freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+3+AGEMARGE); |
freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+3+AGEMARGE); |
j1=0; |
j1=0; |
|
|
j=cptcoveff; |
j=ncoveff; |
if (cptcovn<1) {j=1;ncodemax[1]=1;} |
if (cptcovn<1) {j=1;ncodemax[1]=1;} |
|
|
first=1; |
first=1; |
Line 3781 Title=%s <br>Datafile=%s Firstpass=%d La
|
Line 3917 Title=%s <br>Datafile=%s Firstpass=%d La
|
Then V1=1 and V2=1 is a noisy combination that we want to exclude for the list 2**cptcoveff |
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 */ |
for (j1 = 1; j1 <= (int) pow(2,j); j1++){ /* Loop on covariates combination excluding varying and quantitatives */ |
posproptt=0.; |
posproptt=0.; |
/*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]); |
/*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]); |
scanf("%d", i);*/ |
scanf("%d", i);*/ |
Line 3796 Title=%s <br>Datafile=%s Firstpass=%d La
|
Line 3932 Title=%s <br>Datafile=%s Firstpass=%d La
|
posprop[i]=0; |
posprop[i]=0; |
pospropt[i]=0; |
pospropt[i]=0; |
} |
} |
|
for (z1=1; z1<= nqfveff; z1++) { |
|
meanq[z1]+=0.; |
|
for(m=1;m<=lastpass;m++){ |
|
meanqt[m][z1]=0.; |
|
} |
|
} |
|
|
dateintsum=0; |
dateintsum=0; |
k2cpt=0; |
k2cpt=0; |
|
/* For that comination of covariate j1, we count and print the frequencies */ |
for (iind=1; iind<=imx; iind++) { /* For each individual iind */ |
for (iind=1; iind<=imx; iind++) { /* For each individual iind */ |
bool=1; |
bool=1; |
if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ |
if (nqfveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */ |
for (z1=1; z1<=cptcoveff; z1++) { |
for (z1=1; z1<= nqfveff; z1++) { |
|
meanq[z1]+=coqvar[Tvar[z1]][iind]; |
|
} |
|
for (z1=1; z1<=ncoveff; z1++) { |
|
/* if(Tvaraff[z1] ==-20){ */ |
|
/* /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */ |
|
/* }else if(Tvaraff[z1] ==-10){ */ |
|
/* /\* sumnew+=coqvar[z1][iind]; *\/ */ |
|
/* }else */ |
if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,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 */ |
/* Tests if this individual i responded to j1 (V4=1 V3=0) */ |
bool=0; |
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", |
/* 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), |
bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1), |
Line 3815 Title=%s <br>Datafile=%s Firstpass=%d La
|
Line 3965 Title=%s <br>Datafile=%s Firstpass=%d La
|
} /* end z1 */ |
} /* end z1 */ |
} /* cptcovn > 0 */ |
} /* cptcovn > 0 */ |
|
|
if (bool==1){ |
if (bool==1){ /* We selected an individual iin satisfying combination j1 */ |
/* for(m=firstpass; m<=lastpass; m++){ */ |
/* for(m=firstpass; m<=lastpass; m++){ */ |
for(mi=1; mi<wav[iind];mi++){ |
for(mi=1; mi<wav[iind];mi++){ |
m=mw[mi][iind]; |
m=mw[mi][iind]; |
Line 3855 Title=%s <br>Datafile=%s Firstpass=%d La
|
Line 4005 Title=%s <br>Datafile=%s Firstpass=%d La
|
|
|
/* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ |
/* fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ |
pstamp(ficresp); |
pstamp(ficresp); |
if (cptcovn>0) { |
if (ncoveff>0) { |
fprintf(ficresp, "\n#********** Variable "); |
fprintf(ficresp, "\n#********** Variable "); |
fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); |
fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); |
fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); |
fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); |
for (z1=1; z1<=cptcoveff; z1++){ |
for (z1=1; z1<=ncoveff; z1++){ |
fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,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(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(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); |
Line 3868 Title=%s <br>Datafile=%s Firstpass=%d La
|
Line 4018 Title=%s <br>Datafile=%s Firstpass=%d La
|
fprintf(ficresphtm, "**********</h3>\n"); |
fprintf(ficresphtm, "**********</h3>\n"); |
fprintf(ficresphtmfr, "**********</h3>\n"); |
fprintf(ficresphtmfr, "**********</h3>\n"); |
fprintf(ficlog, "\n#********** Variable "); |
fprintf(ficlog, "\n#********** Variable "); |
for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); |
for (z1=1; z1<=ncoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); |
fprintf(ficlog, "**********\n"); |
fprintf(ficlog, "**********\n"); |
} |
} |
fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">"); |
fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">"); |
Line 4019 Title=%s <br>Datafile=%s Firstpass=%d La
|
Line 4169 Title=%s <br>Datafile=%s Firstpass=%d La
|
fclose(ficresp); |
fclose(ficresp); |
fclose(ficresphtm); |
fclose(ficresphtm); |
fclose(ficresphtmfr); |
fclose(ficresphtmfr); |
|
free_vector(meanq,1,nqfveff); |
|
free_matrix(meanqt,1,lastpass,1,nqtveff); |
free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE); |
free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE); |
free_vector(pospropt,1,nlstate); |
free_vector(pospropt,1,nlstate); |
free_vector(posprop,1,nlstate); |
free_vector(posprop,1,nlstate); |
free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE); |
free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE); |
free_vector(pp,1,nlstate); |
free_vector(pp,1,nlstate); |
/* End of Freq */ |
/* End of freqsummary */ |
} |
} |
|
|
/************ Prevalence ********************/ |
/************ Prevalence ********************/ |
Line 4131 void concatwav(int wav[], int **dh, int
|
Line 4283 void concatwav(int wav[], int **dh, int
|
and mw[mi+1][i]. dh depends on stepm. |
and mw[mi+1][i]. dh depends on stepm. |
*/ |
*/ |
|
|
int i, mi, m; |
int i=0, mi=0, m=0, mli=0; |
/* int j, k=0,jk, ju, jl,jmin=1e+5, jmax=-1; |
/* int j, k=0,jk, ju, jl,jmin=1e+5, jmax=-1; |
double sum=0., jmean=0.;*/ |
double sum=0., jmean=0.;*/ |
int first, firstwo, firsthree, firstfour; |
int first=0, firstwo=0, firsthree=0, firstfour=0, firstfiv=0; |
int j, k=0,jk, ju, jl; |
int j, k=0,jk, ju, jl; |
double sum=0.; |
double sum=0.; |
first=0; |
first=0; |
Line 4144 void concatwav(int wav[], int **dh, int
|
Line 4296 void concatwav(int wav[], int **dh, int
|
jmin=100000; |
jmin=100000; |
jmax=-1; |
jmax=-1; |
jmean=0.; |
jmean=0.; |
|
|
|
/* Treating live states */ |
for(i=1; i<=imx; i++){ /* For simple cases and if state is death */ |
for(i=1; i<=imx; i++){ /* For simple cases and if state is death */ |
mi=0; |
mi=0; /* First valid wave */ |
|
mli=0; /* Last valid wave */ |
m=firstpass; |
m=firstpass; |
while(s[m][i] <= nlstate){ /* a live state */ |
while(s[m][i] <= nlstate){ /* a live state */ |
if(s[m][i]>=1 || s[m][i]==-4 || s[m][i]==-5){ /* Since 0.98r4 if status=-2 vital status is really unknown, wave should be skipped */ |
if(m >firstpass && s[m][i]==s[m-1][i] && mint[m][i]==mint[m-1][i] && anint[m][i]==anint[m-1][i]){/* Two succesive identical information on wave m */ |
|
mli=m-1;/* mw[++mi][i]=m-1; */ |
|
}else if(s[m][i]>=1 || s[m][i]==-4 || s[m][i]==-5){ /* Since 0.98r4 if status=-2 vital status is really unknown, wave should be skipped */ |
mw[++mi][i]=m; |
mw[++mi][i]=m; |
|
mli=m; |
|
} /* else might be a useless wave -1 and mi is not incremented and mw[mi] not updated */ |
|
if(m < lastpass){ /* m < lastpass, standard case */ |
|
m++; /* mi gives the "effective" current wave, m the current wave, go to next wave by incrementing m */ |
} |
} |
if(m >=lastpass){ |
else{ /* m >= lastpass, eventual special issue with warning */ |
|
#ifdef UNKNOWNSTATUSNOTCONTRIBUTING |
|
break; |
|
#else |
if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ |
if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ |
if(firsthree == 0){ |
if(firsthree == 0){ |
printf("Information! Unknown health status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood.\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); |
printf("Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as pi. .\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); |
firsthree=1; |
firsthree=1; |
} |
} |
fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood.\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); |
fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as pi. .\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m); |
mw[++mi][i]=m; |
mw[++mi][i]=m; |
|
mli=m; |
} |
} |
if(s[m][i]==-2){ /* Vital status is really unknown */ |
if(s[m][i]==-2){ /* Vital status is really unknown */ |
nbwarn++; |
nbwarn++; |
if((int)anint[m][i] == 9999){ /* Has the vital status really been verified? */ |
if((int)anint[m][i] == 9999){ /* Has the vital status really been verified? */ |
printf("Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); |
printf("Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); |
fprintf(ficlog,"Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); |
fprintf(ficlog,"Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); |
} |
} |
break; |
break; |
} |
} |
break; |
break; |
} |
#endif |
else |
}/* End m >= lastpass */ |
m++; |
|
}/* end while */ |
}/* end while */ |
|
|
|
/* mi is the last effective wave, m is lastpass, mw[j][i] gives the # of j-th effective wave for individual i */ |
/* After last pass */ |
/* After last pass */ |
|
/* Treating death states */ |
if (s[m][i] > nlstate){ /* In a death state */ |
if (s[m][i] > nlstate){ /* In a death state */ |
|
/* if( mint[m][i]==mdc[m][i] && anint[m][i]==andc[m][i]){ /\* same date of death and date of interview *\/ */ |
|
/* } */ |
mi++; /* Death is another wave */ |
mi++; /* Death is another wave */ |
/* if(mi==0) never been interviewed correctly before death */ |
/* if(mi==0) never been interviewed correctly before death */ |
/* Only death is a correct wave */ |
/* Only death is a correct wave */ |
mw[mi][i]=m; |
mw[mi][i]=m; |
}else if ((int) andc[i] != 9999) { /* Status is either death or negative. A death occured after lastpass, we can't take it into account because of potential bias */ |
} |
|
#ifndef DISPATCHINGKNOWNDEATHAFTERLASTWAVE |
|
else if ((int) andc[i] != 9999) { /* Status is negative. A death occured after lastpass, we can't take it into account because of potential bias */ |
/* m++; */ |
/* m++; */ |
/* mi++; */ |
/* mi++; */ |
/* s[m][i]=nlstate+1; /\* We are setting the status to the last of non live state *\/ */ |
/* s[m][i]=nlstate+1; /\* We are setting the status to the last of non live state *\/ */ |
/* mw[mi][i]=m; */ |
/* mw[mi][i]=m; */ |
nberr++; |
|
if ((int)anint[m][i]!= 9999) { /* date of last interview is known */ |
if ((int)anint[m][i]!= 9999) { /* date of last interview is known */ |
if(firstwo==0){ |
if((andc[i]+moisdc[i]/12.) <=(anint[m][i]+mint[m][i]/12.)){ /* death occured before last wave and status should have been death instead of -1 */ |
printf("Error! Death for individual %ld line=%d occurred %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); |
nbwarn++; |
firstwo=1; |
if(firstfiv==0){ |
|
printf("Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d interviewed at %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); |
|
firstfiv=1; |
|
}else{ |
|
fprintf(ficlog,"Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d interviewed at %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); |
|
} |
|
}else{ /* Death occured afer last wave potential bias */ |
|
nberr++; |
|
if(firstwo==0){ |
|
printf("Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); |
|
firstwo=1; |
|
} |
|
fprintf(ficlog,"Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); |
} |
} |
fprintf(ficlog,"Error! Death for individual %ld line=%d occurred %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); |
|
}else{ /* end date of interview is known */ |
}else{ /* end date of interview is known */ |
/* death is known but not confirmed by death status at any wave */ |
/* death is known but not confirmed by death status at any wave */ |
if(firstfour==0){ |
if(firstfour==0){ |
Line 4200 void concatwav(int wav[], int **dh, int
|
Line 4380 void concatwav(int wav[], int **dh, int
|
} |
} |
fprintf(ficlog,"Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); |
fprintf(ficlog,"Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); |
} |
} |
} |
} /* end if date of death is known */ |
wav[i]=mi; |
#endif |
|
wav[i]=mi; /* mi should be the last effective wave (or mli) */ |
|
/* wav[i]=mw[mi][i]; */ |
if(mi==0){ |
if(mi==0){ |
nbwarn++; |
nbwarn++; |
if(first==0){ |
if(first==0){ |
Line 4312 void concatwav(int wav[], int **dh, int
|
Line 4494 void concatwav(int wav[], int **dh, int
|
/**< Uses cptcovn+2*cptcovprod as the number of covariates */ |
/**< 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 |
/* 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] |
* Boring subroutine which should only output nbcode[Tvar[j]][k] |
* Tvar[5] in V2+V1+V3*age+V2*V4 is 2 (V2) |
* Tvar[5] in V2+V1+V3*age+V2*V4 is 4 (V4) even it is a time varying or quantitative variable |
* nbcode[Tvar[5]][1]= nbcode[2][1]=0, nbcode[2][2]=1 (usually); |
* nbcode[Tvar[5]][1]= nbcode[4][1]=0, nbcode[4][2]=1 (usually); |
*/ |
*/ |
|
|
int ij=1, k=0, j=0, i=0, maxncov=NCOVMAX; |
int ij=1, k=0, j=0, i=0, maxncov=NCOVMAX; |
Line 4323 void concatwav(int wav[], int **dh, int
|
Line 4505 void concatwav(int wav[], int **dh, int
|
|
|
|
|
/* cptcoveff=0; */ |
/* cptcoveff=0; */ |
*cptcov=0; |
/* *cptcov=0; */ |
|
|
for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ |
for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ |
|
|
/* Loop on covariates without age and products */ |
/* Loop on covariates without age and products and no quantitative variable */ |
for (j=1; j<=(cptcovs); j++) { /* From model V1 + V2*age+ V3 + V3*V4 keeps V1 + V3 = 2 only */ |
/* for (j=1; j<=(cptcovs); j++) { /\* From model V1 + V2*age+ V3 + V3*V4 keeps V1 + V3 = 2 only *\/ */ |
|
for (j=1; j<=cptcovsnq; j++) { /* From model V1 + V2*age + V3 + V3*V4 keeps V1 + V3 = 2 only */ |
for (k=-1; k < maxncov; k++) Ndum[k]=0; |
for (k=-1; k < maxncov; k++) Ndum[k]=0; |
for (i=1; i<=imx; i++) { /* Loop on individuals: reads the data file to get the maximum value of the |
for (i=1; i<=imx; i++) { /* Loop on individuals: reads the data file to get the maximum value of the |
modality of this covariate Vj*/ |
modality of this covariate Vj*/ |
ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i |
switch(Typevar[j]) { |
* If product of Vn*Vm, still boolean *: |
case 1: /* A real fixed dummy covariate */ |
* If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables |
ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i |
* 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0 */ |
* If product of Vn*Vm, still boolean *: |
/* Finds for covariate j, n=Tvar[j] of Vn . ij is the |
* If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables |
modality of the nth covariate of individual i. */ |
* 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0 */ |
if (ij > modmaxcovj) |
/* Finds for covariate j, n=Tvar[j] of Vn . ij is the |
modmaxcovj=ij; |
modality of the nth covariate of individual i. */ |
else if (ij < modmincovj) |
if (ij > modmaxcovj) |
modmincovj=ij; |
modmaxcovj=ij; |
if ((ij < -1) && (ij > NCOVMAX)){ |
else if (ij < modmincovj) |
printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); |
modmincovj=ij; |
exit(1); |
if ((ij < -1) && (ij > NCOVMAX)){ |
}else |
printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); |
Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ |
exit(1); |
/* If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */ |
}else |
/*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ |
Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ |
/* getting the maximum value of the modality of the covariate |
/* If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */ |
(should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and |
/*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ |
female is 1, then modmaxcovj=1.*/ |
/* getting the maximum value of the modality of the covariate |
|
(should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and |
|
female ies 1, then modmaxcovj=1.*/ |
|
break; |
|
case 2: |
|
break; |
|
|
|
} |
} /* end for loop on individuals i */ |
} /* end for loop on individuals i */ |
printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); |
printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); |
fprintf(ficlog," Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); |
fprintf(ficlog," Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); |
cptcode=modmaxcovj; |
cptcode=modmaxcovj; |
/* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ |
/* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ |
/*for (i=0; i<=cptcode; i++) {*/ |
/*for (i=0; i<=cptcode; i++) {*/ |
for (k=modmincovj; k<=modmaxcovj; k++) { /* k=-1 ? 0 and 1*//* For each value k of the modality of model-cov j */ |
for (k=modmincovj; k<=modmaxcovj; k++) { /* k=-1 ? 0 and 1*//* For each value k of the modality of model-cov j */ |
printf("Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], k, Ndum[k]); |
printf("Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], k, Ndum[k]); |
fprintf(ficlog, "Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], k, Ndum[k]); |
fprintf(ficlog, "Frequencies of covariates %d ie V%d with value %d: %d\n", j, Tvar[j], k, Ndum[k]); |
if( Ndum[k] != 0 ){ /* Counts if nobody answered modality k ie empty modality, we skip it and reorder */ |
if( Ndum[k] != 0 ){ /* Counts if nobody answered modality k ie empty modality, we skip it and reorder */ |
if( k != -1){ |
if( k != -1){ |
ncodemax[j]++; /* ncodemax[j]= Number of modalities of the j th |
ncodemax[j]++; /* ncodemax[j]= Number of modalities of the j th |
covariate for which somebody answered excluding |
covariate for which somebody answered excluding |
undefined. Usually 2: 0 and 1. */ |
undefined. Usually 2: 0 and 1. */ |
} |
} |
ncodemaxwundef[j]++; /* ncodemax[j]= Number of modalities of the j th |
ncodemaxwundef[j]++; /* ncodemax[j]= Number of modalities of the j th |
covariate for which somebody answered including |
covariate for which somebody answered including |
undefined. Usually 3: -1, 0 and 1. */ |
undefined. Usually 3: -1, 0 and 1. */ |
} |
} |
/* In fact ncodemax[j]=2 (dichotom. variables only) but it could be more for |
/* In fact ncodemax[j]=2 (dichotom. variables only) but it could be more for |
historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ |
* historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ |
} /* Ndum[-1] number of undefined modalities */ |
} /* Ndum[-1] number of undefined modalities */ |
|
|
/* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */ |
/* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */ |
/* For covariate j, modalities could be 1, 2, 3, 4, 5, 6, 7. |
/* For covariate j, modalities could be 1, 2, 3, 4, 5, 6, 7. |
If Ndum[1]=0, Ndum[2]=0, Ndum[3]= 635, Ndum[4]=0, Ndum[5]=0, Ndum[6]=27, Ndum[7]=125; |
If Ndum[1]=0, Ndum[2]=0, Ndum[3]= 635, Ndum[4]=0, Ndum[5]=0, Ndum[6]=27, Ndum[7]=125; |
Line 4390 void concatwav(int wav[], int **dh, int
|
Line 4580 void concatwav(int wav[], int **dh, int
|
*/ |
*/ |
ij=0; /* ij is similar to i but can jump over null modalities */ |
ij=0; /* ij is similar to i but can jump over null modalities */ |
for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/ |
for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/ |
if (Ndum[i] == 0) { /* If nobody responded to this modality k */ |
if (Ndum[i] == 0) { /* If nobody responded to this modality k */ |
break; |
break; |
} |
} |
ij++; |
ij++; |
nbcode[Tvar[j]][ij]=i; /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality.*/ |
nbcode[Tvar[j]][ij]=i; /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality.*/ |
cptcode = ij; /* New max modality for covar j */ |
cptcode = ij; /* New max modality for covar j */ |
} /* end of loop on modality i=-1 to 1 or more */ |
} /* end of loop on modality i=-1 to 1 or more */ |
|
|
/* for (k=0; k<= cptcode; k++) { /\* k=-1 ? k=0 to 1 *\//\* Could be 1 to 4 *\//\* cptcode=modmaxcovj *\/ */ |
/* for (k=0; k<= cptcode; k++) { /\* k=-1 ? k=0 to 1 *\//\* Could be 1 to 4 *\//\* cptcode=modmaxcovj *\/ */ |
/* /\*recode from 0 *\/ */ |
/* /\*recode from 0 *\/ */ |
/* k is a modality. If we have model=V1+V1*sex */ |
/* k is a modality. If we have model=V1+V1*sex */ |
Line 4413 void concatwav(int wav[], int **dh, int
|
Line 4603 void concatwav(int wav[], int **dh, int
|
/* } /\* end of loop on modality k *\/ */ |
/* } /\* end of loop on modality k *\/ */ |
} /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ |
} /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ |
|
|
for (k=-1; k< maxncov; k++) Ndum[k]=0; |
for (k=-1; k< maxncov; k++) Ndum[k]=0; |
|
|
for (i=1; i<=ncovmodel-2-nagesqr; i++) { /* -2, cste and age and eventually age*age */ |
for (i=1; i<=ncovmodel-2-nagesqr; i++) { /* -2, cste and age and eventually age*age */ |
/* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/ |
/* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/ |
ij=Tvar[i]; /* Tvar might be -1 if status was unknown */ |
ij=Tvar[i]; /* Tvar might be -1 if status was unknown */ |
Ndum[ij]++; /* Might be supersed V1 + V1*age */ |
Ndum[ij]++; /* Might be supersed V1 + V1*age */ |
} |
} /* V4+V3+V5, Ndum[1]@5={0, 0, 1, 1, 1} */ |
|
|
ij=0; |
ij=0; |
for (i=0; i<= maxncov-1; i++) { /* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) */ |
for (i=0; i<= maxncov-1; i++) { /* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) */ |
/*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/ |
/*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/ |
if((Ndum[i]!=0) && (i<=ncovcol)){ |
if((Ndum[i]!=0) && (i<=ncovcol)){ |
ij++; |
/*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ |
/*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ |
Tvaraff[++ij]=i; /*For printing (unclear) */ |
Tvaraff[ij]=i; /*For printing (unclear) */ |
}else if((Ndum[i]!=0) && (i<=ncovcol+nqv)){ |
}else{ |
Tvaraff[++ij]=-10; /* Dont'n know how to treat quantitative variables yet */ |
/* Tvaraff[ij]=0; */ |
}else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv)){ |
} |
Tvaraff[++ij]=i; /*For printing (unclear) */ |
} |
}else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv+nqtv)){ |
/* ij--; */ |
Tvaraff[++ij]=-20; /* Dont'n know how to treat quantitative variables yet */ |
/* cptcoveff=ij; /\*Number of total covariates*\/ */ |
} |
*cptcov=ij; /*Number of total covariates*/ |
} /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */ |
|
/* ij--; */ |
|
/* cptcoveff=ij; /\*Number of total covariates*\/ */ |
|
*cptcov=ij; /*Number of total real effective covariates: effective |
|
* because they can be excluded from the model and real |
|
* if in the model but excluded because missing values*/ |
} |
} |
|
|
|
|
Line 5286 To be simple, these graphs help to under
|
Line 5480 To be simple, these graphs help to under
|
tj = (int) pow(2,cptcoveff); |
tj = (int) pow(2,cptcoveff); |
if (cptcovn<1) {tj=1;ncodemax[1]=1;} |
if (cptcovn<1) {tj=1;ncodemax[1]=1;} |
j1=0; |
j1=0; |
for(j1=1; j1<=tj;j1++){ /* For each valid combination of covariates */ |
for(j1=1; j1<=tj;j1++){ /* For each valid combination of covariates or only once*/ |
if (cptcovn>0) { |
if (cptcovn>0) { |
fprintf(ficresprob, "\n#********** Variable "); |
fprintf(ficresprob, "\n#********** Variable "); |
for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); |
for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]); |
Line 5700 See page 'Matrix of variance-covariance
|
Line 5894 See page 'Matrix of variance-covariance
|
jj1++; |
jj1++; |
if (cptcovn > 0) { |
if (cptcovn > 0) { |
fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); |
fprintf(fichtm,"<hr size=\"2\" color=\"#EC5E5E\">************ Results for covariates"); |
for (cpt=1; cpt<=cptcoveff;cpt++) |
for (cpt=1; cpt<=cptcoveff;cpt++) /**< cptcoveff number of variables */ |
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\">"); |
fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); |
|
|
Line 6304 plot [%.f:%.f] ", ageminpar, agemaxpar)
|
Line 6498 plot [%.f:%.f] ", ageminpar, agemaxpar)
|
} |
} |
} |
} |
else |
else |
fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); |
fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); /* Valgrind bug nbcode */ |
} |
} |
}else{ |
}else{ |
i=i-ncovmodel; |
i=i-ncovmodel; |
Line 6331 plot [%.f:%.f] ", ageminpar, agemaxpar)
|
Line 6525 plot [%.f:%.f] ", ageminpar, agemaxpar)
|
} |
} |
} |
} |
else |
else |
fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); |
fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);/* Valgrind bug nbcode */ |
} |
} |
fprintf(ficgp,")"); |
fprintf(ficgp,")"); |
} |
} |
Line 7227 int readdata(char datafile[], int firsto
|
Line 7421 int readdata(char datafile[], int firsto
|
/* Loops on waves */ |
/* Loops on waves */ |
for (j=maxwav;j>=1;j--){ |
for (j=maxwav;j>=1;j--){ |
for (iv=nqtv;iv>=1;iv--){ /* Loop on time varying quantitative variables */ |
for (iv=nqtv;iv>=1;iv--){ /* Loop on time varying quantitative variables */ |
cutv(stra, strb, line, ' '); |
cutv(stra, strb, line, ' '); |
if(strb[0]=='.') { /* Missing value */ |
if(strb[0]=='.') { /* Missing value */ |
lval=-1; |
lval=-1; |
}else{ |
cotqvar[j][iv][i]=-1; /* 0.0/0.0 */ |
errno=0; |
if(isalpha(strb[1])) { /* .m or .d Really Missing value */ |
/* what_kind_of_number(strb); */ |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j); |
dval=strtod(strb,&endptr); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value. Exiting.\n", strb, linei,i,line,iv, nqtv, j);fflush(ficlog); |
/* if( strb[0]=='\0' || (*endptr != '\0')){ */ |
return 1; |
/* if(strb != endptr && *endptr == '\0') */ |
} |
/* dval=dlval; */ |
}else{ |
/* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */ |
errno=0; |
if( strb[0]=='\0' || (*endptr != '\0')){ |
/* what_kind_of_number(strb); */ |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, nqtv, j,maxwav); |
dval=strtod(strb,&endptr); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqtv, j,maxwav);fflush(ficlog); |
/* if( strb[0]=='\0' || (*endptr != '\0')){ */ |
return 1; |
/* if(strb != endptr && *endptr == '\0') */ |
} |
/* dval=dlval; */ |
cotqvar[j][iv][i]=dval; |
/* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */ |
} |
if( strb[0]=='\0' || (*endptr != '\0')){ |
strcpy(line,stra); |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, nqtv, j,maxwav); |
|
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqtv, j,maxwav);fflush(ficlog); |
|
return 1; |
|
} |
|
cotqvar[j][iv][i]=dval; |
|
} |
|
strcpy(line,stra); |
}/* end loop ntqv */ |
}/* end loop ntqv */ |
|
|
for (iv=ntv;iv>=1;iv--){ /* Loop on time varying dummies */ |
for (iv=ntv;iv>=1;iv--){ /* Loop on time varying dummies */ |
cutv(stra, strb, line, ' '); |
cutv(stra, strb, line, ' '); |
if(strb[0]=='.') { /* Missing value */ |
if(strb[0]=='.') { /* Missing value */ |
lval=-1; |
lval=-1; |
}else{ |
}else{ |
errno=0; |
errno=0; |
lval=strtol(strb,&endptr,10); |
lval=strtol(strb,&endptr,10); |
/* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ |
/* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ |
if( strb[0]=='\0' || (*endptr != '\0')){ |
if( strb[0]=='\0' || (*endptr != '\0')){ |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th dummy covariate out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv, j,maxwav); |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th dummy covariate out of %d measured at wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv, j,maxwav); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d dummy covariate out of %d measured wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv,j,maxwav);fflush(ficlog); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d dummy covariate out of %d measured wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,iv, ntv,j,maxwav);fflush(ficlog); |
return 1; |
return 1; |
} |
} |
} |
} |
if(lval <-1 || lval >1){ |
if(lval <-1 || lval >1){ |
printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
For example, for multinomial values like 1, 2 and 3,\n \ |
For example, for multinomial values like 1, 2 and 3,\n \ |
build V1=0 V2=0 for the reference value (1),\n \ |
build V1=0 V2=0 for the reference value (1),\n \ |
V1=1 V2=0 for (2) \n \ |
V1=1 V2=0 for (2) \n \ |
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
output of IMaCh is often meaningless.\n \ |
output of IMaCh is often meaningless.\n \ |
Exiting.\n",lval,linei, i,line,j); |
Exiting.\n",lval,linei, i,line,j); |
fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
For example, for multinomial values like 1, 2 and 3,\n \ |
For example, for multinomial values like 1, 2 and 3,\n \ |
build V1=0 V2=0 for the reference value (1),\n \ |
build V1=0 V2=0 for the reference value (1),\n \ |
V1=1 V2=0 for (2) \n \ |
V1=1 V2=0 for (2) \n \ |
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
output of IMaCh is often meaningless.\n \ |
output of IMaCh is often meaningless.\n \ |
Exiting.\n",lval,linei, i,line,j);fflush(ficlog); |
Exiting.\n",lval,linei, i,line,j);fflush(ficlog); |
return 1; |
return 1; |
} |
} |
cotvar[j][iv][i]=(double)(lval); |
cotvar[j][iv][i]=(double)(lval); |
strcpy(line,stra); |
strcpy(line,stra); |
}/* end loop ntv */ |
}/* end loop ntv */ |
|
|
/* Statuses at wave */ |
/* Statuses at wave */ |
cutv(stra, strb, line, ' '); |
cutv(stra, strb, line, ' '); |
if(strb[0]=='.') { /* Missing value */ |
if(strb[0]=='.') { /* Missing value */ |
lval=-1; |
lval=-1; |
}else{ |
}else{ |
errno=0; |
errno=0; |
lval=strtol(strb,&endptr,10); |
lval=strtol(strb,&endptr,10); |
/* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ |
/* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/ |
if( strb[0]=='\0' || (*endptr != '\0')){ |
if( strb[0]=='\0' || (*endptr != '\0')){ |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav); |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog); |
return 1; |
return 1; |
} |
} |
} |
} |
|
|
s[j][i]=lval; |
s[j][i]=lval; |
|
|
/* Date of Interview */ |
/* Date of Interview */ |
strcpy(line,stra); |
strcpy(line,stra); |
cutv(stra, strb,line,' '); |
cutv(stra, strb,line,' '); |
if( (iout=sscanf(strb,"%d/%d",&month, &year)) != 0){ |
if( (iout=sscanf(strb,"%d/%d",&month, &year)) != 0){ |
} |
} |
else if( (iout=sscanf(strb,"%s.",dummy)) != 0){ |
else if( (iout=sscanf(strb,"%s.",dummy)) != 0){ |
month=99; |
month=99; |
year=9999; |
year=9999; |
}else{ |
}else{ |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j); |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);fflush(ficlog); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);fflush(ficlog); |
return 1; |
return 1; |
} |
} |
anint[j][i]= (double) year; |
anint[j][i]= (double) year; |
mint[j][i]= (double)month; |
mint[j][i]= (double)month; |
strcpy(line,stra); |
strcpy(line,stra); |
} /* End loop on waves */ |
} /* End loop on waves */ |
|
|
/* Date of death */ |
/* Date of death */ |
cutv(stra, strb,line,' '); |
cutv(stra, strb,line,' '); |
if( (iout=sscanf(strb,"%d/%d",&month, &year)) != 0){ |
if( (iout=sscanf(strb,"%d/%d",&month, &year)) != 0){ |
Line 7331 int readdata(char datafile[], int firsto
|
Line 7531 int readdata(char datafile[], int firsto
|
year=9999; |
year=9999; |
}else{ |
}else{ |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line); |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog); |
return 1; |
return 1; |
} |
} |
andc[i]=(double) year; |
andc[i]=(double) year; |
moisdc[i]=(double) month; |
moisdc[i]=(double) month; |
Line 7348 int readdata(char datafile[], int firsto
|
Line 7548 int readdata(char datafile[], int firsto
|
}else{ |
}else{ |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line); |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog); |
return 1; |
return 1; |
} |
} |
if (year==9999) { |
if (year==9999) { |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line); |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line);fflush(ficlog); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line);fflush(ficlog); |
return 1; |
return 1; |
|
|
} |
} |
annais[i]=(double)(year); |
annais[i]=(double)(year); |
moisnais[i]=(double)(month); |
moisnais[i]=(double)(month); |
strcpy(line,stra); |
strcpy(line,stra); |
|
|
/* Sample weight */ |
/* Sample weight */ |
cutv(stra, strb,line,' '); |
cutv(stra, strb,line,' '); |
errno=0; |
errno=0; |
Line 7372 int readdata(char datafile[], int firsto
|
Line 7572 int readdata(char datafile[], int firsto
|
} |
} |
weight[i]=dval; |
weight[i]=dval; |
strcpy(line,stra); |
strcpy(line,stra); |
|
|
for (iv=nqv;iv>=1;iv--){ /* Loop on fixed quantitative variables */ |
for (iv=nqv;iv>=1;iv--){ /* Loop on fixed quantitative variables */ |
cutv(stra, strb, line, ' '); |
cutv(stra, strb, line, ' '); |
if(strb[0]=='.') { /* Missing value */ |
if(strb[0]=='.') { /* Missing value */ |
lval=-1; |
lval=-1; |
}else{ |
}else{ |
errno=0; |
errno=0; |
/* what_kind_of_number(strb); */ |
/* what_kind_of_number(strb); */ |
dval=strtod(strb,&endptr); |
dval=strtod(strb,&endptr); |
/* if(strb != endptr && *endptr == '\0') */ |
/* if(strb != endptr && *endptr == '\0') */ |
/* dval=dlval; */ |
/* dval=dlval; */ |
/* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */ |
/* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) */ |
if( strb[0]=='\0' || (*endptr != '\0')){ |
if( strb[0]=='\0' || (*endptr != '\0')){ |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value (out of %d) constant for all waves. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqv, maxwav); |
printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value (out of %d) constant for all waves. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqv, maxwav); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value (out of %d) constant for all waves. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqv, maxwav);fflush(ficlog); |
fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value (out of %d) constant for all waves. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line, iv, nqv, maxwav);fflush(ficlog); |
return 1; |
return 1; |
} |
} |
coqvar[iv][i]=dval; |
coqvar[iv][i]=dval; |
} |
} |
strcpy(line,stra); |
strcpy(line,stra); |
}/* end loop nqv */ |
}/* end loop nqv */ |
Line 7398 int readdata(char datafile[], int firsto
|
Line 7598 int readdata(char datafile[], int firsto
|
for (j=ncovcol;j>=1;j--){ |
for (j=ncovcol;j>=1;j--){ |
cutv(stra, strb,line,' '); |
cutv(stra, strb,line,' '); |
if(strb[0]=='.') { /* Missing covariate value */ |
if(strb[0]=='.') { /* Missing covariate value */ |
lval=-1; |
lval=-1; |
}else{ |
}else{ |
errno=0; |
errno=0; |
lval=strtol(strb,&endptr,10); |
lval=strtol(strb,&endptr,10); |
if( strb[0]=='\0' || (*endptr != '\0')){ |
if( strb[0]=='\0' || (*endptr != '\0')){ |
printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line); |
printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line); |
fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);fflush(ficlog); |
fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);fflush(ficlog); |
return 1; |
return 1; |
} |
} |
} |
} |
if(lval <-1 || lval >1){ |
if(lval <-1 || lval >1){ |
printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
For example, for multinomial values like 1, 2 and 3,\n \ |
For example, for multinomial values like 1, 2 and 3,\n \ |
build V1=0 V2=0 for the reference value (1),\n \ |
build V1=0 V2=0 for the reference value (1),\n \ |
V1=1 V2=0 for (2) \n \ |
V1=1 V2=0 for (2) \n \ |
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
output of IMaCh is often meaningless.\n \ |
output of IMaCh is often meaningless.\n \ |
Exiting.\n",lval,linei, i,line,j); |
Exiting.\n",lval,linei, i,line,j); |
fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \ |
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \ |
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \ |
For example, for multinomial values like 1, 2 and 3,\n \ |
For example, for multinomial values like 1, 2 and 3,\n \ |
build V1=0 V2=0 for the reference value (1),\n \ |
build V1=0 V2=0 for the reference value (1),\n \ |
V1=1 V2=0 for (2) \n \ |
V1=1 V2=0 for (2) \n \ |
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \ |
output of IMaCh is often meaningless.\n \ |
output of IMaCh is often meaningless.\n \ |
Exiting.\n",lval,linei, i,line,j);fflush(ficlog); |
Exiting.\n",lval,linei, i,line,j);fflush(ficlog); |
return 1; |
return 1; |
} |
} |
covar[j][i]=(double)(lval); |
covar[j][i]=(double)(lval); |
strcpy(line,stra); |
strcpy(line,stra); |
} |
} |
lstra=strlen(stra); |
lstra=strlen(stra); |
|
|
if(lstra > 9){ /* More than 2**32 or max of what printf can write with %ld */ |
if(lstra > 9){ /* More than 2**32 or max of what printf can write with %ld */ |
stratrunc = &(stra[lstra-9]); |
stratrunc = &(stra[lstra-9]); |
num[i]=atol(stratrunc); |
num[i]=atol(stratrunc); |
Line 7445 int readdata(char datafile[], int firsto
|
Line 7645 int readdata(char datafile[], int firsto
|
|
|
i=i+1; |
i=i+1; |
} /* End loop reading data */ |
} /* End loop reading data */ |
|
|
*imax=i-1; /* Number of individuals */ |
*imax=i-1; /* Number of individuals */ |
fclose(fic); |
fclose(fic); |
|
|
return (0); |
return (0); |
/* endread: */ |
/* endread: */ |
printf("Exiting readdata: "); |
printf("Exiting readdata: "); |
fclose(fic); |
fclose(fic); |
return (1); |
return (1); |
} |
} |
|
|
void removespace(char *str) { |
void removespace(char *str) { |
Line 7464 void removespace(char *str) {
|
Line 7664 void removespace(char *str) {
|
while (*p1++ == *p2++); |
while (*p1++ == *p2++); |
} |
} |
|
|
int decodemodel ( char model[], int lastobs) /**< This routine decode the model and returns: |
int decodemodel ( char model[], int lastobs) |
* Model V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age+age*age |
/**< This routine decode the model and returns: |
* - nagesqr = 1 if age*age in the model, otherwise 0. |
* Model V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age+age*age |
* - cptcovt total number of covariates of the model nbocc(+)+1 = 8 excepting constant and age and age*age |
* - nagesqr = 1 if age*age in the model, otherwise 0. |
* - cptcovn or number of covariates k of the models excluding age*products =6 and age*age |
* - cptcovt total number of covariates of the model nbocc(+)+1 = 8 excepting constant and age and age*age |
* - cptcovage number of covariates with age*products =2 |
* - cptcovn or number of covariates k of the models excluding age*products =6 and age*age |
* - cptcovs number of simple covariates |
* - cptcovage number of covariates with age*products =2 |
* - Tvar[k] is the id of the kth covariate Tvar[1]@12 {1, 2, 3, 8, 10, 11, 8, 3, 7, 8, 5, 6}, thus Tvar[5=V7*V8]=10 |
* - cptcovs number of simple covariates |
* which is a new column after the 9 (ncovcol) variables. |
* - Tvar[k] is the id of the kth covariate Tvar[1]@12 {1, 2, 3, 8, 10, 11, 8, 3, 7, 8, 5, 6}, thus Tvar[5=V7*V8]=10 |
* - if k is a product Vn*Vm covar[k][i] is filled with correct values for each individual |
* which is a new column after the 9 (ncovcol) variables. |
* - Tprod[l] gives the kth covariates of the product Vn*Vm l=1 to cptcovprod-cptcovage |
* - if k is a product Vn*Vm covar[k][i] is filled with correct values for each individual |
* Tprod[1]@2 {5, 6}: position of first product V7*V8 is 5, and second V5*V6 is 6. |
* - Tprod[l] gives the kth covariates of the product Vn*Vm l=1 to cptcovprod-cptcovage |
* - Tvard[k] p Tvard[1][1]@4 {7, 8, 5, 6} for V7*V8 and V5*V6 . |
* Tprod[1]@2 {5, 6}: position of first product V7*V8 is 5, and second V5*V6 is 6. |
*/ |
* - Tvard[k] p Tvard[1][1]@4 {7, 8, 5, 6} for V7*V8 and V5*V6 . |
|
*/ |
{ |
{ |
int i, j, k, ks; |
int i, j, k, ks; |
int j1, k1, k2; |
int j1, k1, k2; |
Line 7502 int decodemodel ( char model[], int last
|
Line 7703 int decodemodel ( char model[], int last
|
if ((strpt=strstr(model,"age*age")) !=0){ |
if ((strpt=strstr(model,"age*age")) !=0){ |
printf(" strpt=%s, model=%s\n",strpt, model); |
printf(" strpt=%s, model=%s\n",strpt, model); |
if(strpt != model){ |
if(strpt != model){ |
printf("Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \ |
printf("Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \ |
'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \ |
'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \ |
corresponding column of parameters.\n",model); |
corresponding column of parameters.\n",model); |
fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \ |
fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \ |
'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \ |
'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \ |
corresponding column of parameters.\n",model); fflush(ficlog); |
corresponding column of parameters.\n",model); fflush(ficlog); |
return 1; |
return 1; |
} |
} |
|
|
nagesqr=1; |
nagesqr=1; |
if (strstr(model,"+age*age") !=0) |
if (strstr(model,"+age*age") !=0) |
substrchaine(modelsav, model, "+age*age"); |
substrchaine(modelsav, model, "+age*age"); |
Line 7523 int decodemodel ( char model[], int last
|
Line 7723 int decodemodel ( char model[], int last
|
if (strlen(modelsav) >1){ |
if (strlen(modelsav) >1){ |
j=nbocc(modelsav,'+'); /**< j=Number of '+' */ |
j=nbocc(modelsav,'+'); /**< j=Number of '+' */ |
j1=nbocc(modelsav,'*'); /**< j1=Number of '*' */ |
j1=nbocc(modelsav,'*'); /**< j1=Number of '*' */ |
cptcovs=j+1-j1; /**< Number of simple covariates V1+V1*age+V3 +V3*V4+age*age=> V1 + V3 =2 */ |
cptcovs=j+1-j1; /**< Number of simple covariates V1+V1*age+V3 +V3*V4+age*age=> V1 + V3 =5-3=2 */ |
cptcovt= j+1; /* Number of total covariates in the model, not including |
cptcovt= j+1; /* Number of total covariates in the model, not including |
* cst, age and age*age |
* cst, age and age*age |
* V1+V1*age+ V3 + V3*V4+age*age=> 4*/ |
* V1+V1*age+ V3 + V3*V4+age*age=> 3+1=4*/ |
/* including age products which are counted in cptcovage. |
/* including age products which are counted in cptcovage. |
* but the covariates which are products must be treated |
* but the covariates which are products must be treated |
* separately: ncovn=4- 2=2 (V1+V3). */ |
* separately: ncovn=4- 2=2 (V1+V3). */ |
cptcovprod=j1; /**< Number of products V1*V2 +v3*age = 2 */ |
cptcovprod=j1; /**< Number of products V1*V2 +v3*age = 2 */ |
cptcovprodnoage=0; /**< Number of covariate products without age: V3*V4 =1 */ |
cptcovprodnoage=0; /**< Number of covariate products without age: V3*V4 =1 */ |
|
|
|
|
/* Design |
/* Design |
* V1 V2 V3 V4 V5 V6 V7 V8 V9 Weight |
* V1 V2 V3 V4 V5 V6 V7 V8 V9 Weight |
* < ncovcol=8 > |
* < ncovcol=8 > |
Line 7541 int decodemodel ( char model[], int last
|
Line 7741 int decodemodel ( char model[], int last
|
* k= 1 2 3 4 5 6 7 8 |
* k= 1 2 3 4 5 6 7 8 |
* cptcovn number of covariates (not including constant and age ) = # of + plus 1 = 7+1=8 |
* cptcovn number of covariates (not including constant and age ) = # of + plus 1 = 7+1=8 |
* covar[k,i], value of kth covariate if not including age for individual i: |
* covar[k,i], value of kth covariate if not including age for individual i: |
* covar[1][i]= (V2), covar[4][i]=(V3), covar[8][i]=(V8) |
* covar[1][i]= (V1), covar[4][i]=(V4), covar[8][i]=(V8) |
* Tvar[k] # of the kth covariate: Tvar[1]=2 Tvar[4]=3 Tvar[8]=8 |
* Tvar[k] # of the kth covariate: Tvar[1]=2 Tvar[2]=1 Tvar[4]=3 Tvar[8]=8 |
* if multiplied by age: V3*age Tvar[3=V3*age]=3 (V3) Tvar[7]=8 and |
* if multiplied by age: V3*age Tvar[3=V3*age]=3 (V3) Tvar[7]=8 and |
* Tage[++cptcovage]=k |
* Tage[++cptcovage]=k |
* if products, new covar are created after ncovcol with k1 |
* if products, new covar are created after ncovcol with k1 |
Line 7567 int decodemodel ( char model[], int last
|
Line 7767 int decodemodel ( char model[], int last
|
* {2, 1, 4, 8, 5, 6, 3, 7} |
* {2, 1, 4, 8, 5, 6, 3, 7} |
* Struct [] |
* Struct [] |
*/ |
*/ |
|
|
/* This loop fills the array Tvar from the string 'model'.*/ |
/* This loop fills the array Tvar from the string 'model'.*/ |
/* j is the number of + signs in the model V1+V2+V3 j=2 i=3 to 1 */ |
/* j is the number of + signs in the model V1+V2+V3 j=2 i=3 to 1 */ |
/* modelsav=V2+V1+V4+age*V3 strb=age*V3 stra=V2+V1+V4 */ |
/* modelsav=V2+V1+V4+age*V3 strb=age*V3 stra=V2+V1+V4 */ |
Line 7582 int decodemodel ( char model[], int last
|
Line 7782 int decodemodel ( char model[], int last
|
/* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k])]]*cov[2]; */ |
/* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k])]]*cov[2]; */ |
/* |
/* |
* Treating invertedly V2+V1+V3*age+V2*V4 is as if written V2*V4 +V3*age + V1 + V2 */ |
* Treating invertedly V2+V1+V3*age+V2*V4 is as if written V2*V4 +V3*age + V1 + V2 */ |
for(k=cptcovt; k>=1;k--) /**< Number of covariates */ |
for(k=cptcovt; k>=1;k--) /**< Number of covariates not including constant and age, neither age*age*/ |
Tvar[k]=0; |
Tvar[k]=0; |
cptcovage=0; |
cptcovage=0; |
for(k=1; k<=cptcovt;k++){ /* Loop on total covariates of the model */ |
for(k=1; k<=cptcovt;k++){ /* Loop on total covariates of the model */ |
cutl(stra,strb,modelsav,'+'); /* keeps in strb after the first '+' |
cutl(stra,strb,modelsav,'+'); /* keeps in strb after the first '+' |
modelsav==V2+V1+V4+V3*age strb=V3*age stra=V2+V1+V4 */ |
modelsav==V2+V1+V4+V3*age strb=V3*age stra=V2+V1+V4 */ |
if (nbocc(modelsav,'+')==0) strcpy(strb,modelsav); /* and analyzes it */ |
if (nbocc(modelsav,'+')==0) strcpy(strb,modelsav); /* and analyzes it */ |
/* printf("i=%d a=%s b=%s sav=%s\n",i, stra,strb,modelsav);*/ |
/* printf("i=%d a=%s b=%s sav=%s\n",i, stra,strb,modelsav);*/ |
/*scanf("%d",i);*/ |
/*scanf("%d",i);*/ |
if (strchr(strb,'*')) { /**< Model includes a product V2+V1+V4+V3*age strb=V3*age */ |
if (strchr(strb,'*')) { /**< Model includes a product V2+V1+V4+V3*age strb=V3*age */ |
cutl(strc,strd,strb,'*'); /**< strd*strc Vm*Vn: strb=V3*age(input) strc=age strd=V3 ; V3*V2 strc=V2, strd=V3 */ |
cutl(strc,strd,strb,'*'); /**< strd*strc Vm*Vn: strb=V3*age(input) strc=age strd=V3 ; V3*V2 strc=V2, strd=V3 */ |
if (strcmp(strc,"age")==0) { /**< Model includes age: Vn*age */ |
if (strcmp(strc,"age")==0) { /**< Model includes age: Vn*age */ |
/* covar is not filled and then is empty */ |
/* covar is not filled and then is empty */ |
cptcovprod--; |
cptcovprod--; |
cutl(stre,strb,strd,'V'); /* strd=V3(input): stre="3" */ |
cutl(stre,strb,strd,'V'); /* strd=V3(input): stre="3" */ |
Tvar[k]=atoi(stre); /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1 */ |
Tvar[k]=atoi(stre); /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1 */ |
cptcovage++; /* Sums the number of covariates which include age as a product */ |
Typevar[k]=1; /* 2 for age product */ |
Tage[cptcovage]=k; /* Tvar[4]=3, Tage[1] = 4 or V1+V1*age Tvar[2]=1, Tage[1]=2 */ |
cptcovage++; /* Sums the number of covariates which include age as a product */ |
/*printf("stre=%s ", stre);*/ |
Tage[cptcovage]=k; /* Tvar[4]=3, Tage[1] = 4 or V1+V1*age Tvar[2]=1, Tage[1]=2 */ |
} else if (strcmp(strd,"age")==0) { /* or age*Vn */ |
/*printf("stre=%s ", stre);*/ |
cptcovprod--; |
} else if (strcmp(strd,"age")==0) { /* or age*Vn */ |
cutl(stre,strb,strc,'V'); |
cptcovprod--; |
Tvar[k]=atoi(stre); |
cutl(stre,strb,strc,'V'); |
cptcovage++; |
Tvar[k]=atoi(stre); |
Tage[cptcovage]=k; |
Typevar[k]=1; /* 1 for age product */ |
} else { /* Age is not in the model product V2+V1+V1*V4+V3*age+V3*V2 strb=V3*V2*/ |
cptcovage++; |
/* loops on k1=1 (V3*V2) and k1=2 V4*V3 */ |
Tage[cptcovage]=k; |
cptcovn++; |
} else { /* Age is not in the model product V2+V1+V1*V4+V3*age+V3*V2 strb=V3*V2*/ |
cptcovprodnoage++;k1++; |
/* loops on k1=1 (V3*V2) and k1=2 V4*V3 */ |
cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/ |
cptcovn++; |
Tvar[k]=ncovcol+k1; /* For model-covariate k tells which data-covariate to use but |
cptcovprodnoage++;k1++; |
because this model-covariate is a construction we invent a new column |
cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/ |
ncovcol + k1 |
Tvar[k]=ncovcol+nqv+ntv+nqtv+k1; /* For model-covariate k tells which data-covariate to use but |
If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2 |
because this model-covariate is a construction we invent a new column |
Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */ |
which is after existing variables ncovcol+nqv+ntv+nqtv + k1 |
cutl(strc,strb,strd,'V'); /* strd was Vm, strc is m */ |
If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2 |
Tprod[k1]=k; /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2 */ |
Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */ |
Tvard[k1][1] =atoi(strc); /* m 1 for V1*/ |
Typevar[k]=2; /* 2 for double fixed dummy covariates */ |
Tvard[k1][2] =atoi(stre); /* n 4 for V4*/ |
cutl(strc,strb,strd,'V'); /* strd was Vm, strc is m */ |
k2=k2+2; |
Tprod[k1]=k; /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2 */ |
Tvar[cptcovt+k2]=Tvard[k1][1]; /* Tvar[(cptcovt=4+k2=1)=5]= 1 (V1) */ |
Tvard[k1][1] =atoi(strc); /* m 1 for V1*/ |
Tvar[cptcovt+k2+1]=Tvard[k1][2]; /* Tvar[(cptcovt=4+(k2=1)+1)=6]= 4 (V4) */ |
Tvard[k1][2] =atoi(stre); /* n 4 for V4*/ |
for (i=1; i<=lastobs;i++){ |
k2=k2+2; /* k2 is initialize to -1, We want to store the n and m in Vn*Vm at the end of Tvar */ |
/* Computes the new covariate which is a product of |
/* Tvar[cptcovt+k2]=Tvard[k1][1]; /\* Tvar[(cptcovt=4+k2=1)=5]= 1 (V1) *\/ */ |
covar[n][i]* covar[m][i] and stores it at ncovol+k1 May not be defined */ |
/* Tvar[cptcovt+k2+1]=Tvard[k1][2]; /\* Tvar[(cptcovt=4+(k2=1)+1)=6]= 4 (V4) *\/ */ |
covar[ncovcol+k1][i]=covar[atoi(stre)][i]*covar[atoi(strc)][i]; |
/*ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2, Tvar[3]=5, Tvar[4]=6, cptcovt=5 */ |
} |
/* 1 2 3 4 5 | Tvar[5+1)=1, Tvar[7]=2 */ |
} /* End age is not in the model */ |
for (i=1; i<=lastobs;i++){ |
} /* End if model includes a product */ |
/* Computes the new covariate which is a product of |
else { /* no more sum */ |
covar[n][i]* covar[m][i] and stores it at ncovol+k1 May not be defined */ |
/*printf("d=%s c=%s b=%s\n", strd,strc,strb);*/ |
covar[ncovcol+k1][i]=covar[atoi(stre)][i]*covar[atoi(strc)][i]; |
/* scanf("%d",i);*/ |
} |
cutl(strd,strc,strb,'V'); |
} /* End age is not in the model */ |
ks++; /**< Number of simple covariates */ |
} /* End if model includes a product */ |
cptcovn++; |
else { /* no more sum */ |
Tvar[k]=atoi(strd); |
/*printf("d=%s c=%s b=%s\n", strd,strc,strb);*/ |
} |
/* scanf("%d",i);*/ |
strcpy(modelsav,stra); /* modelsav=V2+V1+V4 stra=V2+V1+V4 */ |
cutl(strd,strc,strb,'V'); |
|
ks++; /**< Number of simple covariates*/ |
|
cptcovn++; /** V4+V3+V5: V4 and V3 timevarying dummy covariates, V5 timevarying quantitative */ |
|
Tvar[k]=atoi(strd); |
|
Typevar[k]=0; /* 0 for simple covariates */ |
|
} |
|
strcpy(modelsav,stra); /* modelsav=V2+V1+V4 stra=V2+V1+V4 */ |
/*printf("a=%s b=%s sav=%s\n", stra,strb,modelsav); |
/*printf("a=%s b=%s sav=%s\n", stra,strb,modelsav); |
scanf("%d",i);*/ |
scanf("%d",i);*/ |
} /* end of loop + on total covariates */ |
} /* end of loop + on total covariates */ |
} /* end if strlen(modelsave == 0) age*age might exist */ |
} /* end if strlen(modelsave == 0) age*age might exist */ |
} /* end if strlen(model == 0) */ |
} /* end if strlen(model == 0) */ |
|
|
/*The number n of Vn is stored in Tvar. cptcovage =number of age covariate. Tage gives the position of age. cptcovprod= number of products. |
/*The number n of Vn is stored in Tvar. cptcovage =number of age covariate. Tage gives the position of age. cptcovprod= number of products. |
If model=V1+V1*age then Tvar[1]=1 Tvar[2]=1 cptcovage=1 Tage[1]=2 cptcovprod=0*/ |
If model=V1+V1*age then Tvar[1]=1 Tvar[2]=1 cptcovage=1 Tage[1]=2 cptcovprod=0*/ |
|
|
/* printf("tvar1=%d tvar2=%d tvar3=%d cptcovage=%d Tage=%d",Tvar[1],Tvar[2],Tvar[3],cptcovage,Tage[1]); |
/* printf("tvar1=%d tvar2=%d tvar3=%d cptcovage=%d Tage=%d",Tvar[1],Tvar[2],Tvar[3],cptcovage,Tage[1]); |
printf("cptcovprod=%d ", cptcovprod); |
printf("cptcovprod=%d ", cptcovprod); |
fprintf(ficlog,"cptcovprod=%d ", cptcovprod); |
fprintf(ficlog,"cptcovprod=%d ", cptcovprod); |
|
scanf("%d ",i);*/ |
scanf("%d ",i);*/ |
|
|
|
|
/* Decodemodel knows only the grammar (simple, product, age*) of the model but not what kind |
|
of variable (dummy vs quantitative, fixed vs time varying) is behind */ |
|
/* ncovcol= 1, nqv=1, ntv=2, nqtv= 1 = 5 possible variables data |
|
model= V2 + V4 +V3 + V4*V3 + V5*age + V5 , V1 is not used saving its place |
|
k = 1 2 3 4 5 6 |
|
Tvar[k]= 2 4 3 1+1+2+1+1=6 5 5 |
|
Typevar[k]=0 0 0 2 1 0 |
|
*/ |
|
/* Dispatching between quantitative and time varying covariates */ |
|
/* Tvar[k] is the value n of Vn with n varying for 1 to nvcol, or p Vp=Vn*Vm for product */ |
|
for(k=1, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */ |
|
if (Tvar[k] <=ncovcol){ /* Simple fixed dummy covariatee */ |
|
ncoveff++; |
|
}else if( Tvar[k] <=ncovcol+nqv && Typevar[k]==0){ /* Remind that product Vn*Vm are added in k*/ |
|
nqfveff++; /* Only simple fixed quantitative variable */ |
|
}else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){ |
|
ntveff++; /* Only simple time varying dummy variable */ |
|
}else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv && Typevar[k]==0){ |
|
nqtveff++;/* Only simple time varying quantitative variable */ |
|
}else{ |
|
printf("Other types in effective covariates \n"); |
|
} |
|
} |
|
|
|
printf("ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn); |
|
fprintf(ficlog,"ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn); |
return (0); /* with covar[new additional covariate if product] and Tage if age */ |
return (0); /* with covar[new additional covariate if product] and Tage if age */ |
/*endread:*/ |
/*endread:*/ |
printf("Exiting decodemodel: "); |
printf("Exiting decodemodel: "); |
return (1); |
return (1); |
} |
} |
|
|
int calandcheckages(int imx, int maxwav, double *agemin, double *agemax, int *nberr, int *nbwarn ) |
int calandcheckages(int imx, int maxwav, double *agemin, double *agemax, int *nberr, int *nbwarn ) |
Line 7994 int prevalence_limit(double *p, double *
|
Line 8225 int prevalence_limit(double *p, double *
|
agebase=ageminpar; |
agebase=ageminpar; |
agelim=agemaxpar; |
agelim=agemaxpar; |
|
|
i1=pow(2,cptcoveff); |
i1=pow(2,ncoveff); |
if (cptcovn < 1){i1=1;} |
if (cptcovn < 1){i1=1;} |
|
|
for(k=1; k<=i1;k++){ |
for(k=1; k<=i1;k++){ |
Line 8007 int prevalence_limit(double *p, double *
|
Line 8238 int prevalence_limit(double *p, double *
|
fprintf(ficrespl,"#******"); |
fprintf(ficrespl,"#******"); |
printf("#******"); |
printf("#******"); |
fprintf(ficlog,"#******"); |
fprintf(ficlog,"#******"); |
for(j=1;j<=cptcoveff;j++) { |
for(j=1;j<=nqfveff;j++) { |
fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
Line 8023 int prevalence_limit(double *p, double *
|
Line 8254 int prevalence_limit(double *p, double *
|
} |
} |
|
|
fprintf(ficrespl,"#Age "); |
fprintf(ficrespl,"#Age "); |
for(j=1;j<=cptcoveff;j++) { |
for(j=1;j<=nqfveff;j++) { |
fprintf(ficrespl,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficrespl,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
} |
} |
for(i=1; i<=nlstate;i++) fprintf(ficrespl," %d-%d ",i,i); |
for(i=1; i<=nlstate;i++) fprintf(ficrespl," %d-%d ",i,i); |
Line 8033 int prevalence_limit(double *p, double *
|
Line 8264 int prevalence_limit(double *p, double *
|
/* for (age=agebase; age<=agebase; age++){ */ |
/* for (age=agebase; age<=agebase; age++){ */ |
prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k); |
prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k); |
fprintf(ficrespl,"%.0f ",age ); |
fprintf(ficrespl,"%.0f ",age ); |
for(j=1;j<=cptcoveff;j++) |
for(j=1;j<=nqfveff;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.; |
tot=0.; |
for(i=1; i<=nlstate;i++){ |
for(i=1; i<=nlstate;i++){ |
Line 8081 int back_prevalence_limit(double *p, dou
|
Line 8312 int back_prevalence_limit(double *p, dou
|
agelim=agemaxpar; |
agelim=agemaxpar; |
|
|
|
|
i1=pow(2,cptcoveff); |
i1=pow(2,nqfveff); |
if (cptcovn < 1){i1=1;} |
if (cptcovn < 1){i1=1;} |
|
|
for(k=1; k<=i1;k++){ |
for(k=1; k<=i1;k++){ |
Line 8094 int back_prevalence_limit(double *p, dou
|
Line 8325 int back_prevalence_limit(double *p, dou
|
fprintf(ficresplb,"#******"); |
fprintf(ficresplb,"#******"); |
printf("#******"); |
printf("#******"); |
fprintf(ficlog,"#******"); |
fprintf(ficlog,"#******"); |
for(j=1;j<=cptcoveff;j++) { |
for(j=1;j<=nqfveff;j++) { |
fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
Line 8110 int back_prevalence_limit(double *p, dou
|
Line 8341 int back_prevalence_limit(double *p, dou
|
} |
} |
|
|
fprintf(ficresplb,"#Age "); |
fprintf(ficresplb,"#Age "); |
for(j=1;j<=cptcoveff;j++) { |
for(j=1;j<=nqfveff;j++) { |
fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
} |
} |
for(i=1; i<=nlstate;i++) fprintf(ficresplb," %d-%d ",i,i); |
for(i=1; i<=nlstate;i++) fprintf(ficresplb," %d-%d ",i,i); |
Line 8132 int back_prevalence_limit(double *p, dou
|
Line 8363 int back_prevalence_limit(double *p, dou
|
bprevalim(bprlim, probs, nlstate, p, age, ftolpl, ncvyearp, k); |
bprevalim(bprlim, probs, nlstate, p, age, ftolpl, ncvyearp, k); |
} |
} |
fprintf(ficresplb,"%.0f ",age ); |
fprintf(ficresplb,"%.0f ",age ); |
for(j=1;j<=cptcoveff;j++) |
for(j=1;j<=nqfveff;j++) |
fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
tot=0.; |
tot=0.; |
for(i=1; i<=nlstate;i++){ |
for(i=1; i<=nlstate;i++){ |
Line 8180 int hPijx(double *p, int bage, int fage)
|
Line 8411 int hPijx(double *p, int bage, int fage)
|
/* hstepm=1; aff par mois*/ |
/* hstepm=1; aff par mois*/ |
pstamp(ficrespij); |
pstamp(ficrespij); |
fprintf(ficrespij,"#****** h Pij x Probability to be in state j at age x+h being in i at x "); |
fprintf(ficrespij,"#****** h Pij x Probability to be in state j at age x+h being in i at x "); |
i1= pow(2,cptcoveff); |
i1= pow(2,nqfveff); |
/* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ |
/* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ |
/* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ |
/* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ |
/* k=k+1; */ |
/* k=k+1; */ |
for (k=1; k <= (int) pow(2,cptcoveff); k++){ |
for (k=1; k <= (int) pow(2,nqfveff); k++){ |
fprintf(ficrespij,"\n#****** "); |
fprintf(ficrespij,"\n#****** "); |
for(j=1;j<=cptcoveff;j++) |
for(j=1;j<=nqfveff;j++) |
fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficrespij,"******\n"); |
fprintf(ficrespij,"******\n"); |
|
|
Line 8252 int hPijx(double *p, int bage, int fage)
|
Line 8483 int hPijx(double *p, int bage, int fage)
|
/* hstepm=1; aff par mois*/ |
/* hstepm=1; aff par mois*/ |
pstamp(ficrespijb); |
pstamp(ficrespijb); |
fprintf(ficrespijb,"#****** h Pij x Back Probability to be in state i at age x-h being in j at x "); |
fprintf(ficrespijb,"#****** h Pij x Back Probability to be in state i at age x-h being in j at x "); |
i1= pow(2,cptcoveff); |
i1= pow(2,nqfveff); |
/* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ |
/* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */ |
/* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ |
/* /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */ |
/* k=k+1; */ |
/* k=k+1; */ |
for (k=1; k <= (int) pow(2,cptcoveff); k++){ |
for (k=1; k <= (int) pow(2,nqfveff); k++){ |
fprintf(ficrespijb,"\n#****** "); |
fprintf(ficrespijb,"\n#****** "); |
for(j=1;j<=cptcoveff;j++) |
for(j=1;j<=nqfveff;j++) |
fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); |
fprintf(ficrespijb,"******\n"); |
fprintf(ficrespijb,"******\n"); |
if(invalidvarcomb[k]){ |
if(invalidvarcomb[k]){ |
Line 8653 int main(int argc, char *argv[])
|
Line 8884 int main(int argc, char *argv[])
|
|
|
|
|
covar=matrix(0,NCOVMAX,1,n); /**< used in readdata */ |
covar=matrix(0,NCOVMAX,1,n); /**< used in readdata */ |
coqvar=matrix(1,nqv,1,n); /**< used in readdata */ |
coqvar=matrix(1,nqv,1,n); /**< Fixed quantitative covariate */ |
cotvar=ma3x(1,maxwav,1,ntv,1,n); /**< used in readdata */ |
cotvar=ma3x(1,maxwav,1,ntv,1,n); /**< Time varying covariate */ |
cotqvar=ma3x(1,maxwav,1,ntqv,1,n); /**< used in readdata */ |
cotqvar=ma3x(1,maxwav,1,nqtv,1,n); /**< Time varying quantitative covariate */ |
cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/ |
cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/ |
/* v1+v2+v3+v2*v4+v5*age makes cptcovn = 5 |
/* v1+v2+v3+v2*v4+v5*age makes cptcovn = 5 |
v1+v2*age+v2*v3 makes cptcovn = 3 |
v1+v2*age+v2*v3 makes cptcovn = 3 |
Line 8898 Please run with mle=-1 to get a correct
|
Line 9129 Please run with mle=-1 to get a correct
|
k=1 Tvar[1]=2 (from V2) |
k=1 Tvar[1]=2 (from V2) |
*/ |
*/ |
Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */ |
Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */ |
|
Typevar=ivector(1,NCOVMAX); /* -1 to 4 */ |
/* V2+V1+V4+age*V3 is a model with 4 covariates (3 plus signs). |
/* V2+V1+V4+age*V3 is a model with 4 covariates (3 plus signs). |
For each model-covariate stores the data-covariate id. Tvar[1]=2, Tvar[2]=1, Tvar[3]=4, |
For each model-covariate stores the data-covariate id. Tvar[1]=2, Tvar[2]=1, Tvar[3]=4, |
Tvar[4=age*V3] is 3 and 'age' is recorded in Tage. |
Tvar[4=age*V3] is 3 and 'age' is recorded in Tage. |
Line 8978 Please run with mle=-1 to get a correct
|
Line 9210 Please run with mle=-1 to get a correct
|
nbcode=imatrix(0,NCOVMAX,0,NCOVMAX); |
nbcode=imatrix(0,NCOVMAX,0,NCOVMAX); |
ncodemax[1]=1; |
ncodemax[1]=1; |
Ndum =ivector(-1,NCOVMAX); |
Ndum =ivector(-1,NCOVMAX); |
cptcoveff=0; |
cptcoveff=0; |
if (ncovmodel-nagesqr > 2 ){ /* That is if covariate other than cst, age and age*age */ |
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]; */ |
tricode(&cptcoveff,Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */ |
} |
} |
Line 9425 Please run with mle=-1 to get a correct
|
Line 9657 Please run with mle=-1 to get a correct
|
printf("\n"); |
printf("\n"); |
|
|
/*--------- results files --------------*/ |
/*--------- results files --------------*/ |
fprintf(ficres,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle= 0 weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncovcol, nlstate, ndeath, maxwav, weightopt,model); |
fprintf(ficres,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nqv=%d ntv=%d nqtv=%d nlstate=%d ndeath=%d maxwav=%d mle= 0 weight=%d\nmodel=1+age+%s.\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncovcol, nqv, ntv, nqtv, nlstate, ndeath, maxwav, weightopt,model); |
|
|
|
|
fprintf(ficres,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n"); |
fprintf(ficres,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n"); |
Line 9433 Please run with mle=-1 to get a correct
|
Line 9665 Please run with mle=-1 to get a correct
|
fprintf(ficlog,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n"); |
fprintf(ficlog,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n"); |
for(i=1,jk=1; i <=nlstate; i++){ |
for(i=1,jk=1; i <=nlstate; i++){ |
for(k=1; k <=(nlstate+ndeath); k++){ |
for(k=1; k <=(nlstate+ndeath); k++){ |
if (k != i) { |
if (k != i) { |
printf("%d%d ",i,k); |
printf("%d%d ",i,k); |
fprintf(ficlog,"%d%d ",i,k); |
fprintf(ficlog,"%d%d ",i,k); |
fprintf(ficres,"%1d%1d ",i,k); |
fprintf(ficres,"%1d%1d ",i,k); |
for(j=1; j <=ncovmodel; j++){ |
for(j=1; j <=ncovmodel; j++){ |
printf("%12.7f ",p[jk]); |
printf("%12.7f ",p[jk]); |
fprintf(ficlog,"%12.7f ",p[jk]); |
fprintf(ficlog,"%12.7f ",p[jk]); |
fprintf(ficres,"%12.7f ",p[jk]); |
fprintf(ficres,"%12.7f ",p[jk]); |
jk++; |
jk++; |
} |
} |
printf("\n"); |
printf("\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficres,"\n"); |
fprintf(ficres,"\n"); |
} |
} |
} |
} |
} |
} |
if(mle != 0){ |
if(mle != 0){ |
Line 9456 Please run with mle=-1 to get a correct
|
Line 9688 Please run with mle=-1 to get a correct
|
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"); |
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"); |
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(i=1,jk=1; i <=nlstate; i++){ |
for(k=1; k <=(nlstate+ndeath); k++){ |
for(k=1; k <=(nlstate+ndeath); k++){ |
if (k != i) { |
if (k != i) { |
printf("%d%d ",i,k); |
printf("%d%d ",i,k); |
fprintf(ficlog,"%d%d ",i,k); |
fprintf(ficlog,"%d%d ",i,k); |
for(j=1; j <=ncovmodel; j++){ |
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])); |
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])); |
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++; |
jk++; |
} |
} |
printf("\n"); |
printf("\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficlog,"\n"); |
} |
} |
} |
} |
} |
} |
} /* end of hesscov and Wald tests */ |
} /* end of hesscov and Wald tests */ |
|
|
/* */ |
/* */ |
fprintf(ficres,"# Scales (for hessian or gradient estimation)\n"); |
fprintf(ficres,"# Scales (for hessian or gradient estimation)\n"); |
printf("# Scales (for hessian or gradient estimation)\n"); |
printf("# Scales (for hessian or gradient estimation)\n"); |
fprintf(ficlog,"# 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(i=1,jk=1; i <=nlstate; i++){ |
for(j=1; j <=nlstate+ndeath; j++){ |
for(j=1; j <=nlstate+ndeath; j++){ |
if (j!=i) { |
if (j!=i) { |
fprintf(ficres,"%1d%1d",i,j); |
fprintf(ficres,"%1d%1d",i,j); |
printf("%1d%1d",i,j); |
printf("%1d%1d",i,j); |
fprintf(ficlog,"%1d%1d",i,j); |
fprintf(ficlog,"%1d%1d",i,j); |
for(k=1; k<=ncovmodel;k++){ |
for(k=1; k<=ncovmodel;k++){ |
printf(" %.5e",delti[jk]); |
printf(" %.5e",delti[jk]); |
fprintf(ficlog," %.5e",delti[jk]); |
fprintf(ficlog," %.5e",delti[jk]); |
fprintf(ficres," %.5e",delti[jk]); |
fprintf(ficres," %.5e",delti[jk]); |
jk++; |
jk++; |
} |
} |
printf("\n"); |
printf("\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficres,"\n"); |
fprintf(ficres,"\n"); |
} |
} |
} |
} |
} |
} |
|
|
Line 9515 Please run with mle=-1 to get a correct
|
Line 9747 Please run with mle=-1 to get a correct
|
for(itimes=1;itimes<=2;itimes++){ |
for(itimes=1;itimes<=2;itimes++){ |
jj=0; |
jj=0; |
for(i=1; i <=nlstate; i++){ |
for(i=1; i <=nlstate; i++){ |
for(j=1; j <=nlstate+ndeath; j++){ |
for(j=1; j <=nlstate+ndeath; j++){ |
if(j==i) continue; |
if(j==i) continue; |
for(k=1; k<=ncovmodel;k++){ |
for(k=1; k<=ncovmodel;k++){ |
jj++; |
jj++; |
ca[0]= k+'a'-1;ca[1]='\0'; |
ca[0]= k+'a'-1;ca[1]='\0'; |
if(itimes==1){ |
if(itimes==1){ |
if(mle>=1) |
if(mle>=1) |
printf("#%1d%1d%d",i,j,k); |
printf("#%1d%1d%d",i,j,k); |
fprintf(ficlog,"#%1d%1d%d",i,j,k); |
fprintf(ficlog,"#%1d%1d%d",i,j,k); |
fprintf(ficres,"#%1d%1d%d",i,j,k); |
fprintf(ficres,"#%1d%1d%d",i,j,k); |
}else{ |
}else{ |
if(mle>=1) |
if(mle>=1) |
printf("%1d%1d%d",i,j,k); |
printf("%1d%1d%d",i,j,k); |
fprintf(ficlog,"%1d%1d%d",i,j,k); |
fprintf(ficlog,"%1d%1d%d",i,j,k); |
fprintf(ficres,"%1d%1d%d",i,j,k); |
fprintf(ficres,"%1d%1d%d",i,j,k); |
} |
} |
ll=0; |
ll=0; |
for(li=1;li <=nlstate; li++){ |
for(li=1;li <=nlstate; li++){ |
for(lj=1;lj <=nlstate+ndeath; lj++){ |
for(lj=1;lj <=nlstate+ndeath; lj++){ |
if(lj==li) continue; |
if(lj==li) continue; |
for(lk=1;lk<=ncovmodel;lk++){ |
for(lk=1;lk<=ncovmodel;lk++){ |
ll++; |
ll++; |
if(ll<=jj){ |
if(ll<=jj){ |
cb[0]= lk +'a'-1;cb[1]='\0'; |
cb[0]= lk +'a'-1;cb[1]='\0'; |
if(ll<jj){ |
if(ll<jj){ |
if(itimes==1){ |
if(itimes==1){ |
if(mle>=1) |
if(mle>=1) |
printf(" Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj); |
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(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); |
fprintf(ficres," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj); |
}else{ |
}else{ |
if(mle>=1) |
if(mle>=1) |
printf(" %.5e",matcov[jj][ll]); |
printf(" %.5e",matcov[jj][ll]); |
fprintf(ficlog," %.5e",matcov[jj][ll]); |
fprintf(ficlog," %.5e",matcov[jj][ll]); |
fprintf(ficres," %.5e",matcov[jj][ll]); |
fprintf(ficres," %.5e",matcov[jj][ll]); |
} |
} |
}else{ |
}else{ |
if(itimes==1){ |
if(itimes==1){ |
if(mle>=1) |
if(mle>=1) |
printf(" Var(%s%1d%1d)",ca,i,j); |
printf(" Var(%s%1d%1d)",ca,i,j); |
fprintf(ficlog," 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); |
fprintf(ficres," Var(%s%1d%1d)",ca,i,j); |
}else{ |
}else{ |
if(mle>=1) |
if(mle>=1) |
printf(" %.7e",matcov[jj][ll]); |
printf(" %.7e",matcov[jj][ll]); |
fprintf(ficlog," %.7e",matcov[jj][ll]); |
fprintf(ficlog," %.7e",matcov[jj][ll]); |
fprintf(ficres," %.7e",matcov[jj][ll]); |
fprintf(ficres," %.7e",matcov[jj][ll]); |
} |
} |
} |
} |
} |
} |
} /* end lk */ |
} /* end lk */ |
} /* end lj */ |
} /* end lj */ |
} /* end li */ |
} /* end li */ |
if(mle>=1) |
if(mle>=1) |
printf("\n"); |
printf("\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficlog,"\n"); |
fprintf(ficres,"\n"); |
fprintf(ficres,"\n"); |
numlinepar++; |
numlinepar++; |
} /* end k*/ |
} /* end k*/ |
} /*end j */ |
} /*end j */ |
} /* end i */ |
} /* end i */ |
} /* end itimes */ |
} /* end itimes */ |
|
|
fflush(ficlog); |
fflush(ficlog); |
fflush(ficres); |
fflush(ficres); |
while(fgets(line, MAXLINE, ficpar)) { |
while(fgets(line, MAXLINE, ficpar)) { |
/* If line starts with a # it is a comment */ |
/* If line starts with a # it is a comment */ |
if (line[0] == '#') { |
if (line[0] == '#') { |
numlinepar++; |
numlinepar++; |
fputs(line,stdout); |
fputs(line,stdout); |
fputs(line,ficparo); |
fputs(line,ficparo); |
fputs(line,ficlog); |
fputs(line,ficlog); |
continue; |
continue; |
}else |
}else |
break; |
break; |
} |
} |
|
|
/* while((c=getc(ficpar))=='#' && c!= EOF){ */ |
/* while((c=getc(ficpar))=='#' && c!= EOF){ */ |
/* ungetc(c,ficpar); */ |
/* ungetc(c,ficpar); */ |
/* fgets(line, MAXLINE, ficpar); */ |
/* fgets(line, MAXLINE, ficpar); */ |
Line 9602 Please run with mle=-1 to get a correct
|
Line 9834 Please run with mle=-1 to get a correct
|
|
|
estepm=0; |
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=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) { |
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); |
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); |
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; |
goto end; |
} |
} |
printf("agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",ageminpar,agemaxpar, bage, fage, estepm, ftolpl); |
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*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 */ |
/*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); */ |
/* 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 (estepm==0 || estepm < stepm) estepm=stepm; |
if (fage <= 2) { |
if (fage <= 2) { |
Line 9701 Please run with mle=-1 to get a correct
|
Line 9933 Please run with mle=-1 to get a correct
|
printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p); |
printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p); |
} |
} |
printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt, \ |
printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt, \ |
model,imx,jmin,jmax,jmean,rfileres,popforecast,prevfcast,backcast, estepm, \ |
model,imx,jmin,jmax,jmean,rfileres,popforecast,prevfcast,backcast, estepm, \ |
jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2); |
jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2); |
|
|
/*------------ free_vector -------------*/ |
/*------------ free_vector -------------*/ |
/* chdir(path); */ |
/* chdir(path); */ |
|
|
/* free_ivector(wav,1,imx); */ /* Moved after last prevalence call */ |
/* free_ivector(wav,1,imx); */ /* Moved after last prevalence call */ |
/* free_imatrix(dh,1,lastpass-firstpass+2,1,imx); */ |
/* free_imatrix(dh,1,lastpass-firstpass+2,1,imx); */ |
Line 9742 Please run with mle=-1 to get a correct
|
Line 9974 Please run with mle=-1 to get a correct
|
probs= ma3x(1,AGESUP,1,nlstate+ndeath, 1,ncovcombmax); |
probs= ma3x(1,AGESUP,1,nlstate+ndeath, 1,ncovcombmax); |
for(i=1;i<=AGESUP;i++) |
for(i=1;i<=AGESUP;i++) |
for(j=1;j<=nlstate+ndeath;j++) /* ndeath is useless but a necessity to be compared with mobaverages */ |
for(j=1;j<=nlstate+ndeath;j++) /* ndeath is useless but a necessity to be compared with mobaverages */ |
for(k=1;k<=ncovcombmax;k++) |
for(k=1;k<=ncovcombmax;k++) |
probs[i][j][k]=0.; |
probs[i][j][k]=0.; |
prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); |
prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); |
if (mobilav!=0 ||mobilavproj !=0 ) { |
if (mobilav!=0 ||mobilavproj !=0 ) { |
mobaverages= ma3x(1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax); |
mobaverages= ma3x(1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax); |
Line 10030 Please run with mle=-1 to get a correct
|
Line 10262 Please run with mle=-1 to get a correct
|
free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath); |
free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath); |
free_matrix(newms, 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_matrix(savms, 1,nlstate+ndeath,1,nlstate+ndeath); |
free_ma3x(cotqvar,1,maxwav,1,ntqv,1,n); |
free_ma3x(cotqvar,1,maxwav,1,nqtv,1,n); |
free_ma3x(cotvar,1,maxwav,1,ntv,1,n); |
free_ma3x(cotvar,1,maxwav,1,ntv,1,n); |
free_matrix(coqvar,1,maxwav,1,n); |
free_matrix(coqvar,1,maxwav,1,n); |
free_matrix(covar,0,NCOVMAX,1,n); |
free_matrix(covar,0,NCOVMAX,1,n); |
Line 10043 Please run with mle=-1 to get a correct
|
Line 10275 Please run with mle=-1 to get a correct
|
|
|
free_ivector(ncodemax,1,NCOVMAX); |
free_ivector(ncodemax,1,NCOVMAX); |
free_ivector(ncodemaxwundef,1,NCOVMAX); |
free_ivector(ncodemaxwundef,1,NCOVMAX); |
|
free_ivector(Typevar,-1,NCOVMAX); |
free_ivector(Tvar,1,NCOVMAX); |
free_ivector(Tvar,1,NCOVMAX); |
free_ivector(Tprod,1,NCOVMAX); |
free_ivector(Tprod,1,NCOVMAX); |
free_ivector(Tvaraff,1,NCOVMAX); |
free_ivector(Tvaraff,1,NCOVMAX); |