使用模型矩阵而不是公式来调用lm函数

7

我想在R中使用lm拟合线性模型,以获得系数估计和p值+总模型拟合的p值(类似于ANOVA),因此基本上是从summary.lm输出的内容。

问题在于我想使用自己的模型矩阵,而不是在调用lm时使用公式来指定它。

我尝试使用底层的lm.fit函数,它允许这样做,但我失去了summary.lm函数的便利性,而且我不想自己重新计算所有的测试统计量。

有没有办法“欺骗”lm并给它一个模型矩阵而不是一个公式?

谢谢!


1
as.data.frame(model_matrix)? - MichaelChirico
2
另外,尝试设置 class(lm.fit_object) <- "lm" - MichaelChirico
1个回答

8

以下是使用内置的BOD数据框的示例:

# inputs
demand <- BOD$demand
mm <- model.matrix(~ Time, BOD) # model matrix

summary(lm(demand ~ mm + 0))

或者

summary(lm(demand ~. + 0, as.data.frame(mm)))

当然,您也可以手动构建矩阵:mm <- cbind(1, BOD$Time) 也可以。 - Lars Lau Raket
这个可行!唯一需要更改的是将模型矩阵名称作为前缀的术语 - 但这应该很容易在之后完成。 - Misconstruction
在事先删除截距方面是否存在问题? 作为“lm”输入似乎更直观:summary(lm(demand ~ ., as.data.frame(model.matrix(~ ., BOD)[, -1]))) - Tunn
这取决于您想要什么以及模型矩阵是否已经具有拦截器。 - G. Grothendieck

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