这是一个相当简单的过程——用数据子集(训练集)重新拟合 GLM 模型并计算剩余数据的预测准确性。我正在尝试使用cv.glm
package 的功能对数据集(即训练子集长度 = n-1)运行“留一法”策略boot
。
我是不是做错了什么,还是该函数似乎无法处理 NA 真的是这种情况?我猜这很容易自己编程,但如果我犯了其他错误,我将不胜感激。干杯。
例子:
require(boot)
#create data
n <- 100
x <- runif(n)
e <- rnorm(n, sd=100)
a <- 5
b <- 3
y <- exp(a + b*x) + e
plot(y ~ x)
plot(y ~ x, log="y")
#make some y's NaN
set.seed(1)
y[sample(n, 0.1*n)] <- NaN
#fit glm model
df <- data.frame(y=y, x=x)
glm.fit <- glm(y ~ x, data=df, family=gaussian(link="log"))
summary(glm.fit)
#calculate mean error of prediction (leave-one-out cross-validation)
cv.res <- cv.glm(df, glm.fit)
cv.res$delta
[1] NA NA