Predict.glm不会预测响应中的缺失值

时间:2013-04-28 17:45:36

标签: r prediction missing-data glm lm

出于某种原因,当我指定glms(并且lm也是如此)时,R不会预测数据的缺失值。这是一个例子:

y = round(runif(50))
y = c(y,rep(NA,50))
x = rnorm(100)
m = glm(y~x, family=binomial(link="logit"))
p = predict(m,na.action=na.pass)
length(p)

y = round(runif(50))
y = c(y,rep(NA,50))
x = rnorm(100)
m = lm(y~x)
p = predict(m)
length(p)

p的长度应该是100,但是它的50。奇怪的是,我在同一个脚本中有其他预测可以从缺失的数据中预测。

编辑:事实证明那些其他预测是完全错误的 - 我正在做imputed.value = rnorm(N,mean.from.predict,var.of.prediction.interval)。这个回收来自lm的均值和sd向量预测或glm预测length(predict)<N时的函数,这与我所寻求的完全不同。

所以我的问题是我的示例代码是什么阻止glm和lm预测缺失值?

谢谢!

3 个答案:

答案 0 :(得分:8)

glm适合模型时,它仅使用没有缺失值的情况。您仍然可以通过构建数据框并将其传递给y来获取缺少predict.glm值的情况的预测。

predict(m, newdata=data.frame(y, x))

答案 1 :(得分:4)

问题在于您致电glm,其na.action参数设置为na.omit

因此省略这些值(当调用predict.glm时,它们仍被省略)

来自?glm

  

na.action

     

一个函数,指示数据时应该发生什么   包含NA。默认值由选项的na.action设置设置,   如果没有设置,那就是na.fail。 “工厂新鲜”的默认值是   na.omit。另一个可能的值是NULL,没有动作。价值na.exclude   可能很有用。

来自?na.exclude(这是一般NA操作帮助页面)

  

na.exclude与na.omit的区别仅在于“na.action”的类   结果的属性,即“排除”。这给出了不同的   在使用naresid和napredict的函数中的行为:何时   使用na.exclude将残差和预测填充到   通过为na.exclude省略的案例插入NA来确定长度。

答案 2 :(得分:-1)

我不确定你认为R的回归函数应该在哪里自动估算缺失值。这不是正确阅读glm帮助页面。如果你对那些你认为没有提供的数据缺失值的东西有预测,我的猜测是它们实际上并没有丢失,但可能是标签为“NA”的级别。这是 R中的缺失值。显示您正在使用的数据集的str(chr.imp)。这个名字的“imp”部分让我觉得你(或者你之前的某个人)已经构建了一些插补。

如果您想要输入数据,那么您首先需要阅读所涉及的问题,然后选择一个包来执行此操作。要搜索此类软件包,请尝试以下方法:

install.packages("sos")
require(sos)
 findFn("impute")
#---------
found 834 matches;  retrieving 20 pages, 400 matches.
2 3 4 5 6 7 8 9 10 
11 12 13 14 15 16 17 18 19 20 

Downloaded 383 links in 118 packages.