0
我有一个简单矩阵像:如何用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)
等等等等?
谢谢
我有一个简单矩阵像:如何用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)
等等等等?
谢谢
是的,但我不会真的建议是:
> 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()
直接:
这里我们将1s的向量绑定到mat
(cbind(rep(1, nrow(mat)), mat[,-1])
)的第2列和第3列;这是模型矩阵。 mat[, 1]
是回应。虽然它不归还"lm"
分类对象,但它非常快速并且可以相对容易地转换为一个重要的对象。
顺便说一句,你有通常的记法回到前面。 Y通常是响应,X表示用于建模或预测Y的协变量。
看起来非常好,为什么不raccomend呢? – Dail
@Dail'lm()'是较低级别代码的高级接口。 'lm()'的大部分内容都在处理一个公式,以建立模型矩阵并提取响应。在你的情况下,你几乎拥有模型矩阵和响应,并且一个简单的操作就可以得到完整的模型矩阵(参见我的更新后的答案),所以在调用具有矩阵的lm()时, 'lm.fit()'直接。一旦拥有它,取决于你想要对模型拟合做什么。 –
完美!好吧有道理!谢谢 – Dail