Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的AIC:使用加权数据时手动值与内部值的差异_R_Model Comparison - Fatal编程技术网

R中的AIC:使用加权数据时手动值与内部值的差异

R中的AIC:使用加权数据时手动值与内部值的差异,r,model-comparison,R,Model Comparison,我正试图使用R进行基于AIC统计的模型选择。当比较线性模型是否加权时,我在R中的代码告诉我加权比不加权更可取,这些结果在其他软件(GraphPad Prism)中得到确认。我有一个使用标准曲线真实数据的示例代码: #Linear Curve Fitting a <- c(0.137, 0.412, 1.23, 3.7, 11.1 ,33.3) b <- c(0.00198, 0.00359, 0.00816, 0.0220, 0.0582, 0.184) m1 <- lm(b

我正试图使用R进行基于AIC统计的模型选择。当比较线性模型是否加权时,我在R中的代码告诉我加权比不加权更可取,这些结果在其他软件(GraphPad Prism)中得到确认。我有一个使用标准曲线真实数据的示例代码:

#Linear Curve Fitting
a <- c(0.137, 0.412, 1.23, 3.7, 11.1 ,33.3)
b <- c(0.00198, 0.00359, 0.00816, 0.0220, 0.0582, 0.184)
m1 <- lm(b ~ poly(a,1))
m2 <- lm(b ~ poly(a,1), weight=1/a)
n1 <- 6 #Number of observations
k1 <- 2 #Number of parameters
当我尝试使用非线性模型进行相同的分析时,内部函数和手动计算之间的AIC差异更为深刻。下面是Michaelis-Menten动力学数据示例代码:

c <- c(0.5, 1, 5, 10, 30, 100, 300)
d <- c(3, 5, 20, 50, 75, 200, 250)
m3 <- nls(d ~ (V * c)/(K + c), start=list(V=10, K=1))
m4 <- nls(d ~ (V * c)/(K + c), start=list(V=10, K=1), weight=1/d^2)
n2 <- 7
k2 <- 2
与线性示例类似,当数据未加权(m3)时,内部AIC和手动AIC值相同。加权(m4)会出现问题,因为手动AIC估计值要低得多。这种情况与相关问题中的问题类似


我前面提到了GraphPad Prism,在使用权重时,上面给出的模型和数据集的AIC都较低。那么,我的问题是,在对数据进行加权时,为什么R中的内部AIC估计值与手动AIC估计值存在如此大的差异(对于非线性模型,结果与线性模型不同)?最终,我应该认为内部AIC值或手动值更正确,还是我使用了错误的公式?

您看到的差异是由于在加权模型的手动计算中使用了未加权对数似然公式。例如,您可以通过以下调整复制
m2
m4
AIC
结果:

对于
m2
,您只需从计算中减去
sum(log(m2$weights))

AIC(m2); n1+(n1*log(2*pi))+n1*(log(deviance(m2)/n1))+(2*(k1+1)) - sum(log(m2$weights))
[1] -64.57691
[1] -64.57691
m4
的情况下,您必须使用加权残差计算交换
偏差
调用,并从结果中减去
n2*sum(log(m4$weights))

AIC(m4); n2+(n2*log(2*pi))+n2*(log(sum(m4$weights * m4$m$resid()^2)/n2))+(2*(k2+1)) - n2 * sum(log(m4$weights))
[1] 320.7105
[1] 320.7105

我相信
logLik
m2
中使用的公式推导是非常直接和正确的,但我对
m4
不太确定。通过阅读关于
logLik.nls()
(,)的其他一些线程,似乎对nls估计的正确方法有些混淆。总而言之,我相信
AIC
对于
m2
是正确的;我无法验证加权
nls
模型的数学,在这种情况下,我倾向于再次使用
m2
公式(但将
偏差
计算替换为加权残差),或者(可能更好)不对
nls
模型使用
AIC
,查看另一个问题中的注释,你的权重总和是1吗?就“正确”而言,您链接的问题中有一个交叉验证的链接,因此从统计学上来说,正确答案可能是“两者都不正确”。谢谢danielson的回答!您对加权AIC方程的渲染与我正在处理的另一个模型的内部AIC匹配。
AIC(m2); n1+(n1*log(2*pi))+n1*(log(deviance(m2)/n1))+(2*(k1+1)) - sum(log(m2$weights))
[1] -64.57691
[1] -64.57691
AIC(m4); n2+(n2*log(2*pi))+n2*(log(sum(m4$weights * m4$m$resid()^2)/n2))+(2*(k2+1)) - n2 * sum(log(m4$weights))
[1] 320.7105
[1] 320.7105