R 使用lm在无截距的数据帧矩阵上进行回归

R 使用lm在无截距的数据帧矩阵上进行回归,r,R,我想在数据帧矩阵上使用lm进行回归,而不使用截距。如果矩阵存储为数据帧,则可以简单地调用lmmatrix,并假设第一列为因变量,其余列为自变量,回归包括截距。我的问题是:如果我想在不包含截距的情况下进行回归,如何有效地进行同样的操作 最简单的工作示例: mat <- matrix(c(2, 4, 3, 1, 5, 7, 3, 5, 30), nrow=3, ncol=3) mat <- data.frame(mat) lm(mat) 输出带有截距项的回归这取决于效率的含义 如果你的

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

最简单的工作示例:

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

输出带有截距项的回归

这取决于效率的含义

如果你的意思是语法简洁/高效,那么我认为最优雅的方式就是直接提供公式,正如@nicola在评论lmX1~中所示0,数据=材料

如果您的意思是以编程方式高效地删除截取,那么下面的代码可以做到这一点

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  

请注意,当您调用lmmat时,lm将尝试将mat强制为公式对象,并尝试以.formulamat运行并使用该公式。正如您所看到和注意到的,这会自动选择第一列作为因变量,其余列作为解释变量。然后,我们需要做的就是使用update更新公式,使其不包含截距。

试试lmX1~。+0,data=mat.Perfect,感谢您的支持并被接受为solution@r_master没问题,谢谢。你当然也可以写0而不是-1在公式的右侧,如果你愿意,我以前不知道。我实际上认为是0+。给代码一个更清晰的含义。