本教學涵蓋資料型態、描述統計、視覺化、機率分配、抽樣與估計、假設檢定(含單尾/雙尾)、ANOVA、卡方、相關與迴歸、非參數、檢定力與樣本數、以及可重現流程。所有範例使用 R 內建資料集(
mtcars,iris)與常用套件。
- 環境設定與資料載入
- 資料型態與前處理
- 描述統計與基本視覺化
- 機率與常見分配
- 抽樣、點估計與信賴區間
- 假設檢定概念與單尾/雙尾
- t 檢定:單一樣本、成對、獨立樣本
- 比例檢定與二項分配
- 卡方檢定(適合度、獨立性)
- 單因子 ANOVA 與事後檢定
- 相關與線性迴歸
- 非參數檢定
- 檢定力與樣本數估計
- 可重現與報告建議
- 參考指引
- 附錄:
infer流程(置換/重抽樣) - 快速決策指南
# 建議先設定隨機種子以利重現
set.seed(123)
# 安裝/載入常用套件
packs <- c("tidyverse", "broom", "effectsize", "car", "pwr", "ggpubr", "infer")
to_install <- packs[!packs %in% installed.packages()[, "Package"]]
if (length(to_install) > 0) install.packages(to_install, repos = "https://cloud.r-project.org")
invisible(lapply(packs, library, character.only = TRUE))
# 範例資料
data(mtcars) # 汽車性能資料:連續變數為主
data(iris) # 花卉資料:含類別變數 Species在進行統計分析前,必須正確理解資料型態(data types)並進行合適的前處理。這將影響後續能使用哪些統計方法與模型。
-
數值型(Numerical)
- 連續型(Continuous):可取任意實數,測量值。例如:身高、體重、血壓、
mtcars$mpg。 - 離散型(Discrete):只能取有限整數值,多為計數型資料。例如:家庭人數、突變次數、汽缸數。
- 連續型(Continuous):可取任意實數,測量值。例如:身高、體重、血壓、
-
類別型(Categorical / Factor)
- 名目型(Nominal):純粹分類,沒有順序性。例如:性別(Male/Female)、血型(A/B/AB/O)、
iris$Species。 - 序位型(Ordinal):具備順序,但間隔不一定相等。例如:教育程度(小學 < 國中 < 高中 < 大學)、滿意度量表(非常滿意 > 滿意 > 普通 > 不滿意)。
- 名目型(Nominal):純粹分類,沒有順序性。例如:性別(Male/Female)、血型(A/B/AB/O)、
-
布林型(Logical/Boolean)
- 僅有 TRUE/FALSE(或 0/1),常用於條件判斷或二元分類。
-
文字與字串型(Character/String)
- 純文字描述,通常需轉換為 factor 或重新編碼才能進行統計分析。
-
日期/時間型(Date/Datetime)
- 時間序列資料,例如:病人就診日期、實驗收樣時間。R 中常用
Date,POSIXct類型。
- 時間序列資料,例如:病人就診日期、實驗收樣時間。R 中常用
# 檢查結構與型態
str(mtcars)
class(mtcars$mpg)
class(mtcars$cyl)
# 轉換資料型態
df <- mtcars %>%
mutate(
cyl = factor(cyl, labels = c("4 cylinders", "6 cylinders", "8 cylinders")),
am = factor(am, labels = c("Automatic", "Manual"))
)
str(df)- 檢查缺失值
colSums(is.na(df)) # 各欄位缺失值數量
sum(is.na(df)) # 全資料缺失值總數- 處理策略
- 刪除含缺失值的觀測值(
na.omit) - 以平均數/中位數/眾數填補(適合數值型資料)
- 以最常見類別填補(適合類別型資料)
- 進階:多重插補(multiple imputation)、KNN 插補
- 刪除含缺失值的觀測值(
df_no_na <- na.omit(df) # 刪除缺失值
df$mpg[is.na(df$mpg)] <- mean(df$mpg, na.rm = TRUE) # 以平均數填補- 定義:落在四分位範圍(IQR)之外的極端值
- 檢查方法:
- 箱型圖(boxplot)
- IQR 法則:小於 Q1 - 1.5IQR 或大於 Q3 + 1.5IQR
- Z-score:標準差超過 ±3
# IQR 方法
Q1 <- quantile(df$mpg, 0.25)
Q3 <- quantile(df$mpg, 0.75)
IQR_val <- IQR(df$mpg)
outliers <- df %>% filter(mpg < Q1 - 1.5*IQR_val | mpg > Q3 + 1.5*IQR_val)
outliers
# 視覺化檢查
boxplot(df$mpg, main = "Boxplot of MPG", ylab = "MPG")- 標準化(Standardization):將資料轉換為平均數 0、標準差 1
- 常態化(Normalization / Min-Max Scaling):將資料縮放到 [0,1] 範圍
- 對數轉換(Log Transformation):處理偏態分布,降低極端值影響
# 標準化
df$mpg_z <- scale(df$mpg)
# Min-Max Scaling
df$mpg_norm <- (df$mpg - min(df$mpg)) / (max(df$mpg) - min(df$mpg))
# Log Transformation
df$mpg_log <- log(df$mpg)- 在分析前應明確區分變數型態(數值型 vs 類別型)
- 缺失值與離群值處理是必要步驟,避免偏誤
- 若後續分析需要(如 PCA、迴歸),可能需進行標準化或轉換
- 資料型態的正確設定將決定能否套用正確的統計檢定方法
描述統計(Descriptive Statistics)主要用於 整理、概括與呈現資料特徵,不涉及推論。常見指標包括集中趨勢(平均數、中位數)、離散程度(標準差、四分位距)、分布形狀(偏態、峰度)等。搭配適合的視覺化圖表,可以幫助研究者快速掌握資料特性。
-
平均數(Mean)
- 資料總和除以樣本數
- 受極端值影響較大
-
中位數(Median)
- 排序後的中間值
- 抗極端值能力較佳
-
眾數(Mode)
- 出現次數最多的數值
- 適用於類別資料或離散數值
mean(df$mpg)
median(df$mpg)
mode_mpg <- as.numeric(names(sort(table(df$mpg), decreasing = TRUE)[1]))
mode_mpg- 全距(Range):最大值 - 最小值
- 四分位距(IQR):Q3 - Q1,反映中間 50% 資料的分布範圍
- 變異數(Variance):平均平方離差
- 標準差(SD):變異數開根號,單位與原始資料相同
- 變異係數(CV):標準差 / 平均數,適合不同尺度的比較
range(df$mpg)
IQR(df$mpg)
var(df$mpg)
sd(df$mpg)
sd(df$mpg) / mean(df$mpg) # 變異係數-
偏態(Skewness)
-
0:右偏(長尾在右,平均 > 中位數)
- <0:左偏(長尾在左,平均 < 中位數)
-
-
峰度(Kurtosis)
-
3:尖峰分布(厚尾,極端值多)
- <3:平峰分布(薄尾,極端值少)
-
library(moments)
skewness(df$mpg)
kurtosis(df$mpg)使用 dplyr 可快速進行分組統計,例如比較不同變速箱(am)車輛的油耗(mpg):
df %>%
group_by(am) %>%
summarise(
n = n(),
mean_mpg = mean(mpg),
median_mpg = median(mpg),
sd_mpg = sd(mpg),
IQR_mpg = IQR(mpg)
)適用於 連續數值型資料,觀察分布型態與常態性。
ggplot(df, aes(mpg)) +
geom_histogram(bins = 10, fill = "skyblue", color = "black", alpha = 0.7) +
geom_density(linewidth = 1, color = "red") +
labs(title = "MPG 分布直方圖與密度曲線", x = "Miles per Gallon", y = "頻數")適用於 比較不同組別的分布與離群值。
ggplot(df, aes(am, mpg, fill = am)) +
geom_boxplot(alpha = 0.7) +
labs(title = "不同變速箱類型之 MPG 分布", x = "Transmission", y = "MPG")結合箱型圖與核密度估計,適合觀察分布形狀。
ggplot(df, aes(am, mpg, fill = am)) +
geom_violin(trim = FALSE, alpha = 0.6) +
geom_boxplot(width = 0.1, fill = "white") +
labs(title = "不同變速箱類型之 MPG 分布(小提琴圖)")適用於 類別資料,例如 iris$Species 的樣本數。
ggplot(iris, aes(Species, fill = Species)) +
geom_bar() +
labs(title = "Iris 族群樣本數分布", x = "Species", y = "Count")適用於 連續變數間的關係,例如重量與油耗。
ggplot(df, aes(wt, mpg)) +
geom_point(size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = TRUE, color = "blue") +
labs(title = "車重與油耗關係", x = "Weight (1000 lbs)", y = "MPG")- 單看平均數不足以描述資料,應同時提供中位數與變異指標
- 視覺化建議同時標示原始點與統計摘要,避免誤導
- 對於偏態嚴重的資料,平均數與標準差可能失真,應搭配中位數與 IQR
- 選擇視覺化圖形需依資料型態:
- 連續變數 → 直方圖、箱型圖、散佈圖
- 類別變數 → 長條圖、馬賽克圖
- 描述統計是分析的第一步,幫助研究者快速掌握資料特性
- 搭配合適的圖表(直方圖、箱型圖、散佈圖等),更能有效傳達資訊
- 在報告與論文中,建議同時呈現數值統計摘要與圖形化描述,以提升可解讀性
在統計學中,機率分配(Probability Distribution) 描述了隨機變數可能取值以及對應的機率(或機率密度)。瞭解不同分配的特性,有助於選擇適當的統計方法。
- 定義:連續型分配,呈鐘形曲線,對稱於平均數 μ。
- 參數:平均數 μ(位置)、標準差 σ(尺度)。
- 性質:
- 約 68% 的數據落在 [μ - σ, μ + σ]。
- 約 95% 落在 [μ - 2σ, μ + 2σ]。
- 約 99.7% 落在 [μ - 3σ, μ + 3σ]。
x <- seq(-4, 4, length.out = 200)
df_norm <- data.frame(x = x, y = dnorm(x, mean = 0, sd = 1))
ggplot(df_norm, aes(x, y)) +
geom_line(color = "blue") +
labs(title = "標準常態分配 (μ=0, σ=1)", x = "x", y = "Density")隨機抽樣與常態性檢定:
set.seed(123)
sample_norm <- rnorm(100, mean = 50, sd = 10)
shapiro.test(sample_norm) # Shapiro-Wilk 常態性檢定- 定義:常用於小樣本平均數推論。
- 參數:自由度 df(樣本數 - 1)。
- 性質:
- 與常態分布相似,但尾部較厚。
- 自由度增加時趨近於常態分配。
x <- seq(-4, 4, length.out = 200)
df_t <- data.frame(x = x,
t_df5 = dt(x, df = 5),
t_df30 = dt(x, df = 30))
ggplot(df_t, aes(x)) +
geom_line(aes(y = t_df5, color = "df=5")) +
geom_line(aes(y = t_df30, color = "df=30")) +
labs(title = "t 分配與自由度比較", y = "Density") +
scale_color_manual(values = c("red", "green"))- 定義:k 個獨立標準常態隨機變數平方和的分布。
- 應用:常用於變異數檢定、卡方檢定(適合度與獨立性)。
x <- seq(0, 20, length.out = 200)
df_chi <- data.frame(x = x,
df2 = dchisq(x, df = 2),
df10 = dchisq(x, df = 10))
ggplot(df_chi, aes(x)) +
geom_line(aes(y = df2, color = "df=2")) +
geom_line(aes(y = df10, color = "df=10")) +
labs(title = "卡方分配 (Chi-square)", y = "Density") +
scale_color_manual(values = c("purple", "orange"))- 定義:兩個獨立卡方分配變數,分別除以自由度後的比值。
- 應用:常用於變異數分析(ANOVA)。
x <- seq(0, 5, length.out = 200)
df_f <- data.frame(x = x,
f_3_10 = df(x, df1 = 3, df2 = 10),
f_10_30 = df(x, df1 = 10, df2 = 30))
ggplot(df_f, aes(x)) +
geom_line(aes(y = f_3_10, color = "df1=3, df2=10")) +
geom_line(aes(y = f_10_30, color = "df1=10, df2=30")) +
labs(title = "F 分配", y = "Density") +
scale_color_manual(values = c("brown", "darkblue"))- 定義:n 次獨立伯努利試驗中成功次數的分布。
- 參數:試驗次數 n、成功機率 p。
- 應用:檢驗比例、成功率。
k <- 0:10
pmf_binom <- dbinom(k, size = 10, prob = 0.3)
data.frame(k, pmf_binom) %>%
ggplot(aes(k, pmf_binom)) +
geom_col(fill = "skyblue") +
labs(title = "Binomial(n=10, p=0.3)", x = "成功次數", y = "機率")隨機抽樣:
rbinom(10, size = 10, prob = 0.3)- 定義:單位時間或區間內事件發生次數的分布。
- 參數:λ(單位時間平均發生次數)。
- 應用:罕見事件(交通事故、突變數目)。
k <- 0:15
pmf_pois <- dpois(k, lambda = 4)
data.frame(k, pmf_pois) %>%
ggplot(aes(k, pmf_pois)) +
geom_col(fill = "lightgreen") +
labs(title = "Poisson(λ=4)", x = "事件次數", y = "機率")隨機抽樣:
rpois(10, lambda = 4)- 定義:事件發生間隔時間的分布。
- 參數:λ(事件發生率)。
- 應用:等待時間、壽命分析。
x <- seq(0, 5, length.out = 200)
df_exp <- data.frame(x = x, y = dexp(x, rate = 1))
ggplot(df_exp, aes(x, y)) +
geom_line(color = "darkgreen") +
labs(title = "Exponential(λ=1)", x = "x", y = "Density")-
常態分布:最重要的分布,許多統計方法假設資料常態。
-
t 分布:小樣本平均數推論。
-
卡方 / F 分布:變異數分析與假設檢定常用。
-
二項 / 卜瓦松 / 指數:常用於離散事件與機率建模。
-
R 提供
r*(隨機產生)、d*(密度/機率)、p*(累積分布)、q*(分位數)函數族群,非常方便:rnorm(),dnorm(),pnorm(),qnorm()rbinom(),dbinom(),pbinom(),qbinom()rpois(),dpois(),ppois(),qpois()
在統計分析中,我們往往無法取得母體(Population)的完整資料,因此需要透過抽樣(Sampling)取得樣本(Sample),並進行點估計(Point Estimation)與區間估計(Interval Estimation, CI)。這些方法能幫助我們合理推論母體參數。
- 節省成本與時間
- 取得對母體的合理推論
- 確保樣本具有代表性
-
簡單隨機抽樣(Simple Random Sampling, SRS)
- 每個樣本有相同機會被選中
- R 函數:
sample()
-
系統抽樣(Systematic Sampling)
- 按固定間隔選取樣本,例如每隔 k 個取一個
-
分層抽樣(Stratified Sampling)
- 先依特徵(性別、年齡等)分層,再各層隨機抽樣
- 保證各層都有代表性
-
群集抽樣(Cluster Sampling)
- 以群體為單位(例如學校、地區),隨機抽取部分群集
# 簡單隨機抽樣
set.seed(42)
sample_data <- sample(iris$Sepal.Length, size = 30, replace = TRUE)
head(sample_data)- 使用樣本統計量(Sample Statistic)估計母體參數(Population Parameter)
- 常見例子:
- 樣本平均數 ̄x → 母體平均數 μ
- 樣本比例 p̂ → 母體比例 p
# 母體:假設 iris$Sepal.Length 為母體
pop <- iris$Sepal.Length
# 抽樣 n=30
set.seed(123)
samp <- sample(pop, size = 30, replace = TRUE)
# 點估計:樣本平均數
mean(samp)- 區間估計提供「母體參數可能落入的範圍」
- 信賴水準(Confidence Level, 1-α):常見為 95%
- 含義:若重複抽樣多次,95% 的區間將涵蓋母體參數
- 已知母體標準差 σ → Z 分布
- 未知 σ(通常情況) → 使用樣本標準差與 t 分布
xbar <- mean(samp)
s <- sd(samp)
n <- length(samp)
alpha <- 0.05
tcrit <- qt(1 - alpha/2, df = n - 1)
ci <- xbar + c(-1, 1) * tcrit * s / sqrt(n)
c(mean = xbar, lower = ci[1], upper = ci[2])# 假設 100 人調查中有 40 人支持某政策
x <- 40
n <- 100
prop.test(x, n, conf.level = 0.95)當分布未知或樣本量有限時,可透過重抽樣(Bootstrap)估計信賴區間。
library(boot)
# 定義統計量(樣本平均數)
boot_mean <- function(data, indices) {
mean(data[indices])
}
# Bootstrap 1000 次
set.seed(123)
boot_res <- boot(data = samp, statistic = boot_mean, R = 1000)
boot.ci(boot_res, type = c("perc", "bca"))透過 ggplot2 繪製平均數與信賴區間。
library(ggplot2)
df_ci <- data.frame(
group = "Sample",
mean = xbar,
lower = ci[1],
upper = ci[2]
)
ggplot(df_ci, aes(x = group, y = mean)) +
geom_point(size = 3, color = "blue") +
geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2, color = "red") +
labs(title = "平均數 95% 信賴區間", y = "Value", x = "")- 抽樣是推論統計的基礎,方法需確保代表性
- 點估計提供單一數值,但無法反映不確定性
- 信賴區間能提供估計精確度與不確定性範圍
- Bootstrap 為非參數方法,適合小樣本或未知分布情境
- 報告結果時,建議同時提供估計值與信賴區間
假設檢定(Hypothesis Testing)是統計推論的核心方法,用來檢驗樣本數據是否支持某一個關於母體的假設。
-
提出假設
- 虛無假設 (Null Hypothesis, H0):通常為「無差異、無效果」的假設。例如:μ = 100。
- 對立假設 (Alternative Hypothesis, H1 或 Ha):與 H0 相對,通常為「有差異、有效果」的假設。例如:μ ≠ 100。
-
選擇適當的檢定方法
- 依據資料型態、分布、樣本數決定使用 t 檢定、卡方檢定、ANOVA 等。
-
選擇顯著水準 (Significance Level, α)
- 常見 α = 0.05,代表容許 5% 的第一類錯誤(Type I Error)。
-
計算檢定統計量 (Test Statistic) 與 p 值 (p-value)
- 檢定統計量:樣本數據轉換後的標準化統計值。
- p 值:在 H0 成立下,觀察到目前或更極端結果的機率。
-
作決策
- 若 p 值 < α → 拒絕 H0,支持 H1。
- 若 p 值 ≥ α → 無法拒絕 H0。
-
第一類錯誤 (Type I Error):錯誤拒絕 H0(誤判為有效果)。
- 機率 = α。
-
第二類錯誤 (Type II Error):錯誤接受 H0(實際有差異卻未偵測出)。
- 機率 = β。
-
檢定力 (Power):1 - β,表示檢定正確拒絕 H0 的能力。檢定力越高越好。
- 對立假設 H1:參數「不等於」某值
- 適用於「只要不同就算顯著」的情境
- 常見於大多數實驗設計,保守且通用
數學表示:
- H0: μ = μ0
- H1: μ ≠ μ0
# 雙尾檢定:檢查平均 mpg 是否不同於 20
t.test(df$mpg, mu = 20, alternative = "two.sided")- 對立假設 H1:參數「大於」或「小於」某值
- 適用於有明確方向性假設的情境(需事先設定,不能事後修改)
數學表示:
- H0: μ ≤ μ0, H1: μ > μ0 (右尾檢定)
- H0: μ ≥ μ0, H1: μ < μ0 (左尾檢定)
# 單尾檢定:檢查平均 mpg 是否大於 20
t.test(df$mpg, mu = 20, alternative = "greater")
# 單尾檢定:檢查平均 mpg 是否小於 20
t.test(df$mpg, mu = 20, alternative = "less")| 特徵 | 單尾檢定 | 雙尾檢定 |
|---|---|---|
| 假設方向 | 有方向性(大於/小於) | 無方向性(不等於) |
| 檢定力 | 在正確方向時較高 | 分散至兩側,較保守 |
| 適用情境 | 有明確方向性假設,且事先規劃 | 一般假設檢定,無方向性或不確定方向 |
| 錯誤風險 | 方向假設錯誤時,風險高 | 錯誤風險較低 |
以下示意圖顯示單尾與雙尾檢定的差異(以標準常態分布為例,α=0.05):
- 雙尾檢定:將 α/2 分配到兩側臨界區。
- 單尾檢定:將 α 集中在一側。
x <- seq(-4, 4, 0.01)
y <- dnorm(x)
alpha <- 0.05
z_crit_two <- qnorm(1 - alpha/2)
z_crit_one <- qnorm(1 - alpha)
plot(x, y, type = "l", main = "單尾 vs 雙尾檢定", ylab = "Density")
# 雙尾區域
abline(v = c(-z_crit_two, z_crit_two), col = "red", lty = 2)
# 單尾區域
abline(v = z_crit_one, col = "blue", lty = 2)
legend("topright", legend = c("雙尾檢定", "單尾檢定"),
col = c("red", "blue"), lty = 2)- 假設檢定透過樣本數據來評估母體參數是否支持某假設。
- p 值是檢定的核心指標,需與顯著水準 α 比較。
- 選擇單尾須在分析前就確立明確方向性與理論支持;否則預設使用雙尾較保守。
- 在研究報告中,應明確說明假設設定與檢定方向,避免誤導或事後操作。
t 檢定(t-test)是一種常見的統計檢定方法,用於比較平均數之間是否存在顯著差異。它基於 Student's t 分布,適合樣本數較小、母體變異數未知的情況。
檢驗「樣本平均數是否等於某特定值」。
- H0: μ = μ0
- H1: μ ≠ μ0(雙尾)、μ > μ0(右尾)、μ < μ0(左尾)
# 假設檢查 mtcars 的 mpg 平均是否等於 20
t.test(df$mpg, mu = 20, alternative = "two.sided") # 雙尾檢定
# 單尾檢定:平均 mpg 是否大於 20
t.test(df$mpg, mu = 20, alternative = "greater")
# 單尾檢定:平均 mpg 是否小於 20
t.test(df$mpg, mu = 20, alternative = "less")檢驗「同一群體在不同情境下的平均數是否不同」,例如實驗前後測量值。
- H0: μ_diff = 0
- H1: μ_diff ≠ 0
# 模擬資料:介入前後測量值
set.seed(123)
before <- rnorm(30, mean = 50, sd = 10)
after <- before + rnorm(30, mean = 3, sd = 8)
# 成對 t 檢定
t.test(before, after, paired = TRUE, alternative = "two.sided")- 適用於同一受試者重複測量,或配對樣本設計(如孿生兄弟、左右眼)。
- 需檢查差值是否近似常態分布。
# 差值常態性檢查
diff_val <- after - before
shapiro.test(diff_val)檢驗「兩組獨立樣本的平均數是否不同」。
- H0: μ1 = μ2
- H1: μ1 ≠ μ2
# 比較自排 vs 手排車輛的 mpg
t.test(mpg ~ am, data = df, var.equal = FALSE, alternative = "two.sided")
# 若認為兩組變異數相等,可設定 var.equal = TRUE
t.test(mpg ~ am, data = df, var.equal = TRUE)- 常態性檢查(Shapiro-Wilk)
- 變異數同質性檢查(Levene’s test)
# 常態性檢查
by(df$mpg, df$am, shapiro.test)
# 變異數同質性檢查
library(car)
leveneTest(mpg ~ am, data = df)獨立樣本 t 檢定建議回報 Cohen’s d。
library(effectsize)
cohens_d(mpg ~ am, data = df)- 雙尾檢定:檢查是否「有差異」,不限定方向。
- 單尾檢定:檢查是否「大於」或「小於」。
- 單尾檢定需事先設定方向,否則建議使用雙尾以避免偏差。
- 單一樣本 t 檢定:檢查樣本平均是否等於某值。
- 成對 t 檢定:比較同一群體在不同情境下的平均差異。
- 獨立樣本 t 檢定:比較兩組不同群體的平均差異。
- 使用前需檢查 常態性與變異數同質性。
- 報告時應提供 平均數 ± 標準差、t 值、自由度、p 值、效果量。
比例檢定(Proportion Test)用於檢驗母體比例是否等於某假設值,或比較兩個(或多個)群體比例之間是否有顯著差異。它的理論基礎是 二項分配(Binomial Distribution)。
- 適用於 n 次獨立試驗,每次只有「成功/失敗」兩種結果,且成功機率為 p。
- 例如:
- 擲硬幣出現正面的次數(成功 = 正面,p=0.5)
- 臨床試驗中病人痊癒的次數(成功 = 痊癒,p=0.7)
其中:
- k = 成功次數
- n = 試驗次數
- p = 成功機率
# 計算 n=10, p=0.3 時,不同成功次數的機率
k <- 0:10
dbinom(k, size = 10, prob = 0.3)
# 繪製機率分布
barplot(dbinom(k, size = 10, prob = 0.3), names.arg = k,
main = "Binomial(n=10, p=0.3)", ylab = "P(X=k)")檢驗樣本比例是否與母體假設比例 p0 相等。
- H0: p = p0
- H1: p ≠ p0(雙尾)、p > p0(右尾)、p < p0(左尾)
適用於小樣本,計算精確二項分布的 p 值。
# 範例:100 人調查中有 92 人支持政策,檢驗支持率是否大於 0.9
binom.test(x = 92, n = 100, p = 0.9, alternative = "greater")適用於大樣本,利用常態近似。
prop.test(x = 92, n = 100, p = 0.9, alternative = "greater", correct = TRUE)檢驗兩個群體的比例是否相同。
- H0: p1 = p2
- H1: p1 ≠ p2
# 假設兩組治療方式的成功數
x <- c(45, 30) # 成功次數
n <- c(50, 50) # 總樣本數
prop.test(x, n, alternative = "two.sided", correct = TRUE)解讀:若 p 值 < 0.05,代表兩組比例有顯著差異。
prop.test() 也可延伸至多組比例比較。
# 三組樣本成功數
x <- c(30, 45, 25)
n <- c(50, 60, 55)
prop.test(x, n)比例檢定同時會輸出信賴區間,用來描述「母體比例可能落入的範圍」。
# 單一比例信賴區間
prop.test(x = 92, n = 100, p = 0.9, conf.level = 0.95)- 小樣本建議使用 binom.test(),避免近似誤差。
- prop.test() 預設使用 連續性修正 (Yates’ correction),若樣本數大,可設定
correct=FALSE。 - 結果報告應包含:樣本比例、信賴區間、檢定統計量、p 值。
- 若為多組比例比較,需搭配事後分析(例如成對比例檢定)進一步比較。
- 二項分布描述成功次數的隨機性。
binom.test()適合小樣本,精確檢定。prop.test()適合大樣本,近似檢定,可用於一組或多組比例比較。- 報告時建議同時呈現比例估計值與信賴區間,以提升可解釋性。
卡方檢定(Chi-square test)是一種常用於類別資料分析的統計方法,主要分為:
- 適合度檢定(Goodness-of-fit test):檢驗觀察到的類別分布是否符合理論分布。
- 獨立性檢定(Test of independence):檢驗兩個類別變數是否具有統計上的關聯性。
適合度檢定用來判斷「樣本觀察的分布是否與理論假設分布一致」。例如:檢查骰子是否公平。
- H0: 觀察分布與理論分布相符
- H1: 觀察分布與理論分布不相符
# 觀察值(投擲骰子 90 次)
obs <- c(10, 14, 18, 15, 17, 16)
# 理論分布(公平骰子,每面機率均等 1/6)
exp_prob <- rep(1/6, 6)
# 卡方適合度檢定
chisq.test(x = obs, p = exp_prob)- X-squared:卡方統計量
- df:自由度 = (類別數 - 1)
- p-value:若 < 0.05,則拒絕 H0,代表觀察分布與理論分布差異顯著。
檢驗兩個類別變數是否獨立。例如:檢查不同品種 (Species) 與花萼長度分類 (SepalLong) 是否有關。
- H0: 兩個變數相互獨立
- H1: 兩個變數不獨立(存在關聯性)
library(dplyr)
# 建立新的類別變數:以中位數分群
iris2 <- iris %>%
mutate(SepalLong = ifelse(Sepal.Length > median(Sepal.Length), "Long", "Short"))
# 建立列聯表
tab <- table(iris2$Species, iris2$SepalLong)
tab
# 卡方獨立性檢定
chisq.test(tab)- X-squared:卡方統計量
- df:自由度 = (列數 - 1) * (行數 - 1)
- p-value:若 < 0.05,則拒絕 H0,代表兩個變數之間有顯著關聯。
當樣本數太小或期望次數 < 5 時,卡方檢定可能不可靠,此時可使用 Fisher 精確檢定。
fisher.test(tab)# 使用 mosaicplot 視覺化列聯表
mosaicplot(tab, main = "Species vs Sepal Length (Long/Short)",
xlab = "Species", ylab = "Sepal Length Category",
color = TRUE)- 適合度檢定需提供「理論分布」,並確保樣本總數足夠大。
- 獨立性檢定需檢查列聯表中每格的期望次數,建議不小於 5。
- 小樣本情境下,建議使用 Fisher’s Exact Test。
- 若有多重比較問題,可考慮 Bonferroni 校正。
- 報告時應提供:檢定統計量、自由度、p 值,以及必要的效果量(如 Cramér’s V)。
- 適合度檢定:檢查樣本分布是否符合理論分布。
- 獨立性檢定:檢查兩個類別變數是否相關。
- Fisher 精確檢定:適用於小樣本或期望次數過低的情況。
- 建議搭配圖表(馬賽克圖、列聯表熱圖)以輔助解讀。
單因子變異數分析(One-way ANOVA)用於檢驗三組或以上的平均數是否存在顯著差異。若檢定結果顯示顯著,需進一步進行 事後檢定(Post-hoc test),以確定哪些組別之間有差異。
- H0: 所有組別的平均數相等 (μ1 = μ2 = μ3 = …)
- H1: 至少有一組平均數不同
-
總變異 (Total Variance) 可以拆分為:
- 組間變異 (Between-group variance):組別之間平均數的差異
- 組內變異 (Within-group variance):組別內部數據的隨機變異
-
ANOVA 透過比較 組間變異 / 組內變異 形成 F 統計量:
其中:
- MS = 均方(Mean Square) = SS / df
- SS = 平方和(Sum of Squares)
- df = 自由度(degree of freedom)
檢驗三個品種 (Species) 的花萼長度 (Sepal.Length) 是否存在差異。
# 單因子 ANOVA
aov_fit <- aov(Sepal.Length ~ Species, data = iris)
summary(aov_fit)- Df:自由度
- Sum Sq / Mean Sq:平方和與均方
- F value:F 檢定統計量
- Pr(>F):p 值,若 < 0.05,代表至少有一組不同
在使用 ANOVA 前,需檢查假設條件:
-
常態性:每組資料應近似常態分布
- Shapiro-Wilk test
- Q-Q plot
-
變異數同質性:各組的變異數應相等
- Levene’s Test
# 常態性檢查(以殘差為例)
shapiro.test(residuals(aov_fit))
# Q-Q Plot
qqnorm(residuals(aov_fit)); qqline(residuals(aov_fit))
# 變異數同質性檢查
library(car)
leveneTest(Sepal.Length ~ Species, data = iris)若 ANOVA 顯著,需進一步比較各組別間的差異。
TukeyHSD(aov_fit)pairwise.t.test(iris$Sepal.Length, iris$Species,
p.adjust.method = "bonferroni")library(multcomp)
dunnett_test <- glht(aov_fit, linfct = mcp(Species = "Dunnett"))
summary(dunnett_test)# 箱型圖顯示三組分布
library(ggplot2)
ggplot(iris, aes(Species, Sepal.Length, fill = Species)) +
geom_boxplot() +
labs(title = "不同品種的花萼長度比較")
# Tukey HSD 結果視覺化
plot(TukeyHSD(aov_fit))- ANOVA 只能檢驗「是否存在差異」,不能指出差異在哪些組別 → 必須進行事後檢定。
- 當常態性或等變異假設不成立時,可使用 Kruskal-Wallis 檢定 作為非參數替代方法。
- 報告結果時,建議提供:F 值、自由度、p 值,以及事後檢定結果。
- 若組數很多,需考慮多重比較的顯著水準調整。
- 單因子 ANOVA 檢驗多組平均數是否相等。
- 假設條件:常態性與變異數同質性。
- 若結果顯著,需進一步進行事後檢定(Tukey, Bonferroni, Dunnett)。
- 視覺化有助於呈現組間差異。
相關分析與迴歸分析是統計學中常用來探討變數間關係的工具:
- 相關(Correlation):衡量兩個變數之間線性關係的強度與方向。
- 迴歸(Regression):建立數學模型來描述自變數(X)與應變數(Y)的關係,並用於預測。
- 衡量兩個連續變數的線性相關。
- 取值範圍:-1 ~ +1
- +1:完全正相關
- -1:完全負相關
- 0:無線性相關
cor.test(df$mpg, df$wt, method = "pearson") # 油耗 vs 車重- 非參數方法,基於秩次(rank),適合於非常態或序位變數。
cor.test(df$mpg, df$wt, method = "spearman")- 另一種非參數秩相關,適合樣本數小。
cor.test(df$mpg, df$wt, method = "kendall")一次檢視多個變數間的相關。
cor(df[, c("mpg", "wt", "hp", "qsec")])library(ggplot2)
ggplot(df, aes(wt, mpg)) +
geom_point(size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = TRUE, color = "blue") +
labs(title = "車重與油耗相關", x = "重量 (1000 lbs)", y = "MPG")- Y:應變數(因變數)
- X:自變數(解釋變數)
- β0:截距(intercept)
- β1:斜率(slope),表示 X 每增加 1 單位,Y 的平均變化量
- ε:誤差項
lm_fit <- lm(mpg ~ wt, data = df)
summary(lm_fit)- Estimate:迴歸係數(β0, β1)
- Std. Error:標準誤
- t value, Pr(>|t|):檢驗迴歸係數是否顯著
- Multiple R-squared:決定係數 (R²),解釋模型解釋力
ggplot(df, aes(wt, mpg)) +
geom_point(size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = TRUE, color = "red") +
labs(title = "單變量線性迴歸:MPG ~ Weight", x = "重量 (1000 lbs)", y = "MPG")lm_fit2 <- lm(mpg ~ wt + hp + cyl, data = df)
summary(lm_fit2)多元迴歸需注意自變數間是否高度相關(共線性)。可用 VIF (Variance Inflation Factor) 判斷。
library(car)
vif(lm_fit2) # VIF > 5 或 10 可能代表共線性問題線性迴歸的假設包括:
- 殘差獨立性
- 殘差常態性
- 殘差變異數同質性(同方差性)
- 線性關係
par(mfrow = c(2, 2))
plot(lm_fit)
par(mfrow = c(1, 1))- Residuals vs Fitted:檢查線性關係與同方差性
- Normal Q-Q:檢查常態性
- Scale-Location:檢查殘差分布是否均勻
- Residuals vs Leverage:檢查離群值與高影響點
- 決定係數 (R²):解釋自變數能解釋的 Y 變異比例。
- 調整後 R²:考慮自變數數量,避免過度擬合。
- 效果量 (Effect size):可報告 Cohen’s f²。
library(effectsize)
model_parameters(lm_fit2)- 相關分析:用於描述變數間線性關係,不代表因果。
- 單變量迴歸:建立 Y 與單一 X 的線性模型。
- 多元迴歸:可同時考慮多個解釋變數,但需注意共線性。
- 模型診斷:必須檢查殘差特性,以確保模型有效。
- 報告:應包含迴歸係數、p 值、R²、效果量及診斷檢查。
非參數檢定(Non-parametric Tests)是一類不依賴母體分布假設(例如常態分布)的統計方法,適用於:
- 資料不符合常態性假設(Shapiro-Wilk 檢定失敗)
- 樣本數過小,難以驗證分布假設
- 資料型態為序位變數(Ordinal Data)
- 檢驗樣本中位數是否等於某假設值。
- 適用於無法假設常態分布的情況。
# 使用 BSDA 套件
library(BSDA)
SIGN.test(x = c(5, 7, 9, 6, 10), md = 7)- 用於兩個獨立樣本的中位數比較。
- 非常態時替代獨立樣本 t 檢定。
# mpg ~ am (Automatic vs Manual)
wilcox.test(mpg ~ am, data = df, paired = FALSE)- 用於成對樣本(配對設計)的比較。
- 非常態時替代配對樣本 t 檢定。
# 模擬資料:治療前後比較
set.seed(123)
before <- rnorm(20, mean = 50, sd = 10)
after <- before + rnorm(20, mean = 2, sd = 5)
wilcox.test(before, after, paired = TRUE)- 用於三組或以上獨立樣本的中位數比較。
- 非常態時替代單因子 ANOVA。
kruskal.test(Sepal.Length ~ Species, data = iris)- 用於三組或以上成對樣本的比較。
- 非常態時替代重複量數 ANOVA。
# 模擬資料
set.seed(123)
scores <- matrix(c(5,6,7, 8,7,9, 6,8,7, 7,9,10), nrow = 4, byrow = TRUE)
friedman.test(scores)- 衡量兩變數秩次間的相關性。
cor.test(df$mpg, df$wt, method = "spearman")- 適合小樣本,衡量一致性。
cor.test(df$mpg, df$wt, method = "kendall")- 適用於類別變數之間的獨立性檢驗。
tab <- table(iris$Species, iris$Sepal.Width > median(iris$Sepal.Width))
chisq.test(tab)- 適合小樣本或期望次數過低時。
fisher.test(tab)即使使用非參數檢定,也應提供效果量:
- Mann–Whitney U → rank-biserial correlation
- Wilcoxon signed-rank → matched rank-biserial correlation
- Kruskal-Wallis → eta squared (η²)
library(rstatix)
wilcox_test_result <- wilcox.test(mpg ~ am, data = df)
rstatix::wilcox_effsize(df, mpg ~ am)- 非參數檢定雖然不要求常態性,但通常統計力(power)低於對應的參數檢定。
- 適用於中位數或秩次比較,而非平均數。
- 結果解讀時應謹慎,並避免過度推廣。
- 報告時建議提供:檢定方法、統計量、p 值與效果量。
- 兩組比較:Mann–Whitney U(獨立樣本)、Wilcoxon signed-rank(配對樣本)。
- 多組比較:Kruskal–Wallis(獨立樣本)、Friedman(配對樣本)。
- 相關分析:Spearman’s rho、Kendall’s tau。
- 類別資料:卡方檢定、Fisher 精確檢定。
- 非參數方法不依賴分布假設,適合小樣本或序位資料。
在進行統計檢定時,除了關注顯著性(p 值)之外,還需要考慮檢定力(Power)與所需樣本數(Sample Size),以確保研究設計的有效性與可靠性。
- 拒絕虛無假設 H0 的門檻,常用 α = 0.05。
- 表示允許 第一類錯誤 (Type I error) 的機率。
- 定義:在 H1 為真時,正確拒絕 H0 的機率。
- 計算公式:Power = 1 - β,其中 β 為 第二類錯誤 (Type II error) 的機率。
- 一般建議 Power ≥ 0.8(80%)。
- 樣本數 (n):越大,檢定力越高。
- 效果量 (Effect size):越大,越容易檢出差異。
- 顯著水準 (α):設定越寬鬆 (如 0.1),檢定力越高,但第一類錯誤風險也越大。
- 樣本變異數 (σ²):越小,檢定力越高。
效果量用於衡量差異的實質大小,而非僅僅依賴 p 值。
-
t 檢定:Cohen’s d
$$ d = \frac{M_1 - M_2}{SD_{pooled}} $$ -
ANOVA:Eta squared (η²), Omega squared (ω²)
-
相關分析:相關係數 r
-
比例檢定:Cohen’s h
library(effectsize)
# 獨立樣本 t 檢定效果量
cohens_d(mpg ~ am, data = df)library(pwr)
# 假設效果量 d = 0.6, 每組 n = 25, α = 0.05, 雙尾
pwr.t.test(d = 0.6, n = 25, sig.level = 0.05,
type = "two.sample", alternative = "two.sided")輸出將包含檢定力 (power)。
# 假設效果量 d = 0.5, 檢定力 = 0.8, α = 0.05
pwr.t.test(d = 0.5, power = 0.8, sig.level = 0.05,
type = "two.sample", alternative = "two.sided")結果會給出所需的樣本數 n。
# 假設相關係數 r = 0.3, 檢定力 = 0.8, α = 0.05
pwr.r.test(r = 0.3, power = 0.8, sig.level = 0.05,
alternative = "two.sided")# 假設效果量 w = 0.3, 自由度 df = 1, 檢定力 = 0.8, α = 0.05
pwr.chisq.test(w = 0.3, df = 1, power = 0.8, sig.level = 0.05)library(ggplot2)
# 計算不同樣本數下的檢定力
sample_sizes <- seq(10, 100, by = 5)
powers <- sapply(sample_sizes, function(n) {
pwr.t.test(d = 0.5, n = n, sig.level = 0.05,
type = "two.sample", alternative = "two.sided")$power
})
df_power <- data.frame(sample_size = sample_sizes, power = powers)
ggplot(df_power, aes(sample_size, power)) +
geom_line(color = "blue", linewidth = 1.2) +
geom_hline(yintercept = 0.8, linetype = "dashed", color = "red") +
labs(title = "樣本數與檢定力的關係", x = "樣本數", y = "檢定力")- 研究設計時應事先進行 樣本數估計,避免樣本不足導致低檢定力。
- p 值顯著 ≠ 效果大,應同時報告效果量與信賴區間。
- 過大的樣本數可能導致檢出微小且無實質意義的差異。
- 不同統計方法有對應的效果量指標與 power 分析方法。
- 檢定力:反映檢驗能正確拒絕虛無假設的能力,一般要求 ≥ 0.8。
- 樣本數估計:需根據效果量、顯著水準與期望檢定力來決定。
- R 提供
pwr套件,可進行 t 檢定、相關、卡方檢定 等的檢定力分析。 - 研究報告建議同時呈現 效果量、信賴區間與檢定力,提升研究可信度。
在現代科學研究中,可重現性(Reproducibility) 與 透明報告(Transparent Reporting) 是確保研究可靠性的重要基石。統計分析除了追求結果的正確性,也必須讓他人能夠在相同條件下重現相同的結果。
- 研究驗證:他人能夠使用相同的數據與方法重現結果。
- 降低錯誤:完整記錄流程有助於避免因手動操作而引入的人為錯誤。
- 加速合作:同儕或跨領域合作研究更容易理解與使用你的分析流程。
- 提升可信度:許多期刊與資助單位要求可重現性作為投稿與審查標準。
- 保存 原始數據 (Raw data),避免直接修改。
- 建立 中間處理檔案 (Processed data) 與 最終分析檔案 (Final dataset)。
- 使用一致的檔案命名規範,例如:
project_dataset_raw.csv,analysis_cleaned.csv。
- 將所有分析步驟寫入 程式碼檔案(R script 或 RMarkdown),避免僅依靠手動操作。
- 在程式碼中加入 註解,說明每一步的目的。
- 使用 版本控制系統 (Git/GitHub) 追蹤修改歷史。
- 記錄 R 與套件版本(建議使用
sessionInfo()或renv)。 - 在團隊合作時,使用相同的套件環境以避免版本不一致問題。
# 匯出 session 資訊
sessionInfo()
# 使用 renv 建立環境
install.packages("renv")
renv::init() # 初始化專案環境
renv::snapshot() # 記錄目前套件版本
renv::restore() # 重現套件環境- 使用 R Markdown 或 Quarto 撰寫可重現報告(結合程式碼、文字、圖表)。
- 在大型分析中,建議使用 工作流程管理工具(如 Makefile、Snakemake、Drake、targets)。
- 清楚交代 使用的統計方法(如 t 檢定、ANOVA、線性迴歸)。
- 指出 假設檢查(常態性檢定、變異數同質性檢定)。
- 說明 單尾或雙尾檢定 的選擇理由。
建議包含以下要素:
- 估計值(平均數、差異、迴歸係數等)
- 信賴區間 (CI)
- 檢定統計量與自由度(如 t, F, χ² 值)
- p 值(精確至三位小數,若 <0.001 則報告為 p < 0.001)
- 效果量 (Effect size)(如 Cohen’s d, R², η²)
範例:
- 平均差異報告: M = 5.3, SD = 1.2, t(28) = 2.45, p = 0.021, Cohen’s d = 0.46
- ANOVA 報告: F(2, 57) = 4.32, p = 0.018, η² = 0.13
- 使用圖表輔助文字說明,提升可讀性。
- 建議圖中加入 誤差線(SE 或 CI) 與 原始數據點。
- 避免只報告 p 值,而不顯示實際數據。
library(ggplot2)
ggplot(df, aes(am, mpg)) +
geom_boxplot() +
geom_jitter(width = 0.1, alpha = 0.5) +
labs(title = "不同變速箱類型的 MPG 分布",
x = "Transmission", y = "MPG")- 方法 (Methods):資料來源、樣本大小、統計方法、軟體與套件版本。
- 結果 (Results):統計摘要(表格)、圖表、效果量與解釋。
- 附錄 (Appendix):完整程式碼與數據處理細節。
- APA (American Psychological Association) 指南:強調效果量與信賴區間的重要性。
- CONSORT (臨床試驗報告標準):臨床醫學領域的標準化報告框架。
- STROBE (觀察性研究報告準則):適用於流行病學與觀察性研究。
- Open Science Framework (OSF):建議研究公開數據與程式碼,促進可重現性。
- 可重現性:保存原始數據、撰寫完整程式碼、使用版本控制與套件環境管理。
- 報告透明度:需完整描述統計方法、假設檢查、檢定結果、效果量。
- 建議做法:結合數據、程式碼與解釋文字的整合文件(如 R Markdown),並公開於 GitHub/OSF。
- 最終目標:讓任何研究者在相同資料與條件下都能得到相同結論。
在進行統計分析與撰寫研究報告時,使用可靠的參考資料與遵循標準化的指引,可以確保研究的嚴謹性與可重現性。以下整理常用的 書籍、套件文件、國際準則與線上資源,提供學習與報告的依據。
-
《R for Data Science》
- 作者:Hadley Wickham & Garrett Grolemund
- 重點:以 R 與 tidyverse 進行資料整理、視覺化與基礎分析。
- 線上版本:https://r4ds.had.co.nz
-
《An Introduction to Statistical Learning (ISL)》
- 作者:Gareth James, Daniela Witten, Trevor Hastie, Robert Tibshirani
- 重點:淺顯易懂的機器學習與統計建模入門書籍,附有 R 範例。
- 免費下載:https://www.statlearning.com
-
《Modern Applied Statistics with S》
- 作者:Venables & Ripley
- 重點:涵蓋線性與廣義線性模型、多變量方法、樹模型等。
-
《Practical Statistics for Data Scientists》
- 作者:Peter Bruce, Andrew Bruce, Peter Gedeck
- 重點:結合統計與資料科學的應用。
-
基礎統計檢定
stats套件:包含t.test,chisq.test,aov等。- 文件:https://stat.ethz.ch/R-manual
-
效果量與統計報告
effectsize套件:提供 Cohen’s d, η², R² 等效果量計算。- 文件:https://easystats.github.io/effectsize/
-
檢定力與樣本數估計
pwr套件:進行 t 檢定、相關、卡方等的 power analysis。- 文件:https://cran.r-project.org/package=pwr
-
可重現環境
renv套件:管理與重現 R 套件環境。- 文件:https://rstudio.github.io/renv/
-
資料視覺化
ggplot2:R 最廣泛使用的繪圖套件。- 文件:https://ggplot2.tidyverse.org
-
APA (American Psychological Association) Publication Manual
- 重點:規範統計結果報告方式(包含效果量與信賴區間)。
-
CONSORT (Consolidated Standards of Reporting Trials)
- 適用於隨機對照臨床試驗(RCT)的報告標準。
- 官方網站:http://www.consort-statement.org
-
STROBE (Strengthening the Reporting of Observational Studies in Epidemiology)
- 適用於觀察性研究(cohort, case-control, cross-sectional)。
- 官方網站:https://www.strobe-statement.org
-
PRISMA (Preferred Reporting Items for Systematic Reviews and Meta-Analyses)
- 系統性回顧與統合分析的報告準則。
- 官方網站:http://www.prisma-statement.org
-
ICMJE (International Committee of Medical Journal Editors)
- 醫學研究投稿指引。
- 官方網站:http://www.icmje.org
-
Coursera / edX 線上課程
- Data Science Specialization (Johns Hopkins University)
- Statistical Learning (Stanford University)
-
YouTube 教學頻道
- StatQuest with Josh Starmer(以淺顯方式解釋統計與機器學習)
- R Programming Tutorials
-
R-bloggers
- R 使用者社群分享的教學文章與範例。
- 網址:https://www.r-bloggers.com
- 學習統計方法需同時參考 教科書、套件文件與國際準則。
- 在撰寫報告時應遵循 APA, CONSORT, STROBE, PRISMA 等標準。
- 善用線上資源(教學網站、開源教材、影片課程),可快速補充理論與實務技能。
- 最終目標是確保研究 透明、可重現、符合國際規範。
infer 是 R 語言的一個套件,提供統一的語法框架,用於統計推論(假設檢定、信賴區間、隨機化檢定、bootstrap 等)。其設計理念是讓使用者以「聲明式」方式一步步構建統計檢定流程。
specify():定義變數與模型(指定應變數與解釋變數)。hypothesize():設定虛無假設(例如獨立性、等比例)。generate():透過重抽樣(bootstrap)或隨機化(permutation)生成模擬數據。calculate():計算統計量(平均差、比例差、相關係數等)。visualize()(選用):視覺化分布與檢定結果。get_p_value():計算 p 值。get_confidence_interval():計算信賴區間(CI)。
我們想檢查在 mtcars 資料集中,手排車(Manual)與自排車(Automatic)的 平均油耗 (mpg) 是否不同。
library(infer)
df2 <- df %>% select(am, mpg)
# 1. 定義變數關係
obs_diff <- df2 %>%
specify(mpg ~ am) %>%
calculate(stat = "diff in means", order = c("Manual", "Automatic"))
obs_diff此處的 order 參數決定「Manual 減 Automatic」的順序。
# 2. 建立虛無假設:am 與 mpg 無關
null_dist <- df2 %>%
specify(mpg ~ am) %>%
hypothesize(null = "independence") %>%
generate(reps = 2000, type = "permute") %>%
calculate(stat = "diff in means", order = c("Manual", "Automatic"))reps = 2000:重複 2000 次隨機化,建立虛無假設下的統計量分布。type = "permute":打亂標籤(隨機置換),模擬「無關」的情境。
# 3. 計算 p 值(雙尾檢定)
p_val <- null_dist %>%
get_p_value(obs_stat = obs_diff, direction = "two-sided")
p_val輸出即為在 H0 成立下,觀察到與 obs_diff 一樣或更極端的差異之機率。
除了假設檢定外,也可以利用 bootstrap 方法估計平均差的信賴區間。
# 使用 bootstrap 建立抽樣分布
boot_dist <- df2 %>%
specify(mpg ~ am) %>%
generate(reps = 2000, type = "bootstrap") %>%
calculate(stat = "diff in means", order = c("Manual", "Automatic"))
# 計算 95% 信賴區間
ci <- boot_dist %>%
get_confidence_interval(level = 0.95, type = "percentile")
ci# 視覺化虛無分布與觀察值
null_dist %>% visualize() +
shade_p_value(obs_stat = obs_diff, direction = "two-sided")此圖顯示虛無分布(直方圖/密度圖)與觀察值 obs_diff 所落位置,以及對應的顯著區域。
infer主要適用於入門與教學,方便展示隨機化檢定與 bootstrap 思維。- 在嚴格研究中,建議與傳統統計方法(如 t 檢定、卡方檢定)結果對照。
reps應設為足夠大(通常 ≥ 1000),以獲得穩定結果。- 可以用於均值差、比例差、相關係數、迴歸係數等推論。
- infer 提供了統一的語法框架,讓統計檢定流程更直觀。
- 置換檢定 (Permutation test) 與 Bootstrap 是兩大核心方法。
- 結果可搭配傳統檢定法與圖形化輔助解讀。
- 在教學與可重現研究中,
infer特別適合用於展示隨機化與重抽樣思維。
在實務研究中,面對不同的資料型態與研究問題,如何快速判斷應該使用哪一種統計檢定是非常重要的。本指南提供一個系統化的對照表,協助分析者在短時間內選擇合適的方法。
-
變數型態
- 數值型(連續/離散):平均數、變異數檢定
- 類別型(名目/序位):比例或頻數檢定
-
比較的群組數
- 1 組 vs 常數
- 2 組(獨立 or 成對)
- 多組(≥3)
-
假設檢查
- 常態性是否成立?
- 變異數是否相等?
| 研究問題 | 資料型態 | 群組數 | 前提假設 | 推薦方法 |
|---|---|---|---|---|
| 檢查樣本平均數是否等於某值 | 數值型 | 1 vs 常數 | 常態性 | 單一樣本 t 檢定 |
| 檢查樣本中位數是否等於某值 | 數值型 | 1 vs 常數 | 不需常態 | 符號檢定 / Wilcoxon 符號檢定 |
| 比較兩組平均數(獨立樣本) | 數值型 | 2 組 | 常態、等變異 | 獨立樣本 t 檢定 |
| 比較兩組平均數(獨立樣本) | 數值型 | 2 組 | 不符合常態 | Mann–Whitney U 檢定 |
| 比較同一群體前後差異 | 數值型 | 2 組(成對) | 常態性 | 成對 t 檢定 |
| 比較同一群體前後差異 | 數值型 | 2 組(成對) | 不需常態 | Wilcoxon 符號等級檢定 |
| 比較三組以上平均數 | 數值型 | ≥3 | 常態、等變異 | 單因子 ANOVA |
| 比較三組以上中位數 | 數值型 | ≥3 | 不需常態 | Kruskal–Wallis 檢定 |
| 比較三組以上配對樣本 | 數值型 | ≥3 | 不需常態 | Friedman 檢定 |
| 檢查比例是否等於某值 | 類別型 | 1 組 vs 常數 | 大樣本 | 比例檢定 (prop.test) |
| 檢查比例是否等於某值 | 類別型 | 1 組 vs 常數 | 小樣本 | 精確二項檢定 (binom.test) |
| 比較兩組比例 | 類別型 | 2 組 | 大樣本 | 比例檢定 (prop.test) |
| 比較兩組比例 | 類別型 | 2 組 | 小樣本 | Fisher 精確檢定 |
| 檢查兩個類別變數是否獨立 | 類別型 | ≥2×2 表 | 預期頻數足夠 | 卡方獨立性檢定 |
| 檢查兩個類別變數是否獨立 | 類別型 | ≥2×2 表 | 預期頻數過小 | Fisher 精確檢定 |
| 檢查兩變數相關性 | 數值型 | - | 常態性 | Pearson 相關 |
| 檢查兩變數相關性 | 數值型/序位 | - | 不需常態 | Spearman 相關 / Kendall 相關 |
- 數值型 vs 數值型 → 散佈圖 + 相關檢定 / 線性迴歸
- 類別型 vs 類別型 → 列聯表 + 卡方檢定 / Fisher 檢定
- 數值型 vs 類別型(兩組) → 箱型圖 + t 檢定 / Mann–Whitney
- 數值型 vs 類別型(三組以上) → 箱型圖 + ANOVA / Kruskal–Wallis
# 快速檢視數值型 vs 類別型
ggplot(df, aes(am, mpg)) +
geom_boxplot() +
geom_jitter(width = 0.1, alpha = 0.6) +
labs(title = "不同變速箱類型的油耗比較")- 在選擇檢定前,務必檢查資料型態(數值型 vs 類別型、常態性、等變異)。
- 不要僅依靠 p 值,應同時報告效果量與信賴區間。
- 在樣本數小或假設不成立時,優先考慮非參數檢定。
- 在多組比較後,應搭配 事後檢定(Post-hoc test)。
- 視覺化能幫助理解數據特性與檢定結果,建議與統計檢定搭配使用。
- 統計檢定的選擇,取決於資料型態、樣本大小與研究問題。
- 快速決策表與流程圖 能幫助你在複雜研究中快速找到適當方法。
- 數據分析是一種探索與驗證的過程:即使一開始不確定方法,也能透過嘗試與比對逐步找到最佳解答。
📢 :別害怕面對龐雜的數據與眾多方法,每一次分析都是一次學習的機會。透過練習、檢查假設、並搭配圖表與效果量,你將能更有信心地解讀數據,並讓研究結果更具說服力!