用glm
创建模型后model <- glm(data$y ~ data$x * data$z)
我需要创建一个数据集,其中包含glm的输出和原始数据以供进一步处理
newdata <- data.frame(
data$id,
data$y, #observed
fitted(model), #expected
resid(model),
data$x,
data$z,
data$othervariable1,
data$othervariable2,
data$othervariable3
)
只要glm产生的数据与数据文件一样多,就可以很好地运行。但是,如果由于任何原因(主要是缺失值)模型数据具有较少的记录,则连接不起作用:
data.frame(....)中的为了避免glm中缺少值,错误:参数具有不同的行数: 21,18
na.action = na.pass
似乎无法正常工作
有没有办法将唯一标识符传输到GLM输出?或者是否有一个奇特的功能?(我确定有,但我找不到它)
答案 0 :(得分:0)
您需要利用na.action
属性加载model
对象的glm
元素。在下面的示例中,为了清楚起见,我调用了glm对象g
,以指示model
是g
的元素:
set.seed(1)
dat <- data.frame(x = rnorm(100),
y = rbinom(100,1,.5))
dat$x[sample(1:100, 10, FALSE)] <- NA
g <- glm(y ~ x, data=dat)
# identify dropped observations
d <- attributes(g$model)$na.action
# store results back into original `dat` data.frame
dat$fitted <- NA
dat$fitted[-d] <- g$fitted
dat$resid <- NA
dat$resid[-d] <- g$resid
这正确地将所有内容放回原来的位置:
> summary(dat)
x y fitted resid
Min. :-2.21470 Min. :0.00 Min. :0.2959 Min. :-0.3842
1st Qu.:-0.56213 1st Qu.:0.00 1st Qu.:0.3317 1st Qu.:-0.3472
Median : 0.11391 Median :0.00 Median :0.3439 Median :-0.3317
Mean : 0.08907 Mean :0.38 Mean :0.3444 Mean : 0.0000
3rd Qu.: 0.69516 3rd Qu.:1.00 3rd Qu.:0.3581 3rd Qu.: 0.6412
Max. : 2.40162 Max. :1.00 Max. :0.3928 Max. : 0.7041
NA's :10 NA's :10 NA's :10
答案 1 :(得分:0)
这是na.exclude
的情况。请参阅?residuals.glm
的详细信息部分。基本上,如果使用na.exclude
,残差和拟合值将包含NA值。
使用来自@Thomas的数据回答:
fit1 = glm(y ~ x, data = dat)
length(residuals(fit1))
[1] 90
fit2 = glm(y ~ x, data = dat, na.action = na.exclude)
length(residuals(fit2))
[1] 100