我有以下矢量:
x<-c(1,1,3,8,5,2,4,3,1,1,0,5,1,1,3,4,6,7,8,9,4,2,1,2,3,4,6,7,8,1,2,3,5,7,9)
我在以下函数模型中使用递增(-1)滞后版本的x来测试哪个滞后在以下函数中提供较低的AIC结果。 Lag()
函数来自包* quantmod 。
library("quantmod")
a1 <- glm(x[1:length(x)] ~ Lag(x,1))
a2 <- glm(x[1:length(x)] ~ Lag(x,2))
a3 <- glm(x[1:length(x)] ~ Lag(x,3))
a4 <- glm(x[1:length(x)] ~ Lag(x,4))
a5 <- glm(x[1:length(x)] ~ Lag(x,5))
a6 <- glm(x[1:length(x)] ~ Lag(x,6))
a7 <- glm(x[1:length(x)] ~ Lag(x,7))
a8 <- glm(x[1:length(x)] ~ Lag(x,8))
a9 <- glm(x[1:length(x)] ~ Lag(x,9))
a10 <- glm(x[1:length(x)] ~ Lag(x,10))
另一方面,我想在a1[[11]]
...中提取AIC系数,并找到从a1
到a10
的最小AIC。我这样做,但我得到以下错误。
which.min(a1[[11]],a2[[11]],a3[[11]],a4[[11]],a5[[11]],a6[[11]],a7[[11]],a8[[11]],
a9[[11]],a10[[11]])
Error en which.min(a11[[11]], a22[[11]], a33[[11]], a44[[11]], a55[[11]], :
unused arguments (a22[[11]], a33[[11]], a44[[11]], a55[[11]], a66[[11]], a77[[11]],
a88[[11]], a99[[11]], a1010[[11]])
你会发生怎样才能提取并在可能的情况下同时计算which.min
答案 0 :(得分:2)
如果您采用更多R-ish方法来做这件事会有所帮助,例如使用您的数据
x <- c(1,1,3,8,5,2,4,3,1,1,0,5,1,1,3,4,6,7,8,9,4,2,1,2,3,4,6,7,8,1,2,3,5,7,9)
您可以在一次通话中使用模型:
mods <- lapply(seq_len(10), function(i, x) {glm(x ~ Lag(x, i))}, x = x)
可以方便地将模型排列在列表中,您可以迭代它。
第二个提示是使用提取器功能。您不需要知道在哪里寻找AIC,只需使用AIC()
泛型。将其与sapply()
结合使用,我们得到拟合模型的AIC值向量:
sapply(mods, AIC)
R> sapply(mods, AIC)
[1] 156.8 163.0 158.0 150.4 147.1 144.2 141.1 134.5 131.6 126.7
由于这是值的 vector ,我们现在可以使用which.min()
:
which.min(sapply(mods, AIC))
R> which.min(sapply(mods, AIC))
[1] 10
您的呼叫失败的原因是您将10个向量(每个长度为1)传递给which.min()
函数,在该函数中期望从中选择最小值的单个向量。您可以使用c()
将它们连接在一起,但最好采用更好的方法来拟合和存储模型,如果您调用正确的工具,R将为您完成。
最后,请注意which.min()
;如果两个或多个元素采用最小值,which.min()
将返回这些最小值中的第一个。为了防守,你可以这样做:
vals <- sapply(mods, AIC)
which(vals == min(vals))
R> vals <- sapply(mods, AIC)
R> which(vals == min(vals))
[1] 10
答案 1 :(得分:0)
b<-c(a1[[11]],a2[[11]],a3[[11]],a4[[11]],a5[[11]],a6[[11]],a7[[11]], a8[[11]],
a9[[11]],a10[[11]])
which(b == min(b))
答案 2 :(得分:0)
以下内容为您的向量提取增量滞后值的aic数字,但是您确定您正在做的事情有意义吗?我对你正在使用的实际功能并不熟悉,但是你的最小数字基本上是你尝试的最大偏移量是非常可疑的(为了得到你的答案,你会做which.min
结果如下):
sapply(
1:(length(x) - 2L),
function(y) glm(formula=x ~ Lag(x, y))$aic
)
# [1] 156.758055 162.994470 158.022507 150.382848 147.112939 144.217309 141.115049 134.461170
# [9] 131.556481 126.682320 119.779543 116.410508 110.665231 104.261180 97.765081 94.042869
# [17] 92.527751 86.122867 81.247572 75.982221 72.414620 67.337715 61.407616 57.108097
# [25] 52.830527 41.671213 41.808836 40.550707 34.626992 24.341564 17.195847 13.297236
# [33] 9.675754