28 if(!(ss>=0.0) || n<1 || k<0 || (n-k)<2)
return(nan(
""));
30 double aic=0.0, bias_adj, css;
33 dr=n-k-1; dv=2*k*(k+1);
34 if(dr>0) bias_adj=((double)dv)/((
double)dr);
else bias_adj=0.0;
35 if(ss<1.0e-50) css=1.0e-50;
else css=ss;
36 if(n>0) aic= n*log(css/(
double)n) + 2.0*(double)k + bias_adj;
58 if(n<1 || pLower==NULL || pUpper==NULL)
return(0);
60 for(
int i=0; i<n; i++) {
61 double range=pUpper[i]-pLower[i];
62 if(range>1.0E-10) nf++;
86 if(n<1 || aic==NULL || w==NULL)
return(1);
87 if(n==1) {w[0]=1.0;
return(0);}
89 mini=0;
for(i=1; i<n; i++)
if(aic[i]<aic[mini]) mini=i;
92 for(i=0, sume=0.0; i<n; i++) {
93 w[i]=exp(-0.5*(aic[i]-minaic));
96 if(sume==0.0)
return(2);
97 for(i=0; i<n; i++) w[i]/=sume;
120 if(n<1 || w==NULL || p==NULL)
return(1);
121 for(i=0, avg=0.0; i<n; i++) avg+=w[i]*p[i];
141 if(n<1 || w==NULL) avg=0.0;
142 else for(i=0, avg=0.0; i<n; i++) avg+=w[i]*(
double)(i+1);
double aicWeightedAvg(double *w, double *p, int n)
int aicWeights(double *aic, double *w, int n)
int parFreeNr(const int n, double *pLower, double *pUpper)
Calculate the number of free parameters.
double aicModel(double *w, int n)
double aicSS(double ss, const int n, const int k)
Header file for libtpcmodel.