本段程式碼載入後續資料讀取與描述統計所需要的 R 套件。接著,使用
read_spss() 函數讀取 PISA 2022 的 SPSS
格式資料檔,並將資料儲存為 PISA.dat。
library(haven) # 讀取 SPSS(.sav)格式資料
library(psych) # 提供 describe() 描述統計函數
# 讀取 PISA 2022 臺灣資料,儲存為 PISA.dat
PISA.dat <- read_spss("PISA_tawian2022_trimmed_lab.sav")
本次分析要檢驗臺灣學生的數學成績(PV1MATH)是否與 PISA 全球參與國家學生的數學平均 440 分有顯著差異。由於題目只問「是否有差異」,沒有指定方向,因此採用雙尾檢定,顯著水準 \(\alpha = .05\)。
本節先計算 PV1MATH 的描述統計,作為後續 t 檢定的基礎。
本段程式碼使用 psych 套件中的 describe()
函數,計算 PV1MATH
的描述統計量,包括有效樣本數、平均數、標準差、中位數、最小值、最大值、偏態與峰度等資訊。
describe(PISA.dat$PV1MATH) # PV1MATH 的描述統計
## vars n mean sd median trimmed mad min max range skew
## X1 1 5599 537.82 109.73 541.62 539.17 117.1 219.06 917.38 698.32 -0.1
## kurtosis se
## X1 -0.43 1.47
本段程式碼分別計算 PV1MATH 的平均數、標準差與有效樣本數,並儲存為
MP、MP_SD 與 n,供下一節計算 t
值使用。na.rm = TRUE
表示計算時排除缺失值,sum(!is.na())
則計算非缺失值的個數。
MP <- mean(PISA.dat$PV1MATH, na.rm = TRUE) # 平均數 M
MP_SD <- sd(PISA.dat$PV1MATH, na.rm = TRUE) # 標準差 SD
n <- sum(!is.na(PISA.dat$PV1MATH)) # 有效樣本數 n(排除缺失值)
MP
## [1] 537.822
MP_SD
## [1] 109.7305
n
## [1] 5599
本節依照單一樣本 t 檢定的公式,手動計算 t 值與 p 值,再以 R 內建的
t.test() 函數驗證。
t 值的公式為樣本平均數與檢定值(440)的差距,除以平均數的標準誤(\(SE = SD / \sqrt{n}\)):
\[t = \frac{M - 440}{SD / \sqrt{n}}\]
MP_t <- (MP - 440) / (MP_SD / sqrt(n)) # t = (M - 440) / (SD / sqrt(n))
MP_t
## [1] 66.70592
pt() 會回傳 t 分配中小於某個 t 值的累積機率。以
1 - pt(abs(MP_t), df = n - 1) 算出單尾的機率後再乘以
2,即可得到雙尾檢定的 p 值,自由度為 \(n -
1\)。
PT <- 2 * (1 - pt(abs(MP_t), df = n - 1)) # 雙尾 p 值,自由度 df = n - 1
PT
## [1] 0
PT 顯示為 0,並不代表 p 值真的等於 0,而是 p
值過於小。
本段程式碼使用 R 內建的 t.test() 函數進行單一樣本 t
檢定,mu = 440 設定檢定值為 440。輸出結果包含 t
值、自由度、p 值、平均數的 95%
信賴區間與樣本平均數,可用來確認上面手動計算的結果是否正確。
t.test(PISA.dat$PV1MATH, mu = 440) # 單一樣本 t 檢定,檢定值為 440
##
## One Sample t-test
##
## data: PISA.dat$PV1MATH
## t = 66.706, df = 5598, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 440
## 95 percent confidence interval:
## 534.9471 540.6968
## sample estimates:
## mean of x
## 537.822