从lm对象中提取因变量

4

是否有一种方法从lm对象中提取Y?

我使用residual(m)和predict(m),但是使用对象的内部结构来提取Y...

m = lm(Y ~ X1, d)
head(m$model$Y)
[1] -0.791214 -1.291986 -0.472839  1.940940 -0.977910 -1.705539

嗨,all.vars(y~x)[1]应该可以完成工作。 - Mamoun Benghezal
1个回答

4
您可以使用model.frame(),如下所示:
# From the stats::lm documentation
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)
lm1 <- lm(weight ~ group)

model.frame(lm1)$weight
##  [1] 4.17 5.58 5.18 6.11 4.50 4.61 5.17 4.53 5.33 5.14 4.81 4.17 4.41 
##  3.59 5.87 3.83 6.03 4.89 4.32 4.69

如果您在公式中对一个或多个变量调用了函数,例如:
lm2 <- lm(log(weight) ~ group)

您可以使用get_all_vars(lm2)$weight获取未经转换的值(model.frame()返回转换后的值)。

如果您想查看特定类别的可用函数(尤其是提取器函数),可以使用methods(class = "lm")(或您感兴趣的任何对象类别)进行检查。


4
不知道因变量名称的情况下,model.frame(model)[,1]是什么意思? - Robert Kubrick
@RobertKubrick 是的,没错。即使你有一个多元响应,例如 cbind(Y1, Y2) ~ X,它也可以工作。如果你不知道因变量的数量,你可以使用 ncol(model.frame(model)[,1]) 进行检查,然后从那里开始。 - alexforrence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接