使用lm在没有截距的情况下回归数据帧矩阵

时间:2017-07-06 09:32:40

标签: r

我想使用没有截距的lm对数据帧矩阵进行回归。如果矩阵存储为数据框,则可以简单地调用lm(矩阵),假设第一列是因变量,而其余列则作为自变量,回归包括截距。我的问题是:如果我想在不包括截距的情况下回归,我如何有效地做同样的事情?

最小的工作示例:

mat <- matrix(c(2, 4, 3, 1, 5, 7, 3, 5, 30), nrow=3, ncol=3)
mat <- data.frame(mat)
lm(mat)

输出带截距项的回归

1 个答案:

答案 0 :(得分:1)

这取决于你的意思“高效”。

如果你的意思是语法简短/有效,那么我认为最优雅的方式是直接提供公式,@ nicola在评论中显示(lm(X1 ~ . + 0, data = mat))。

如果你的意思是以编程方式删除拦截(编程有效,我猜),那么下面的代码将会这样做。

mat <- matrix(c(2, 4, 3, 1, 5, 7, 3, 5, 30), nrow=3, ncol=3)
mat <- data.frame(mat)

lm(update(as.formula(mat), . ~ . - 1), data = mat)
#
#Call:
#lm(formula = update(as.formula(mat), . ~ . - 1), data = mat)
# 
#Coefficients:
#     X2       X3  
# 0.9364  -0.1144  

请注意,当您致电lm(mat)时,lm会尝试将mat强制转换为公式对象(尝试运行as.formula(mat))并使用该公式。正如您所看到的(并且已经注意到),这会自动选择第一列作为因变量,其余作为解释变量。我们需要做的就是使用update将该公式更新为不包括截距。