R - 協方差分析



我們使用迴歸分析來建立模型,這些模型描述了預測變數變化對響應變數的影響。有時,如果我們有一個分類變數,其值例如是/否或男性/女性等,則簡單的迴歸分析會為分類變數的每個值給出多個結果。在這種情況下,我們可以透過將分類變數與預測變數一起使用並比較分類變數每個水平的迴歸線來研究分類變數的影響。這種分析被稱為協方差分析,也稱為ANCOVA

示例

考慮 R 內建資料集 mtcars。在其中,我們觀察到欄位“am”表示傳輸型別(自動或手動)。它是一個分類變數,值為 0 和 1。汽車的每加侖英里數 (mpg) 除了馬力 (“hp”) 值之外也可能取決於它。

我們研究“am”的值對“mpg”和“hp”之間迴歸的影響。這是透過使用aov()函式,然後使用anova()函式來比較多個迴歸來完成的。

輸入資料

建立一個包含資料集 mtcars 中的“mpg”、“hp”和“am”欄位的資料框。這裡我們將“mpg”作為響應變數,“hp”作為預測變數,“am”作為分類變數。

input <- mtcars[,c("am","mpg","hp")]
print(head(input))

當我們執行上述程式碼時,它會產生以下結果:

                   am   mpg   hp
Mazda RX4          1    21.0  110
Mazda RX4 Wag      1    21.0  110
Datsun 710         1    22.8   93
Hornet 4 Drive     0    21.4  110
Hornet Sportabout  0    18.7  175
Valiant            0    18.1  105

ANCOVA 分析

我們建立一個迴歸模型,將“hp”作為預測變數,將“mpg”作為響應變數,並考慮“am”和“hp”之間的互動作用。

包含分類變數和預測變數之間互動作用的模型

# Get the dataset.
input <- mtcars

# Create the regression model.
result <- aov(mpg~hp*am,data = input)
print(summary(result))

當我們執行上述程式碼時,它會產生以下結果:

            Df Sum Sq Mean Sq F value   Pr(>F)    
hp           1  678.4   678.4  77.391 1.50e-09 ***
am           1  202.2   202.2  23.072 4.75e-05 ***
hp:am        1    0.0     0.0   0.001    0.981    
Residuals   28  245.4     8.8                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

此結果表明,馬力和變速箱型別都對每加侖英里數有顯著影響,因為在這兩種情況下,p 值都小於 0.05。但是,這兩個變數之間的互動作用並不顯著,因為 p 值大於 0.05。

不包含分類變數和預測變數之間互動作用的模型

# Get the dataset.
input <- mtcars

# Create the regression model.
result <- aov(mpg~hp+am,data = input)
print(summary(result))

當我們執行上述程式碼時,它會產生以下結果:

            Df  Sum Sq  Mean Sq   F value   Pr(>F)    
hp           1  678.4   678.4   80.15 7.63e-10 ***
am           1  202.2   202.2   23.89 3.46e-05 ***
Residuals   29  245.4     8.5                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

此結果表明,馬力和變速箱型別都對每加侖英里數有顯著影響,因為在這兩種情況下,p 值都小於 0.05。

比較兩個模型

現在我們可以比較這兩個模型,以得出變數互動作用是否真的不顯著的結論。為此,我們使用anova()函式。

# Get the dataset.
input <- mtcars

# Create the regression models.
result1 <- aov(mpg~hp*am,data = input)
result2 <- aov(mpg~hp+am,data = input)

# Compare the two models.
print(anova(result1,result2))

當我們執行上述程式碼時,它會產生以下結果:

Model 1: mpg ~ hp * am
Model 2: mpg ~ hp + am
  Res.Df    RSS Df  Sum of Sq     F Pr(>F)
1     28 245.43                           
2     29 245.44 -1 -0.0052515 6e-04 0.9806

由於 p 值大於 0.05,我們得出結論,馬力和變速箱型別之間的互動作用不顯著。因此,在自動和手動變速模式下,每加侖英里數將以類似的方式取決於汽車的馬力。

廣告