這是我正在使用的資料集的 dput:
structure(list(X = c(18, 19, 20, 17, 8, 15, 14, 16, 18, 14, 16,
13, 16, 17, 10, 18, 19, 25, 18, 13, 18, 16, 11, 17, 15, 18, 19,
16, 20, 17, 8, 18, 15, 14, 18, 14, 16, 13, 16), Y = c(15, 13,
14, 22, 2, 11, 15, 11, 20, 17, 20, 17, 20, 14, 21, 10, 13, 16,
12, 11, 13, 10, 4, 16, 18, 15, 10, 13, 14, 17, 2, 11, 15, 11,
20, 17, 14, 7, 16), Z = c(32, 42, 37, 34, 32, 39, 44, 49, 36,
31, 36, 37, 37, 45, 46, 48, 36, 42, 36, 25, 36, 39, 26, 32, 33,
38, 33, 44, 46, 34, 32, 39, 44, 49, 36, 31, 36, 37, 37)), class = "data.frame", row.names = c(NA,
-39L))
所以在我在 R 中運行線性回歸之前,我會使用這樣的簡單代碼:
library(ggplot2)
library(ggpmisc)
ggplot(data = hw_data,
aes(x=X,
y=Y))
geom_point()
geom_smooth(method = lm)
stat_poly_eq(formula = simple_model,
aes(label = paste(..eq.label.., ..rr.label..,
sep = "~~~~~~")))
這會給我一個帶有這種方程標簽的圖表:

但是,我正在嘗試運行多元線性回歸和分層回歸,但是當我嘗試添加第三個變數時,我不完全確定如何 1) 將第三個變數 (Z) 繪制為回歸圖線和 2) 得到一個方程,適合圖形上的模型。我正在尋找的是這樣的:

我需要繪制的兩個模型是 (Y ~ X Z) 和 (Y ~ X * Z)。到目前為止我想出的最好的是:
# One predictor model:
hw_regression_simple <- lm(Y ~ X,
data = hw_data)
# Two predictor model:
hw_regression_two_factors <- lm(Y ~ X Z,
hw_data)
# Interaction model:
hw_regression_interaction <- lm(Y ~ X * Z,
hw_data)
# Comparison of models:
summary(hw_regression_simple)
summary(hw_regression_two_factors)
summary(hw_regression_interaction)
model <- Y ~ X * Z
ggplot(data = hw_data,
aes(x=X,
y=Y,
color=Z))
geom_point()
geom_smooth(method = lm)
labs(title = "X, Y, and Z Interactions")
stat_poly_eq()
這給了我這個帶有 R 平方和散點圖著色的圖表,但除此之外并沒有提供我想要的那么多資訊。我怎樣才能解決這個問題,讓它看起來更像我正在尋找的模型?

uj5u.com熱心網友回復:
如果您Y對X和都進行回歸Z,并且這些都是數值變數(如您的示例中所示),那么簡單的線性回歸表示3D 空間中的2D 平面,而不是 2D 空間中的一條線。添加互動項意味著您的回歸表示 3D 空間中的曲面。這可能很難用簡單的繪圖表示,盡管有一些方法可以做到:您展示的吸煙/騎自行車示例中的彩色線是在 Z 變數的各種(任意)值處穿過回歸平面的切片,即一種合理的方式來顯示這種型別的模型。
雖然 ggplot 在繪制簡單模型方面有一些很好的捷徑,但我發現人們經常把自己綁在結上,因為他們試圖在 ggplot 中進行所有建模。當您有一個更復雜的模型要繪制時,最好的辦法是使用正確的工具計算出您想要繪制的內容,然后使用 ggplot 繪制它。
例如,如果您為互動模型制作預測資料框:
model2 <- lm(Y ~ X * Z, data = hw_data)
predictions <- expand.grid(X = seq(min(hw_data$X), max(hw_data$X), length.out = 5),
Z = seq(min(hw_data$Z), max(hw_data$Z), length.out = 5))
predictions$Y <- predict(model2, newdata = predictions)
然后您可以非常簡單地繪制您的互動模型:
ggplot(hw_data, aes(X, Y))
geom_point()
geom_line(data = predictions, aes(color = factor(Z)))
labs(color = "Z")

您可以輕松地從系數表中計算出公式并將其與paste:
labs <- trimws(format(coef(model2), digits = 2))
form <- paste("Y =", labs[1], " ", labs[2], "* x ",
labs[3], "* Z (", labs[4], " * X * Z)")
form
#> [1] "Y = -69.07 5.58 * x 2.00 * Z ( -0.13 * X * Z)"
這可以作為注釋添加到您的繪圖中使用geom_text或annotation
更新
一個完整的解決方案,如果您只想為 Z 設定 3 個級別,即有效的“高”、“中”和“低”,您可以執行以下操作:
library(ggplot2)
model2 <- lm(Y ~ X * Z, data = hw_data)
predictions <- expand.grid(X = quantile(hw_data$X, c(0, 0.5, 1)),
Z = quantile(hw_data$Z, c(0.1, 0.5, 0.9)))
predictions$Y <- predict(model2, newdata = predictions)
labs <- trimws(format(coef(model2), digits = 2))
form <- paste("Y =", labs[1], " ", labs[2], "* x ",
labs[3], "* Z (", labs[4], " * X * Z)")
form <- paste(form, " R\u00B2 =",
format(summary(model2)$r.squared, digits = 2))
ggplot(hw_data, aes(X, Y))
geom_point()
geom_line(data = predictions, aes(color = factor(Z)))
geom_text(x = 15, y = 25, label = form, check_overlap = TRUE,
fontface = "italic")
labs(color = "Z")

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/343316.html
