出于某种原因,当我指定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预测缺失值?
谢谢!
答案 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.