輕鬆在 ggplot2 圖上顯示迴歸方程式:ggpmisc 套件的 stat_poly_eq()

更新於 發佈於 閱讀時間約 13 分鐘

在資料分析與視覺化中,我們經常需要在散點圖上疊加迴歸線,並直接顯示其統計資訊,例如迴歸方程式和 R2 值。這不僅能讓圖表更具資訊量,也方便讀者快速理解變數間的關係。雖然 ggplot2 本身功能強大,但要自動在圖上顯示這些迴歸細節卻不是那麼直觀。

這時候,ggpmisc 套件就派上用場了!它為 ggplot2 擴展了許多實用的功能,其中最受歡迎的莫過於 stat_poly_eq() 函數,它能讓你輕鬆地將迴歸方程式、R2值、p 值等直接呈現在你的圖表上。

為什麼選擇 stat_poly_eq()

  • 自動化: 不再需要手動計算和輸入迴歸方程式或統計值。
  • 整合性: 作為 ggplot2 的圖層,完美融入你的視覺化流程。
  • 專業呈現: 支援 LaTeX 語法解析,讓數學方程式和統計符號顯示得既美觀又專業。
  • 客製化: 提供豐富的參數選項,讓你精確控制顯示的內容和位置。

stat_poly_eq() 的基本用法

要使用 stat_poly_eq(),你需要確保已經安裝並載入了 ggplot2 和 ggpmisc 這兩個套件。

# 如果尚未安裝,請先執行以下兩行
install.packages("ggplot2")
install.packages("ggpmisc")

# 載入所需的套件
library(ggplot2)
library(ggpmisc)

# 使用 R 內建的 mtcars 資料集作為範例
# 我們將繪製車重 (wt) 與每加侖行駛里程 (mpg) 的關係
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() + # 繪製散點圖
geom_smooth(method = "lm", se = FALSE, color = "blue") + # 添加線性迴歸線 (不顯示信賴區間)
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")), # 定義要顯示的標籤內容
parse = TRUE # 啟用數學表達式解析,讓方程式和符號正確顯示
) +
labs(
title = "車重對油耗的線性迴歸分析",
x = "車重 (千磅)",
y = "每加侖英里數 (MPG)"
) +
theme_classic() # 使用簡潔的主題
raw-image

程式碼解析

  1. ggplot(mtcars, aes(x = wt, y = mpg)): 初始化 ggplot 物件,設定資料集和 X、Y 軸的變數。
  2. geom_point(): 添加散點圖層,顯示原始資料點。
  3. geom_smooth(method = "lm", se = FALSE, color = "blue"): 添加平滑曲線圖層。method = "lm" 表示我們要擬合一個線性模型(Linear Model)。se = FALSE 則是不顯示迴歸線的信賴區間,color = "blue" 設定線條顏色。
  4. stat_poly_eq(): 這是 ggpmisc 的核心函數。aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")): 這個是魔法發生的地方!
      • stat() 是一個特殊的函數,用於從統計變數中獲取標籤。
      • eq.label 代表迴歸方程式的標籤(例如:y=ax+by=ax+b)。
      • rr.label 代表  值的標籤。
      • paste(..., sep = "*\", \"*") 是將多個標籤連接起來的函數。sep = "*\", \"*" 是一個小技巧,當 parse = TRUE 時,它會被解析為一個逗號和一個空格,讓多個標籤之間有適當的分隔。
      • parse = TRUE: 非常重要! 這個參數告訴 ggplot2 將 label 內容解析為數學表達式。這樣R 平方值的上標、等式中的符號等才能正確顯示,而不是純文字

客製化你的統計標籤

stat_poly_eq() 提供了豐富的參數,讓你精確控制顯示的內容和格式:

1. 選擇顯示的統計資訊

你可以在 aes(label = ...) 中使用 stat() 函數搭配不同的統計變數:

    • stat(eq.label): 迴歸方程式。
    • stat(rr.label): R2 值。
    • stat(adj.rr.label): 調整後的 R2 值。
    • stat(p.value.label): P 值。
    • stat(n.label): 觀察值數量。
    • stat(AIC.label)stat(BIC.label): 模型的 AIC 和 BIC 值。
    • stat(F.value.label)stat(df.label): F 統計量和自由度。
    • stat(s.label): 殘差標準誤。
    • stat(cor.coef.label): 相關係數 (R)。

範例:同時顯示方程式、R² 和 P 值

ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue") +
stat_poly_eq(
aes(label = paste(stat(eq.label),
stat(rr.label),
stat(p.value.label),
sep = "*\", \"*")), # 用逗號分隔多個標籤
parse = TRUE
) +
labs(title = expression(paste("迴歸方程式 ", R^2 ," 和 p-value")) ) +
theme_classic()

raw-image

2.控制數字的小數位數

你可以使用 rr.digitsp.value.digitscoef.digits 等參數來設定顯示的小數位數。

ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "darkgreen") +
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")),
rr.digits = 4, # R^2 顯示 4 位小數
coef.digits = 3, # 係數顯示 3 位小數
parse = TRUE
) +
labs(title = "調整小數位數") +
theme_classic()
raw-image

3. 調整標籤的位置

標籤的預設位置通常在圖表的左上角。可以使用 label.x 和 label.y

    • label.x: 接受 "left""right" 或 數值(1,-1)
    • label.y: 接受 "top""bottom", 或 數值(1,-1)
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "purple") +
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")),
label.x = "right",
label.y = "top",
parse = TRUE
) +
labs(title = "手動調整標籤位置") +
theme_classic()
raw-image

4. 改變標籤的外觀

你可以像其他 geom_text 或 geom_label 一樣,設定標籤的顏色、大小、字體等。你也可以將 geom 參數從預設的 "text" 改為 "label",讓標籤帶有背景框。

ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "orange") +
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")),
label.x = "right",
label.y = "top",
geom = "label_npc", # 標籤帶有背景框
color = "darkblue", # 標籤文字顏色
size = 4, # 標籤文字大小
fill = "lightyellow", # 標籤背景顏色
parse = TRUE
) +
labs(title = "客製化標籤外觀") +
theme_classic()
raw-image

ggpmisc 套件的 stat_poly_eq() 函數是 ggplot2 用戶的必備工具。它大大簡化了在圖表上直接顯示線性迴歸模型統計資訊的過程,讓你的資料視覺化作品既專業又具資訊量。透過靈活運用其參數,可以輕鬆打造出符合各種需求的迴歸分析圖表。

5.與分面 (Faceting) 結合使用

stat_poly_eq() 的一個強大之處在於,當你使用 facet_wrap() 或 facet_grid() 對圖表進行分面時,它會為每個子圖獨立計算並顯示迴歸統計資訊,這對於比較不同組別的關係非常方便。

# 範例:按汽缸數 (cyl) 分組,繪製不同車型汽缸數的迴歸分析
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "brown") +
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")),
parse = TRUE
) +
facet_wrap(~ cyl, scales = "free_y") + # 按 cyl 分組,允許 Y 軸自由縮放
labs(title = "不同汽缸數的迴歸分析",
x = "車重 (千磅)",
y = "每加侖英里數 (MPG)") +
theme_classic()
raw-image

總結

ggpmisc 套件的 stat_poly_eq() 函數是 ggplot2 用戶的必備工具。它大大簡化了在圖表上直接顯示線性迴歸模型統計資訊的過程,讓你的資料視覺化作品既專業又具資訊量。透過靈活運用其參數,可以輕鬆打造出符合各種需求的迴歸分析圖表。









留言
avatar-img
留言分享你的想法!
avatar-img
慵懶貓系的小墨魚:數據外的日常觀察
0會員
13內容數
小墨魚,一位白天擅長資料分析與統計建模的數據工作者,夜裡則沉浸在書本與文字裡,透過閱讀與寫作與世界對話。工作之餘,也兼職統計家教,協助學生理解複雜的統計概念與軟體操作。這裡記錄我的書評、生活觀察、科技碎念,有時也寫下關於時間與情緒的小片段。願這些文字,成為我們在日常中相遇的溫柔片刻。
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
在進行多層次線性模型(MLM)當中,有時候我們不只會加入層次1的預測變項。我們也會想加入層次2預測變項。本文將介紹加入層次2預測變項的各種模型,並解釋其公式和R語言操作方法。因為內容比較多,所以篇幅比較長。 多層次線性模型(MLM),截距是表示所有學校的平均值。斜率是指模型中自變量的係數,表
Thumbnail
在進行多層次線性模型(MLM)當中,有時候我們不只會加入層次1的預測變項。我們也會想加入層次2預測變項。本文將介紹加入層次2預測變項的各種模型,並解釋其公式和R語言操作方法。因為內容比較多,所以篇幅比較長。 多層次線性模型(MLM),截距是表示所有學校的平均值。斜率是指模型中自變量的係數,表
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
有時候在其他檔案轉換成SPSS檔時,可能出現在一個變項內,以特定符號將不同數字分開的(如下圖,第三行4,7,8),這時無法用SPSS進行有效分析。本文將說明如何使用SPSS將特定符號分開的數字轉換成不同變項,光看文字可能太過抽象,請看圖文教學。
Thumbnail
有時候在其他檔案轉換成SPSS檔時,可能出現在一個變項內,以特定符號將不同數字分開的(如下圖,第三行4,7,8),這時無法用SPSS進行有效分析。本文將說明如何使用SPSS將特定符號分開的數字轉換成不同變項,光看文字可能太過抽象,請看圖文教學。
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
這篇文章介紹如何使用Python整理資料成百分比資料以及繪製百分比堆疊直條圖。
Thumbnail
這篇文章介紹如何使用Python整理資料成百分比資料以及繪製百分比堆疊直條圖。
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News