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