一世G
- 摹Ť一世G
这为您提供了该因变量的估计方差。取平方根以获得估计的标准偏差。那么置信限为预测值+-两个标准偏差。这是标准可能性的东西。对于非线性回归的特殊情况,您可以校正自由度。您有10个观测值和4个参数,因此可以通过乘以10/6来增加模型中方差的估计。几个软件包将为您完成此任务。我在AD模型构建器的AD模型中编写了您的模型,并将其拟合并计算了(未修改的)方差。它们将与您的稍有不同,因为我不得不猜测一些值。
estimate std dev
10 pred_E -4.8495e+01 7.5100e-03
11 pred_E -4.8810e+01 7.9983e-03
12 pred_E -4.9028e+01 7.5675e-03
13 pred_E -4.9224e+01 6.4801e-03
14 pred_E -4.9303e+01 6.8034e-03
15 pred_E -4.9328e+01 7.1726e-03
16 pred_E -4.9329e+01 7.0249e-03
17 pred_E -4.9297e+01 7.1977e-03
18 pred_E -4.9252e+01 1.1615e-02
可以对AD Model Builder中的任何因变量执行此操作。这样在代码的适当位置声明一个变量
sdreport_number dep
并像这样编写代码以评估因变量
dep=sqrt(V0-cube(Bp0)/(1+2*max(V)));
请注意,此值是针对自变量的值进行评估的,该值是模型拟合中观察到的最大值的2倍。拟合模型并获得该因变量的标准偏差
19 dep 7.2535e+00 1.0980e-01
我修改了程序,以包含用于计算焓-体积函数的置信度极限的代码。代码(TPL)文件如下所示
DATA_SECTION
init_int nobs
init_matrix data(1,nobs,1,2)
vector E
vector V
number Vmean
LOC_CALCS
E=column(data,2);
V=column(data,1);
Vmean=mean(V);
PARAMETER_SECTION
init_number E0
init_number log_V0_coff(2)
init_number log_B0(3)
init_number log_Bp0(3)
init_bounded_number a(.9,1.1)
sdreport_number V0
sdreport_number B0
sdreport_number Bp0
sdreport_vector pred_E(1,nobs)
sdreport_vector P(1,nobs)
sdreport_vector H(1,nobs)
sdreport_number dep
objective_function_value f
PROCEDURE_SECTION
V0=exp(log_V0_coff)*Vmean;
B0=exp(log_B0);
Bp0=exp(log_Bp0);
if (current_phase()<4)
f+=square(log_V0_coff) +square(log_B0);
dvar_vector sv=pow(V0/V,0.66666667);
pred_E=E0 + 9*V0*B0*(cube(sv-1.0)*Bp0
+ elem_prod(square(sv-1.0),(6-4*sv)));
dvar_vector r2=square(E-pred_E);
dvariable vhat=sum(r2)/nobs;
dvariable v=a*vhat;
f=0.5*nobs*log(v)+sum(r2)/(2.0*v);
// code to calculate the enthalpy-volume function
double delta=1.e-4;
dvar_vector svp=pow(V0/(V+delta),0.66666667);
dvar_vector svm=pow(V0/(V-delta),0.66666667);
P = -((9*V0*B0*(cube(svp-1.0)*Bp0
+ elem_prod(square(svp-1.0),(6-4*svp))))
-(9*V0*B0*(cube(svm-1.0)*Bp0
+ elem_prod(square(svm-1.0),(6-4*svm)))))/(2.0*delta);
H=E+elem_prod(P,V);
dep=sqrt(V0-cube(Bp0)/(1+2*max(V)));
然后,我对模型进行了调整,以获取H估计值的标准开发者。
29 H -3.9550e+01 5.9163e-01
30 H -4.1554e+01 2.8707e-01
31 H -4.3844e+01 1.2333e-01
32 H -4.5212e+01 1.5011e-01
33 H -4.6859e+01 1.5434e-01
34 H -4.7813e+01 1.2679e-01
35 H -4.8808e+01 1.1036e-01
36 H -4.9626e+01 1.8374e-01
37 H -5.0186e+01 2.8421e-01
38 H -5.0806e+01 4.3179e-01
这些是针对您观察到的V值计算的,但可以针对任何V值轻松计算。
已经指出,这实际上是一个线性模型,对于该模型,有简单的R代码可以通过OLS执行参数估计。这对初学者尤其有吸引力。但是,自从Huber从事三十多年的工作以来,我们知道或应该知道,人们应该几乎总是应该用中等强度的替代产品来代替OLS。我认为这不是常规执行的原因是健壮的方法本质上是非线性的。从这个角度来看,R中简单易用的OLS方法更像是陷阱而不是功能。AD Model Builder方法的优势在于其对非线性建模的支持。要将最小二乘码更改为鲁棒的普通混合码,只需更改一行代码。线
f=0.5*nobs*log(v)+sum(r2)/(2.0*v);
更改为
f=0.5*nobs*log(v)
-sum(log(0.95*exp(-0.5*r2/v) + 0.05/3.0*exp(-0.5*r2/(9.0*v))));
模型中的过度分散量通过参数a进行测量。如果a等于1.0,则方差与普通模型相同。如果有异常值使方差膨胀,我们预计a将小于1.0。对于这些数据,a的估计值约为0.23,因此方差约为正常模型方差的1/4。解释是,离群值使方差估计值增加了大约4倍。其效果是增加了OLS模型参数的置信范围的大小。这表示效率的损失。对于正常的混合物模型,焓-体积函数的估计标准偏差为
29 H -3.9777e+01 3.3845e-01
30 H -4.1566e+01 1.6179e-01
31 H -4.3688e+01 7.6799e-02
32 H -4.5018e+01 9.4855e-02
33 H -4.6684e+01 9.5829e-02
34 H -4.7688e+01 7.7409e-02
35 H -4.8772e+01 6.2781e-02
36 H -4.9702e+01 1.0411e-01
37 H -5.0362e+01 1.6380e-01
38 H -5.1114e+01 2.5164e-01
有人看到,点估计值有很小的变化,而置信度限制已降低到OLS产生的置信度限制的60%。
我要说明的主要一点是,一旦更改了TPL文件中的一行代码,所有修改的计算都会自动发生。