如何用R创建线性回归?

时间:2011-07-27 08:34:16

标签: r

我有一个简单的矩阵,如:

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
[4,]   10   11   12

我必须计算这些列的线性回归,例如:lm(x ~ y)

第一列是X,另一列是Y?我的意思是......我可以用一个变量(y)

来做其他事情

我是否必须使用类似:lm(x~y+z+c+b)等等的内容?

谢谢

1 个答案:

答案 0 :(得分:4)

是的,但我不会真的推荐它:

> set.seed(2)
> mat <- matrix(runif(12), ncol = 3, byrow = TRUE)
> mat
          [,1]      [,2]      [,3]
[1,] 0.1848823 0.7023740 0.5733263
[2,] 0.1680519 0.9438393 0.9434750
[3,] 0.1291590 0.8334488 0.4680185
[4,] 0.5499837 0.5526741 0.2388948
> mod <- lm(mat[,1] ~ mat[,-1])
> mod

Call:
lm(formula = mat[, 1] ~ mat[, -1])

Coefficients:
(Intercept)   mat[, -1]1   mat[, -1]2  
     1.0578      -1.1413       0.1177

为什么不推荐这个?好吧,你在这里滥用公式界面;它有效,但模型系数有奇数名称,你会遇到很多使用公式接口的开销,公式接口用于从符号公式中引用的数据框或列表对象中提取响应/协变量。

通常的工作方式是:

df <- data.frame(mat)
names(df) <- c("Y","A","B")
## specify all terms:
lm(Y ~ A + B, data = df)
## or use the `.` shortcut
lm(Y ~ ., data = df)

如果您不想通过数据框,那么您可以通过简单的操作直接调用lm()lm.fit()后面的主力函数:

lm.fit(cbind(rep(1, nrow(mat)), mat[,-1]), mat[, 1])

这里我们将1s的向量绑定到matcbind(rep(1, nrow(mat)), mat[,-1]))的第2列和第3列;这是模型矩阵。 mat[, 1]是回复。虽然它不会返回"lm"类别的对象,但它会非常快速,并且如果重要的话可以相对容易地转换为一个。

顺便说一句,你有通常的记法回到前面。 Y通常是响应,X表示用于建模或预测Y的协变量。