8

出于某种原因,当我指定 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 predict 或 glm predict 函数中回收length(predict)<N了 mean 和 sd 向量 when ,这与我所寻求的完全不同。

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

谢谢!

4

3 回答 3

9

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

predict(m, newdata=data.frame(y, x))
于 2013-04-28T18:54:57.733 回答
6

问题在于您对 的调用glm,它的 na.action参数设置为na.omit

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

?glm

无动作

一个函数,它指示当数据包含 NA 时应该发生什么。默认值由选项的 na.action 设置设置,如果未设置,则为 na.fail。'factory-fresh' 默认为 na.omit。另一个可能的值是NULL,没有动作。值 na.exclude 可能很有用。

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

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

于 2013-04-29T00:11:04.530 回答
-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.
于 2013-04-28T18:43:34.647 回答