Skip to content

Charlene717/stats_tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 

Repository files navigation

統計教學(以 R 為示範)

本教學涵蓋資料型態、描述統計、視覺化、機率分配、抽樣與估計、假設檢定(含單尾/雙尾)、ANOVA、卡方、相關與迴歸、非參數、檢定力與樣本數、以及可重現流程。所有範例使用 R 內建資料集(mtcars, iris)與常用套件。

目錄

  1. 環境設定與資料載入
  2. 資料型態與前處理
  3. 描述統計與基本視覺化
  4. 機率與常見分配
  5. 抽樣、點估計與信賴區間
  6. 假設檢定概念與單尾/雙尾
  7. t 檢定:單一樣本、成對、獨立樣本
  8. 比例檢定與二項分配
  9. 卡方檢定(適合度、獨立性)
  10. 單因子 ANOVA 與事後檢定
  11. 相關與線性迴歸
  12. 非參數檢定
  13. 檢定力與樣本數估計
  14. 可重現與報告建議
  15. 參考指引
  16. 附錄:infer 流程(置換/重抽樣)
  17. 快速決策指南

環境設定與資料載入

# 建議先設定隨機種子以利重現
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)並進行合適的前處理。這將影響後續能使用哪些統計方法與模型。


1. 資料型態分類

  1. 數值型(Numerical)

    • 連續型(Continuous):可取任意實數,測量值。例如:身高、體重、血壓、mtcars$mpg
    • 離散型(Discrete):只能取有限整數值,多為計數型資料。例如:家庭人數、突變次數、汽缸數。
  2. 類別型(Categorical / Factor)

    • 名目型(Nominal):純粹分類,沒有順序性。例如:性別(Male/Female)、血型(A/B/AB/O)、iris$Species
    • 序位型(Ordinal):具備順序,但間隔不一定相等。例如:教育程度(小學 < 國中 < 高中 < 大學)、滿意度量表(非常滿意 > 滿意 > 普通 > 不滿意)。
  3. 布林型(Logical/Boolean)

    • 僅有 TRUE/FALSE(或 0/1),常用於條件判斷或二元分類。
  4. 文字與字串型(Character/String)

    • 純文字描述,通常需轉換為 factor 或重新編碼才能進行統計分析。
  5. 日期/時間型(Date/Datetime)

    • 時間序列資料,例如:病人就診日期、實驗收樣時間。R 中常用 Date, POSIXct 類型。

2. 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)

3. 缺失值處理(Missing Values)

  • 檢查缺失值
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)  # 以平均數填補

4. 偵測與處理離群值(Outliers)

  • 定義:落在四分位範圍(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")

5. 資料標準化與常見轉換

  • 標準化(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)

小結

  1. 在分析前應明確區分變數型態(數值型 vs 類別型)
  2. 缺失值與離群值處理是必要步驟,避免偏誤
  3. 若後續分析需要(如 PCA、迴歸),可能需進行標準化或轉換
  4. 資料型態的正確設定將決定能否套用正確的統計檢定方法

⬆ 回到目錄


描述統計與基本視覺化

描述統計(Descriptive Statistics)主要用於 整理、概括與呈現資料特徵,不涉及推論。常見指標包括集中趨勢(平均數、中位數)、離散程度(標準差、四分位距)、分布形狀(偏態、峰度)等。搭配適合的視覺化圖表,可以幫助研究者快速掌握資料特性。


1. 集中趨勢(Measures of Central Tendency)

  1. 平均數(Mean)

    • 資料總和除以樣本數
    • 受極端值影響較大
  2. 中位數(Median)

    • 排序後的中間值
    • 抗極端值能力較佳
  3. 眾數(Mode)

    • 出現次數最多的數值
    • 適用於類別資料或離散數值
mean(df$mpg)
median(df$mpg)
mode_mpg <- as.numeric(names(sort(table(df$mpg), decreasing = TRUE)[1]))
mode_mpg

2. 離散程度(Measures of Dispersion)

  1. 全距(Range):最大值 - 最小值
  2. 四分位距(IQR):Q3 - Q1,反映中間 50% 資料的分布範圍
  3. 變異數(Variance):平均平方離差
  4. 標準差(SD):變異數開根號,單位與原始資料相同
  5. 變異係數(CV):標準差 / 平均數,適合不同尺度的比較
range(df$mpg)
IQR(df$mpg)
var(df$mpg)
sd(df$mpg)
sd(df$mpg) / mean(df$mpg)  # 變異係數

3. 分布形狀(Shape of Distribution)

  1. 偏態(Skewness)

    • 0:右偏(長尾在右,平均 > 中位數)

    • <0:左偏(長尾在左,平均 < 中位數)
  2. 峰度(Kurtosis)

    • 3:尖峰分布(厚尾,極端值多)

    • <3:平峰分布(薄尾,極端值少)
library(moments)
skewness(df$mpg)
kurtosis(df$mpg)

4. 資料分組與彙總

使用 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)
  )

5. 基本視覺化方法

5.1 直方圖(Histogram)

適用於 連續數值型資料,觀察分布型態與常態性。

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 = "頻數")

5.2 箱型圖(Boxplot)

適用於 比較不同組別的分布與離群值

ggplot(df, aes(am, mpg, fill = am)) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "不同變速箱類型之 MPG 分布", x = "Transmission", y = "MPG")

5.3 小提琴圖(Violin Plot)

結合箱型圖與核密度估計,適合觀察分布形狀。

ggplot(df, aes(am, mpg, fill = am)) +
  geom_violin(trim = FALSE, alpha = 0.6) +
  geom_boxplot(width = 0.1, fill = "white") +
  labs(title = "不同變速箱類型之 MPG 分布(小提琴圖)")

5.4 長條圖(Bar Plot)

適用於 類別資料,例如 iris$Species 的樣本數。

ggplot(iris, aes(Species, fill = Species)) +
  geom_bar() +
  labs(title = "Iris 族群樣本數分布", x = "Species", y = "Count")

5.5 散佈圖(Scatter Plot)

適用於 連續變數間的關係,例如重量與油耗。

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")

6. 常見誤區與注意事項

  1. 單看平均數不足以描述資料,應同時提供中位數與變異指標
  2. 視覺化建議同時標示原始點與統計摘要,避免誤導
  3. 對於偏態嚴重的資料,平均數與標準差可能失真,應搭配中位數與 IQR
  4. 選擇視覺化圖形需依資料型態:
    • 連續變數 → 直方圖、箱型圖、散佈圖
    • 類別變數 → 長條圖、馬賽克圖

小結

  • 描述統計是分析的第一步,幫助研究者快速掌握資料特性
  • 搭配合適的圖表(直方圖、箱型圖、散佈圖等),更能有效傳達資訊
  • 在報告與論文中,建議同時呈現數值統計摘要與圖形化描述,以提升可解讀性

⬆ 回到目錄


機率與常見分配

在統計學中,機率分配(Probability Distribution) 描述了隨機變數可能取值以及對應的機率(或機率密度)。瞭解不同分配的特性,有助於選擇適當的統計方法。


1. 常態分配(Normal 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 常態性檢定

2. t 分配(Student's t Distribution)

  • 定義:常用於小樣本平均數推論。
  • 參數:自由度 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"))

3. 卡方分配(Chi-square Distribution)

  • 定義: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"))

4. F 分配(F Distribution)

  • 定義:兩個獨立卡方分配變數,分別除以自由度後的比值。
  • 應用:常用於變異數分析(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"))

5. 二項分配(Binomial Distribution)

  • 定義: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)

6. 卜瓦松分配(Poisson Distribution)

  • 定義:單位時間或區間內事件發生次數的分布。
  • 參數:λ(單位時間平均發生次數)。
  • 應用:罕見事件(交通事故、突變數目)。
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)

7. 指數分配(Exponential Distribution)

  • 定義:事件發生間隔時間的分布。
  • 參數:λ(事件發生率)。
  • 應用:等待時間、壽命分析。
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")

小結

  1. 常態分布:最重要的分布,許多統計方法假設資料常態。

  2. t 分布:小樣本平均數推論。

  3. 卡方 / F 分布:變異數分析與假設檢定常用。

  4. 二項 / 卜瓦松 / 指數:常用於離散事件與機率建模。

  5. 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)。這些方法能幫助我們合理推論母體參數。


1. 抽樣(Sampling)

1.1 抽樣的目的

  • 節省成本與時間
  • 取得對母體的合理推論
  • 確保樣本具有代表性

1.2 常見抽樣方法

  1. 簡單隨機抽樣(Simple Random Sampling, SRS)

    • 每個樣本有相同機會被選中
    • R 函數:sample()
  2. 系統抽樣(Systematic Sampling)

    • 按固定間隔選取樣本,例如每隔 k 個取一個
  3. 分層抽樣(Stratified Sampling)

    • 先依特徵(性別、年齡等)分層,再各層隨機抽樣
    • 保證各層都有代表性
  4. 群集抽樣(Cluster Sampling)

    • 以群體為單位(例如學校、地區),隨機抽取部分群集
# 簡單隨機抽樣
set.seed(42)
sample_data <- sample(iris$Sepal.Length, size = 30, replace = TRUE)
head(sample_data)

2. 點估計(Point Estimation)

  • 使用樣本統計量(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)

3. 信賴區間(Confidence Interval, CI)

3.1 概念

  • 區間估計提供「母體參數可能落入的範圍」
  • 信賴水準(Confidence Level, 1-α):常見為 95%
  • 含義:若重複抽樣多次,95% 的區間將涵蓋母體參數

3.2 平均數的信賴區間

  • 已知母體標準差 σ → 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])

3.3 比例的信賴區間

# 假設 100 人調查中有 40 人支持某政策
x <- 40
n <- 100
prop.test(x, n, conf.level = 0.95)

4. Bootstrap 方法(非參數信賴區間)

當分布未知或樣本量有限時,可透過重抽樣(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"))

5. 視覺化信賴區間

透過 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 = "")

小結

  1. 抽樣是推論統計的基礎,方法需確保代表性
  2. 點估計提供單一數值,但無法反映不確定性
  3. 信賴區間能提供估計精確度與不確定性範圍
  4. Bootstrap 為非參數方法,適合小樣本或未知分布情境
  5. 報告結果時,建議同時提供估計值與信賴區間

⬆ 回到目錄


假設檢定概念與單尾/雙尾

假設檢定(Hypothesis Testing)是統計推論的核心方法,用來檢驗樣本數據是否支持某一個關於母體的假設。


1. 假設檢定的流程

  1. 提出假設

    • 虛無假設 (Null Hypothesis, H0):通常為「無差異、無效果」的假設。例如:μ = 100。
    • 對立假設 (Alternative Hypothesis, H1 或 Ha):與 H0 相對,通常為「有差異、有效果」的假設。例如:μ ≠ 100。
  2. 選擇適當的檢定方法

    • 依據資料型態、分布、樣本數決定使用 t 檢定、卡方檢定、ANOVA 等。
  3. 選擇顯著水準 (Significance Level, α)

    • 常見 α = 0.05,代表容許 5% 的第一類錯誤(Type I Error)。
  4. 計算檢定統計量 (Test Statistic) 與 p 值 (p-value)

    • 檢定統計量:樣本數據轉換後的標準化統計值。
    • p 值:在 H0 成立下,觀察到目前或更極端結果的機率。
  5. 作決策

    • 若 p 值 < α → 拒絕 H0,支持 H1。
    • 若 p 值 ≥ α → 無法拒絕 H0。

2. 錯誤類型

  1. 第一類錯誤 (Type I Error):錯誤拒絕 H0(誤判為有效果)。

    • 機率 = α。
  2. 第二類錯誤 (Type II Error):錯誤接受 H0(實際有差異卻未偵測出)。

    • 機率 = β。
  3. 檢定力 (Power):1 - β,表示檢定正確拒絕 H0 的能力。檢定力越高越好。


3. 單尾檢定 vs 雙尾檢定

3.1 雙尾檢定 (Two-tailed test)

  • 對立假設 H1:參數「不等於」某值
  • 適用於「只要不同就算顯著」的情境
  • 常見於大多數實驗設計,保守且通用

數學表示:

  • H0: μ = μ0
  • H1: μ ≠ μ0
# 雙尾檢定:檢查平均 mpg 是否不同於 20
t.test(df$mpg, mu = 20, alternative = "two.sided")

3.2 單尾檢定 (One-tailed test)

  • 對立假設 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")

4. 單尾與雙尾的比較

特徵 單尾檢定 雙尾檢定
假設方向 有方向性(大於/小於) 無方向性(不等於)
檢定力 在正確方向時較高 分散至兩側,較保守
適用情境 有明確方向性假設,且事先規劃 一般假設檢定,無方向性或不確定方向
錯誤風險 方向假設錯誤時,風險高 錯誤風險較低

5. 視覺化示例

以下示意圖顯示單尾與雙尾檢定的差異(以標準常態分布為例,α=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)

小結

  1. 假設檢定透過樣本數據來評估母體參數是否支持某假設。
  2. p 值是檢定的核心指標,需與顯著水準 α 比較。
  3. 選擇單尾須在分析前就確立明確方向性與理論支持;否則預設使用雙尾較保守。
  4. 在研究報告中,應明確說明假設設定與檢定方向,避免誤導或事後操作。

⬆ 回到目錄


t 檢定:單一樣本、成對、獨立樣本

t 檢定(t-test)是一種常見的統計檢定方法,用於比較平均數之間是否存在顯著差異。它基於 Student's t 分布,適合樣本數較小、母體變異數未知的情況。


1. 單一樣本 t 檢定(One-sample t-test)

目的

檢驗「樣本平均數是否等於某特定值」。

假設

  • H0: μ = μ0
  • H1: μ ≠ μ0(雙尾)、μ > μ0(右尾)、μ < μ0(左尾)

R 範例

# 假設檢查 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")

2. 成對樣本 t 檢定(Paired t-test)

目的

檢驗「同一群體在不同情境下的平均數是否不同」,例如實驗前後測量值。

假設

  • H0: μ_diff = 0
  • H1: μ_diff ≠ 0

R 範例

# 模擬資料:介入前後測量值
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)

3. 獨立樣本 t 檢定(Independent two-sample t-test)

目的

檢驗「兩組獨立樣本的平均數是否不同」。

假設

  • H0: μ1 = μ2
  • H1: μ1 ≠ μ2

R 範例

# 比較自排 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)

檢查前提假設

  1. 常態性檢查(Shapiro-Wilk)
  2. 變異數同質性檢查(Levene’s test)
# 常態性檢查
by(df$mpg, df$am, shapiro.test)

# 變異數同質性檢查
library(car)
leveneTest(mpg ~ am, data = df)

效果量(Effect Size)

獨立樣本 t 檢定建議回報 Cohen’s d

library(effectsize)
cohens_d(mpg ~ am, data = df)

4. 單尾 vs 雙尾檢定

  • 雙尾檢定:檢查是否「有差異」,不限定方向。
  • 單尾檢定:檢查是否「大於」或「小於」。
  • 單尾檢定需事先設定方向,否則建議使用雙尾以避免偏差。

5. t 檢定的小結

  1. 單一樣本 t 檢定:檢查樣本平均是否等於某值。
  2. 成對 t 檢定:比較同一群體在不同情境下的平均差異。
  3. 獨立樣本 t 檢定:比較兩組不同群體的平均差異。
  4. 使用前需檢查 常態性與變異數同質性
  5. 報告時應提供 平均數 ± 標準差、t 值、自由度、p 值、效果量

⬆ 回到目錄


比例檢定與二項分配

比例檢定(Proportion Test)用於檢驗母體比例是否等於某假設值,或比較兩個(或多個)群體比例之間是否有顯著差異。它的理論基礎是 二項分配(Binomial Distribution)


1. 二項分配(Binomial Distribution)

定義

  • 適用於 n 次獨立試驗,每次只有「成功/失敗」兩種結果,且成功機率為 p。
  • 例如:
    • 擲硬幣出現正面的次數(成功 = 正面,p=0.5)
    • 臨床試驗中病人痊癒的次數(成功 = 痊癒,p=0.7)

機率質量函數(PMF)

$$ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k} $$

其中:

  • k = 成功次數
  • n = 試驗次數
  • p = 成功機率

R 範例

# 計算 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)")

2. 單一比例檢定(One-sample proportion test)

問題設定

檢驗樣本比例是否與母體假設比例 p0 相等。

假設

  • H0: p = p0
  • H1: p ≠ p0(雙尾)、p > p0(右尾)、p < p0(左尾)

精確檢定:binom.test()

適用於小樣本,計算精確二項分布的 p 值。

# 範例:100 人調查中有 92 人支持政策,檢驗支持率是否大於 0.9
binom.test(x = 92, n = 100, p = 0.9, alternative = "greater")

近似檢定:prop.test()

適用於大樣本,利用常態近似。

prop.test(x = 92, n = 100, p = 0.9, alternative = "greater", correct = TRUE)

3. 兩比例比較(Two-sample proportion test)

問題設定

檢驗兩個群體的比例是否相同。

假設

  • H0: p1 = p2
  • H1: p1 ≠ p2

R 範例

# 假設兩組治療方式的成功數
x <- c(45, 30)   # 成功次數
n <- c(50, 50)   # 總樣本數

prop.test(x, n, alternative = "two.sided", correct = TRUE)

解讀:若 p 值 < 0.05,代表兩組比例有顯著差異。


4. 多組比例比較(k-sample proportion test)

prop.test() 也可延伸至多組比例比較。

# 三組樣本成功數
x <- c(30, 45, 25)
n <- c(50, 60, 55)

prop.test(x, n)

5. 比例檢定的信賴區間(Confidence Interval, CI)

比例檢定同時會輸出信賴區間,用來描述「母體比例可能落入的範圍」。

# 單一比例信賴區間
prop.test(x = 92, n = 100, p = 0.9, conf.level = 0.95)

6. 注意事項

  1. 小樣本建議使用 binom.test(),避免近似誤差。
  2. prop.test() 預設使用 連續性修正 (Yates’ correction),若樣本數大,可設定 correct=FALSE
  3. 結果報告應包含:樣本比例、信賴區間、檢定統計量、p 值。
  4. 若為多組比例比較,需搭配事後分析(例如成對比例檢定)進一步比較。

小結

  • 二項分布描述成功次數的隨機性。
  • binom.test() 適合小樣本,精確檢定。
  • prop.test() 適合大樣本,近似檢定,可用於一組或多組比例比較。
  • 報告時建議同時呈現比例估計值與信賴區間,以提升可解釋性。

⬆ 回到目錄


卡方檢定(適合度、獨立性)

卡方檢定(Chi-square test)是一種常用於類別資料分析的統計方法,主要分為:

  1. 適合度檢定(Goodness-of-fit test):檢驗觀察到的類別分布是否符合理論分布。
  2. 獨立性檢定(Test of independence):檢驗兩個類別變數是否具有統計上的關聯性。

1. 適合度檢定(Goodness-of-fit test)

概念

適合度檢定用來判斷「樣本觀察的分布是否與理論假設分布一致」。例如:檢查骰子是否公平。

假設

  • H0: 觀察分布與理論分布相符
  • H1: 觀察分布與理論分布不相符

R 範例

# 觀察值(投擲骰子 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,代表觀察分布與理論分布差異顯著。

2. 獨立性檢定(Test of independence)

概念

檢驗兩個類別變數是否獨立。例如:檢查不同品種 (Species) 與花萼長度分類 (SepalLong) 是否有關。

假設

  • H0: 兩個變數相互獨立
  • H1: 兩個變數不獨立(存在關聯性)

R 範例

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,代表兩個變數之間有顯著關聯。

3. Fisher 精確檢定(Fisher’s Exact Test)

當樣本數太小或期望次數 < 5 時,卡方檢定可能不可靠,此時可使用 Fisher 精確檢定。

fisher.test(tab)

4. 視覺化呈現

# 使用 mosaicplot 視覺化列聯表
mosaicplot(tab, main = "Species vs Sepal Length (Long/Short)",
           xlab = "Species", ylab = "Sepal Length Category",
           color = TRUE)

5. 注意事項

  1. 適合度檢定需提供「理論分布」,並確保樣本總數足夠大。
  2. 獨立性檢定需檢查列聯表中每格的期望次數,建議不小於 5。
  3. 小樣本情境下,建議使用 Fisher’s Exact Test
  4. 若有多重比較問題,可考慮 Bonferroni 校正。
  5. 報告時應提供:檢定統計量、自由度、p 值,以及必要的效果量(如 Cramér’s V)。

小結

  • 適合度檢定:檢查樣本分布是否符合理論分布。
  • 獨立性檢定:檢查兩個類別變數是否相關。
  • Fisher 精確檢定:適用於小樣本或期望次數過低的情況。
  • 建議搭配圖表(馬賽克圖、列聯表熱圖)以輔助解讀。

⬆ 回到目錄


單因子 ANOVA 與事後檢定

單因子變異數分析(One-way ANOVA)用於檢驗三組或以上的平均數是否存在顯著差異。若檢定結果顯示顯著,需進一步進行 事後檢定(Post-hoc test),以確定哪些組別之間有差異。


1. ANOVA 基本概念

假設

  • H0: 所有組別的平均數相等 (μ1 = μ2 = μ3 = …)
  • H1: 至少有一組平均數不同

原理

  • 總變異 (Total Variance) 可以拆分為:

    • 組間變異 (Between-group variance):組別之間平均數的差異
    • 組內變異 (Within-group variance):組別內部數據的隨機變異
  • ANOVA 透過比較 組間變異 / 組內變異 形成 F 統計量:

$$ F = \frac{MS_{between}}{MS_{within}} $$

其中:

  • MS = 均方(Mean Square) = SS / df
  • SS = 平方和(Sum of Squares)
  • df = 自由度(degree of freedom)

2. R 範例:Iris 資料集

檢驗三個品種 (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,代表至少有一組不同

3. 假設檢查

在使用 ANOVA 前,需檢查假設條件:

  1. 常態性:每組資料應近似常態分布

    • Shapiro-Wilk test
    • Q-Q plot
  2. 變異數同質性:各組的變異數應相等

    • 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)

4. 事後檢定(Post-hoc Tests)

若 ANOVA 顯著,需進一步比較各組別間的差異。

4.1 Tukey HSD 檢定(最常用)

TukeyHSD(aov_fit)

4.2 Bonferroni / Holm 校正(pairwise t-test)

pairwise.t.test(iris$Sepal.Length, iris$Species,
                p.adjust.method = "bonferroni")

4.3 Dunnett 檢定(與對照組比較)

library(multcomp)
dunnett_test <- glht(aov_fit, linfct = mcp(Species = "Dunnett"))
summary(dunnett_test)

5. 視覺化 ANOVA 與事後檢定

# 箱型圖顯示三組分布
library(ggplot2)
ggplot(iris, aes(Species, Sepal.Length, fill = Species)) +
  geom_boxplot() +
  labs(title = "不同品種的花萼長度比較")

# Tukey HSD 結果視覺化
plot(TukeyHSD(aov_fit))

6. 注意事項

  1. ANOVA 只能檢驗「是否存在差異」,不能指出差異在哪些組別 → 必須進行事後檢定。
  2. 當常態性或等變異假設不成立時,可使用 Kruskal-Wallis 檢定 作為非參數替代方法。
  3. 報告結果時,建議提供:F 值、自由度、p 值,以及事後檢定結果。
  4. 若組數很多,需考慮多重比較的顯著水準調整。

小結

  • 單因子 ANOVA 檢驗多組平均數是否相等。
  • 假設條件:常態性與變異數同質性。
  • 若結果顯著,需進一步進行事後檢定(Tukey, Bonferroni, Dunnett)。
  • 視覺化有助於呈現組間差異。

⬆ 回到目錄


相關與線性迴歸

相關分析與迴歸分析是統計學中常用來探討變數間關係的工具:

  • 相關(Correlation):衡量兩個變數之間線性關係的強度與方向。
  • 迴歸(Regression):建立數學模型來描述自變數(X)與應變數(Y)的關係,並用於預測。

1. 相關分析(Correlation Analysis)

1.1 皮爾森相關(Pearson correlation)

  • 衡量兩個連續變數的線性相關。
  • 取值範圍:-1 ~ +1
    • +1:完全正相關
    • -1:完全負相關
    • 0:無線性相關
cor.test(df$mpg, df$wt, method = "pearson")  # 油耗 vs 車重

1.2 斯皮爾曼等級相關(Spearman’s rho)

  • 非參數方法,基於秩次(rank),適合於非常態或序位變數。
cor.test(df$mpg, df$wt, method = "spearman")

1.3 肯德爾相關(Kendall’s tau)

  • 另一種非參數秩相關,適合樣本數小。
cor.test(df$mpg, df$wt, method = "kendall")

1.4 相關矩陣

一次檢視多個變數間的相關。

cor(df[, c("mpg", "wt", "hp", "qsec")])

1.5 視覺化相關

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")

2. 單變量線性迴歸(Simple Linear Regression)

2.1 模型公式

$$ Y = β_0 + β_1X + ε $$

  • Y:應變數(因變數)
  • X:自變數(解釋變數)
  • β0:截距(intercept)
  • β1:斜率(slope),表示 X 每增加 1 單位,Y 的平均變化量
  • ε:誤差項

2.2 R 範例

lm_fit <- lm(mpg ~ wt, data = df)
summary(lm_fit)

2.3 模型解讀

  • Estimate:迴歸係數(β0, β1)
  • Std. Error:標準誤
  • t value, Pr(>|t|):檢驗迴歸係數是否顯著
  • Multiple R-squared:決定係數 (R²),解釋模型解釋力

2.4 視覺化

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")

3. 多元線性迴歸(Multiple Linear Regression)

3.1 模型公式

$$ Y = β_0 + β_1X_1 + β_2X_2 + … + β_kX_k + ε $$

3.2 R 範例

lm_fit2 <- lm(mpg ~ wt + hp + cyl, data = df)
summary(lm_fit2)

3.3 多重共線性檢查

多元迴歸需注意自變數間是否高度相關(共線性)。可用 VIF (Variance Inflation Factor) 判斷。

library(car)
vif(lm_fit2)  # VIF > 5 或 10 可能代表共線性問題

4. 模型診斷(Diagnostics)

線性迴歸的假設包括:

  1. 殘差獨立性
  2. 殘差常態性
  3. 殘差變異數同質性(同方差性)
  4. 線性關係

R 範例

par(mfrow = c(2, 2))
plot(lm_fit)
par(mfrow = c(1, 1))

解讀

  • Residuals vs Fitted:檢查線性關係與同方差性
  • Normal Q-Q:檢查常態性
  • Scale-Location:檢查殘差分布是否均勻
  • Residuals vs Leverage:檢查離群值與高影響點

5. 效果量與模型解釋力

  1. 決定係數 (R²):解釋自變數能解釋的 Y 變異比例。
  2. 調整後 R²:考慮自變數數量,避免過度擬合。
  3. 效果量 (Effect size):可報告 Cohen’s f²。
library(effectsize)
model_parameters(lm_fit2)

小結

  • 相關分析:用於描述變數間線性關係,不代表因果。
  • 單變量迴歸:建立 Y 與單一 X 的線性模型。
  • 多元迴歸:可同時考慮多個解釋變數,但需注意共線性。
  • 模型診斷:必須檢查殘差特性,以確保模型有效。
  • 報告:應包含迴歸係數、p 值、R²、效果量及診斷檢查。

⬆ 回到目錄


非參數檢定

非參數檢定(Non-parametric Tests)是一類不依賴母體分布假設(例如常態分布)的統計方法,適用於:

  • 資料不符合常態性假設(Shapiro-Wilk 檢定失敗)
  • 樣本數過小,難以驗證分布假設
  • 資料型態為序位變數(Ordinal Data)

1. 單一樣本檢定

1.1 符號檢定(Sign Test)

  • 檢驗樣本中位數是否等於某假設值。
  • 適用於無法假設常態分布的情況。
# 使用 BSDA 套件
library(BSDA)
SIGN.test(x = c(5, 7, 9, 6, 10), md = 7)

2. 兩組比較

2.1 Mann–Whitney U 檢定(Wilcoxon rank-sum test)

  • 用於兩個獨立樣本的中位數比較。
  • 非常態時替代獨立樣本 t 檢定。
# mpg ~ am (Automatic vs Manual)
wilcox.test(mpg ~ am, data = df, paired = FALSE)

2.2 Wilcoxon 符號等級檢定(Wilcoxon signed-rank test)

  • 用於成對樣本(配對設計)的比較。
  • 非常態時替代配對樣本 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)

3. 多組比較

3.1 Kruskal–Wallis H 檢定

  • 用於三組或以上獨立樣本的中位數比較。
  • 非常態時替代單因子 ANOVA。
kruskal.test(Sepal.Length ~ Species, data = iris)

3.2 Friedman 檢定

  • 用於三組或以上成對樣本的比較。
  • 非常態時替代重複量數 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)

4. 相關與關聯檢定

4.1 Spearman 秩相關(Spearman’s rho)

  • 衡量兩變數秩次間的相關性。
cor.test(df$mpg, df$wt, method = "spearman")

4.2 Kendall 秩相關(Kendall’s tau)

  • 適合小樣本,衡量一致性。
cor.test(df$mpg, df$wt, method = "kendall")

5. 類別資料的非參數檢定

5.1 卡方檢定(Chi-square test)

  • 適用於類別變數之間的獨立性檢驗。
tab <- table(iris$Species, iris$Sepal.Width > median(iris$Sepal.Width))
chisq.test(tab)

5.2 Fisher 精確檢定(Fisher’s Exact Test)

  • 適合小樣本或期望次數過低時。
fisher.test(tab)

6. 效果量(Effect Size)

即使使用非參數檢定,也應提供效果量:

  • 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)

7. 注意事項

  1. 非參數檢定雖然不要求常態性,但通常統計力(power)低於對應的參數檢定。
  2. 適用於中位數或秩次比較,而非平均數。
  3. 結果解讀時應謹慎,並避免過度推廣。
  4. 報告時建議提供:檢定方法、統計量、p 值與效果量。

小結

  • 兩組比較:Mann–Whitney U(獨立樣本)、Wilcoxon signed-rank(配對樣本)。
  • 多組比較:Kruskal–Wallis(獨立樣本)、Friedman(配對樣本)。
  • 相關分析:Spearman’s rho、Kendall’s tau。
  • 類別資料:卡方檢定、Fisher 精確檢定。
  • 非參數方法不依賴分布假設,適合小樣本或序位資料。

⬆ 回到目錄


檢定力與樣本數估計

在進行統計檢定時,除了關注顯著性(p 值)之外,還需要考慮檢定力(Power)與所需樣本數(Sample Size),以確保研究設計的有效性與可靠性。


1. 基本概念

1.1 顯著水準 (Significance Level, α)

  • 拒絕虛無假設 H0 的門檻,常用 α = 0.05。
  • 表示允許 第一類錯誤 (Type I error) 的機率。

1.2 檢定力 (Power)

  • 定義:在 H1 為真時,正確拒絕 H0 的機率。
  • 計算公式:Power = 1 - β,其中 β 為 第二類錯誤 (Type II error) 的機率。
  • 一般建議 Power ≥ 0.8(80%)。

1.3 影響檢定力的因素

  1. 樣本數 (n):越大,檢定力越高。
  2. 效果量 (Effect size):越大,越容易檢出差異。
  3. 顯著水準 (α):設定越寬鬆 (如 0.1),檢定力越高,但第一類錯誤風險也越大。
  4. 樣本變異數 (σ²):越小,檢定力越高。

2. 效果量 (Effect Size)

效果量用於衡量差異的實質大小,而非僅僅依賴 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)

3. 檢定力分析(Power Analysis)

3.1 t 檢定的檢定力

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)。

3.2 反推所需樣本數

# 假設效果量 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。

3.3 相關分析的檢定力

# 假設相關係數 r = 0.3, 檢定力 = 0.8, α = 0.05
pwr.r.test(r = 0.3, power = 0.8, sig.level = 0.05,
           alternative = "two.sided")

3.4 卡方檢定的檢定力

# 假設效果量 w = 0.3, 自由度 df = 1, 檢定力 = 0.8, α = 0.05
pwr.chisq.test(w = 0.3, df = 1, power = 0.8, sig.level = 0.05)

4. 視覺化檢定力與樣本數關係

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 = "檢定力")

5. 注意事項

  1. 研究設計時應事先進行 樣本數估計,避免樣本不足導致低檢定力。
  2. p 值顯著 ≠ 效果大,應同時報告效果量與信賴區間。
  3. 過大的樣本數可能導致檢出微小且無實質意義的差異。
  4. 不同統計方法有對應的效果量指標與 power 分析方法。

小結

  • 檢定力:反映檢驗能正確拒絕虛無假設的能力,一般要求 ≥ 0.8。
  • 樣本數估計:需根據效果量、顯著水準與期望檢定力來決定。
  • R 提供 pwr 套件,可進行 t 檢定、相關、卡方檢定 等的檢定力分析。
  • 研究報告建議同時呈現 效果量、信賴區間與檢定力,提升研究可信度。

⬆ 回到目錄


可重現與報告建議

在現代科學研究中,可重現性(Reproducibility)透明報告(Transparent Reporting) 是確保研究可靠性的重要基石。統計分析除了追求結果的正確性,也必須讓他人能夠在相同條件下重現相同的結果。


1. 可重現性的重要性

  1. 研究驗證:他人能夠使用相同的數據與方法重現結果。
  2. 降低錯誤:完整記錄流程有助於避免因手動操作而引入的人為錯誤。
  3. 加速合作:同儕或跨領域合作研究更容易理解與使用你的分析流程。
  4. 提升可信度:許多期刊與資助單位要求可重現性作為投稿與審查標準。

2. 可重現分析的實務做法

2.1 數據管理

  • 保存 原始數據 (Raw data),避免直接修改。
  • 建立 中間處理檔案 (Processed data)最終分析檔案 (Final dataset)
  • 使用一致的檔案命名規範,例如:project_dataset_raw.csv, analysis_cleaned.csv

2.2 程式碼管理

  • 將所有分析步驟寫入 程式碼檔案(R script 或 RMarkdown),避免僅依靠手動操作。
  • 在程式碼中加入 註解,說明每一步的目的。
  • 使用 版本控制系統 (Git/GitHub) 追蹤修改歷史。

2.3 軟體環境

  • 記錄 R 與套件版本(建議使用 sessionInfo()renv)。
  • 在團隊合作時,使用相同的套件環境以避免版本不一致問題。
# 匯出 session 資訊
sessionInfo()

# 使用 renv 建立環境
install.packages("renv")
renv::init()       # 初始化專案環境
renv::snapshot()   # 記錄目前套件版本
renv::restore()    # 重現套件環境

2.4 自動化流程

  • 使用 R MarkdownQuarto 撰寫可重現報告(結合程式碼、文字、圖表)。
  • 在大型分析中,建議使用 工作流程管理工具(如 Makefile、Snakemake、Drake、targets)。

3. 報告建議

3.1 統計方法的描述

  • 清楚交代 使用的統計方法(如 t 檢定、ANOVA、線性迴歸)。
  • 指出 假設檢查(常態性檢定、變異數同質性檢定)。
  • 說明 單尾或雙尾檢定 的選擇理由。

3.2 統計結果的呈現

建議包含以下要素:

  1. 估計值(平均數、差異、迴歸係數等)
  2. 信賴區間 (CI)
  3. 檢定統計量與自由度(如 t, F, χ² 值)
  4. p 值(精確至三位小數,若 <0.001 則報告為 p < 0.001)
  5. 效果量 (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

3.3 視覺化圖表

  • 使用圖表輔助文字說明,提升可讀性。
  • 建議圖中加入 誤差線(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")

3.4 報告框架建議

  • 方法 (Methods):資料來源、樣本大小、統計方法、軟體與套件版本。
  • 結果 (Results):統計摘要(表格)、圖表、效果量與解釋。
  • 附錄 (Appendix):完整程式碼與數據處理細節。

4. 國際準則與建議

  • APA (American Psychological Association) 指南:強調效果量與信賴區間的重要性。
  • CONSORT (臨床試驗報告標準):臨床醫學領域的標準化報告框架。
  • STROBE (觀察性研究報告準則):適用於流行病學與觀察性研究。
  • Open Science Framework (OSF):建議研究公開數據與程式碼,促進可重現性。

小結

  1. 可重現性:保存原始數據、撰寫完整程式碼、使用版本控制與套件環境管理。
  2. 報告透明度:需完整描述統計方法、假設檢查、檢定結果、效果量。
  3. 建議做法:結合數據、程式碼與解釋文字的整合文件(如 R Markdown),並公開於 GitHub/OSF。
  4. 最終目標:讓任何研究者在相同資料與條件下都能得到相同結論。

⬆ 回到目錄


參考指引

在進行統計分析與撰寫研究報告時,使用可靠的參考資料與遵循標準化的指引,可以確保研究的嚴謹性與可重現性。以下整理常用的 書籍、套件文件、國際準則與線上資源,提供學習與報告的依據。


1. 基礎統計與 R 語言參考書籍

  1. 《R for Data Science》

    • 作者:Hadley Wickham & Garrett Grolemund
    • 重點:以 R 與 tidyverse 進行資料整理、視覺化與基礎分析。
    • 線上版本:https://r4ds.had.co.nz
  2. 《An Introduction to Statistical Learning (ISL)》

    • 作者:Gareth James, Daniela Witten, Trevor Hastie, Robert Tibshirani
    • 重點:淺顯易懂的機器學習與統計建模入門書籍,附有 R 範例。
    • 免費下載:https://www.statlearning.com
  3. 《Modern Applied Statistics with S》

    • 作者:Venables & Ripley
    • 重點:涵蓋線性與廣義線性模型、多變量方法、樹模型等。
  4. 《Practical Statistics for Data Scientists》

    • 作者:Peter Bruce, Andrew Bruce, Peter Gedeck
    • 重點:結合統計與資料科學的應用。

2. R 套件與文件

  1. 基礎統計檢定

  2. 效果量與統計報告

  3. 檢定力與樣本數估計

  4. 可重現環境

  5. 資料視覺化


3. 國際準則與研究報告標準

  1. APA (American Psychological Association) Publication Manual

    • 重點:規範統計結果報告方式(包含效果量與信賴區間)。
  2. CONSORT (Consolidated Standards of Reporting Trials)

  3. STROBE (Strengthening the Reporting of Observational Studies in Epidemiology)

  4. PRISMA (Preferred Reporting Items for Systematic Reviews and Meta-Analyses)

  5. ICMJE (International Committee of Medical Journal Editors)


4. 線上學習資源

  1. Coursera / edX 線上課程

    • Data Science Specialization (Johns Hopkins University)
    • Statistical Learning (Stanford University)
  2. YouTube 教學頻道

    • StatQuest with Josh Starmer(以淺顯方式解釋統計與機器學習)
    • R Programming Tutorials
  3. R-bloggers


小結

  • 學習統計方法需同時參考 教科書、套件文件與國際準則
  • 在撰寫報告時應遵循 APA, CONSORT, STROBE, PRISMA 等標準。
  • 善用線上資源(教學網站、開源教材、影片課程),可快速補充理論與實務技能。
  • 最終目標是確保研究 透明、可重現、符合國際規範

⬆ 回到目錄


附錄:infer 流程(置換/重抽樣思維示例)

infer 是 R 語言的一個套件,提供統一的語法框架,用於統計推論(假設檢定、信賴區間、隨機化檢定、bootstrap 等)。其設計理念是讓使用者以「聲明式」方式一步步構建統計檢定流程。


1. infer 的核心函數流程

  1. specify():定義變數與模型(指定應變數與解釋變數)。
  2. hypothesize():設定虛無假設(例如獨立性、等比例)。
  3. generate():透過重抽樣(bootstrap)或隨機化(permutation)生成模擬數據。
  4. calculate():計算統計量(平均差、比例差、相關係數等)。
  5. visualize()(選用):視覺化分布與檢定結果。
  6. get_p_value():計算 p 值。
  7. get_confidence_interval():計算信賴區間(CI)。

2. 範例:檢驗兩組平均數差異

問題設定

我們想檢查在 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」的順序。


3. 建立虛無分布(隨機化檢定)

# 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":打亂標籤(隨機置換),模擬「無關」的情境。

4. 計算 p 值

# 3. 計算 p 值(雙尾檢定)
p_val <- null_dist %>%
  get_p_value(obs_stat = obs_diff, direction = "two-sided")

p_val

輸出即為在 H0 成立下,觀察到與 obs_diff 一樣或更極端的差異之機率。


5. 信賴區間(CI)

除了假設檢定外,也可以利用 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

6. 視覺化檢定結果

# 視覺化虛無分布與觀察值
null_dist %>% visualize() +
  shade_p_value(obs_stat = obs_diff, direction = "two-sided")

此圖顯示虛無分布(直方圖/密度圖)與觀察值 obs_diff 所落位置,以及對應的顯著區域。


7. 注意事項

  1. infer 主要適用於入門與教學,方便展示隨機化檢定與 bootstrap 思維。
  2. 在嚴格研究中,建議與傳統統計方法(如 t 檢定、卡方檢定)結果對照。
  3. reps 應設為足夠大(通常 ≥ 1000),以獲得穩定結果。
  4. 可以用於均值差、比例差、相關係數、迴歸係數等推論。

小結

  • infer 提供了統一的語法框架,讓統計檢定流程更直觀。
  • 置換檢定 (Permutation test)Bootstrap 是兩大核心方法。
  • 結果可搭配傳統檢定法與圖形化輔助解讀。
  • 在教學與可重現研究中,infer 特別適合用於展示隨機化與重抽樣思維。

⬆ 回到目錄


快速決策指南(何時用哪個檢定?)

在實務研究中,面對不同的資料型態與研究問題,如何快速判斷應該使用哪一種統計檢定是非常重要的。本指南提供一個系統化的對照表,協助分析者在短時間內選擇合適的方法。


1. 檢定選擇流程圖

  1. 變數型態

    • 數值型(連續/離散):平均數、變異數檢定
    • 類別型(名目/序位):比例或頻數檢定
  2. 比較的群組數

    • 1 組 vs 常數
    • 2 組(獨立 or 成對)
    • 多組(≥3)
  3. 假設檢查

    • 常態性是否成立?
    • 變異數是否相等?

2. 對照表:常見統計檢定方法

研究問題 資料型態 群組數 前提假設 推薦方法
檢查樣本平均數是否等於某值 數值型 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 相關

3. 視覺化決策建議

  • 數值型 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 = "不同變速箱類型的油耗比較")

4. 注意事項

  1. 在選擇檢定前,務必檢查資料型態(數值型 vs 類別型、常態性、等變異)。
  2. 不要僅依靠 p 值,應同時報告效果量與信賴區間。
  3. 在樣本數小或假設不成立時,優先考慮非參數檢定。
  4. 在多組比較後,應搭配 事後檢定(Post-hoc test)
  5. 視覺化能幫助理解數據特性與檢定結果,建議與統計檢定搭配使用。

小結

  • 統計檢定的選擇,取決於資料型態、樣本大小與研究問題。
  • 快速決策表與流程圖 能幫助你在複雜研究中快速找到適當方法。
  • 數據分析是一種探索與驗證的過程:即使一開始不確定方法,也能透過嘗試與比對逐步找到最佳解答。

📢 :別害怕面對龐雜的數據與眾多方法,每一次分析都是一次學習的機會。透過練習、檢查假設、並搭配圖表與效果量,你將能更有信心地解讀數據,並讓研究結果更具說服力!


⬆ 回到目錄

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors