[英]R model.matrix and the tilde operator usage?
我在搞亂 R 並遇到了一些使用波浪號運算符和 Model.Matrix 的代碼,我不太明白。 我在下面制作了一個非常簡單的示例。
rm(list=ls())
data("iris")
x = model.matrix(~Species +0, iris)
x
這是選擇具有不同物種的 3 個隨機行的數據的快速快照:
>iris[c(1,78, 143),]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
78 6.7 3.0 5.0 1.7 versicolor
143 5.8 2.7 5.1 1.9 virginica
並且在同一行,但在通過 model.matrix 之后:
> x[c(1,78,143),]
Speciessetosa Speciesversicolor Speciesvirginica
1 1 0 0
78 0 1 0
143 0 0 1
如您所見,此 output output 創建了一個 3 列和 150 行的矩陣(相同數量的觀察值)。 在每一行中,相應的花種都標記為 1。這真的很整潔,但我無法真正理解它是如何或為什么會准確工作的。
我對兩個要素感到困惑。
model.matrix creates a design (or model) matrix, eg, by expanding factors to a set of dummy variables (depending on the contrasts) and expanding interactions similarly.
我不太明白這意味着什么。 當它對一組虛擬變量說“擴展因子”時是什么意思?
lm(Y ~ X1+X2-X3)
等。 我從來沒有見過它在這里赤身裸體地使用。如果我只是在控制台中運行類似的東西而不像這樣包裝 model.matrix :
> ~iris$Species
我只得到這個 output:
~iris$Species
老實說,這似乎是一個錯誤,但我認為因為 R 並沒有告訴我它實際上不是一個錯誤。
這里有很多,讓我們逐點介紹go。 主要思想是model.matrix()
旨在將數據集中的變量轉換為適合線性回歸的矩陣格式(您可能熟悉回歸的線性代數表達式, y = X %*% beta
)。
對於簡單的數值協變量,轉換很簡單——變量變成X
中的一列。 然而,分類變量(R 中的因子)必須轉換為一組二元變量,這些變量將代表跨類別的預期響應差異,其方式由與因子相關的對比定義。
~Species +0
表示為Species
因子設置虛擬變量: +0
表示不使用截距。 在這種特殊情況下,創建的虛擬變量是指示變量——對於給定的行,與該觀察的物種對應的列中的值為 1,其他為 0。因為(例如)第一個觀察是“Setosa ", Speciessetosa
為 1,其他列為零。 如果您有一個包含每個物種平均值的系數向量 ( beta
),則乘以這個X %*% beta
將挑選出與每個觀察的物種相對應的平均值。
(R 公式語言是一個相當大的兔子洞:如果公式包含具有不同對比的因子;交互作用;或poly()
或splines::ns()
等函數,它可以從單個輸入變量...)
問題 2:在<response> ~ <stuff>
中, <stuff>
包含我們需要定義 model 矩陣的輸入變量。 在我們實際擬合回歸 model 之前,我們不需要知道響應變量,因此我們可以使用單邊公式~ <stuff>
。
您的最后一個問題:在公式上下文之外使用~
告訴 R 將波浪號后面的任何內容保留為未評估的表達式。 例如:
> x <- ~hello
> x
~hello
> x[[2]]
hello
> hello <- 5
> eval(x[[2]])
[1] 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.