当数据包含NaN时,为什么GLM模型(package = boot)的一次性交叉验证失败?

时间:2013-05-26 08:43:02

标签: r glm

这是一个相当简单的过程 - 用数据子集(训练集)重新定义GLM模型,并计算剩余数据预测的准确性。我正在尝试使用包cv.glm的{​​{1}}函数对数据集(即训练子集长度= n-1)运行“留一出”策略。

我做错了什么,或者这种功能似乎无法处理NA的情况?我猜这个我自己编程相当容易,但如果我有其他错误,我会很感激。欢呼声。

实施例

boot

enter image description here

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")

1 个答案:

答案 0 :(得分:2)

你是对的。该功能未设置为处理NA。 na.action函数的glm()参数的各种选项也没有帮助。处理它的最简单方法是在开始时从数据框中删除NA。

sub <- df[!is.na(df$y), ]
glm.fit <- glm(y ~ x, data=sub, family=gaussian(link="log"))
summary(glm.fit)

# calculate mean error of prediction (leave-one-out cross-validation)
cv.res <- cv.glm(sub, glm.fit)
cv.res$delta