本報告使用 PISA 2022 資料中的 ESCS(經濟、社會與文化地位指數),計算每筆資料的 z 分數、摘要 z 分數的均值與標準差,並繪製直方圖。ESCS 為數值型指數變項,適合以標準化分數和直方圖描述其相對位置與分布。
# 載入讀取 SPSS 檔案與繪圖所需套件
library(haven)
library(ggplot2)
# 讀取與本 R Markdown 檔案放在同一資料夾的 SPSS 資料
data <- read_sav("PISA_tawian2022_trimmed_lab.sav")
# 將帶有 SPSS 標籤的欄位轉成一般數值,並辨識有效觀察值
escs <- as.numeric(data$ESCS)
valid <- !is.na(escs)
library() 載入套件;read_sav() 讀取 SPSS
.sav 檔。names(data)
用來取得資料欄位名稱,若找不到 ESCS,stop()
會明確停止並顯示錯誤。as.numeric() 將 ESCS
轉為可計算的數值,!is.na() 則標記非缺失觀察值。
本資料共有 5599 筆有效觀察值,缺失值 0 筆。
# 以有效觀察值的平均數與樣本標準差計算 z 分數
z_escs <- rep(NA_real_, length(escs))
z_escs[valid] <- (escs[valid] - mean(escs[valid])) / sd(escs[valid])
公式為 \(z_i=(x_i-\bar{x})/s\):先從每筆 ESCS
減去有效資料的平均數,再除以樣本標準差。rep(NA_real_, ...)
建立與資料等長的數值向量並保留缺失位置;z_escs[valid]
僅對有效觀察值計算,因此原有缺失值仍保留為 NA。
# 計算有效 z 分數的均值與樣本標準差
z_mean <- mean(z_escs[valid])
z_sd <- sd(z_escs[valid])
data.frame(
統計值 = c("z 分數均值", "z 分數標準差"),
數值 = c(
formatC(z_mean, format = "f", digits = 2),
formatC(z_sd, format = "f", digits = 2)
)
)
mean() 和 sd()
分別計算均值與樣本標準差。[valid]
排除缺失值;formatC()
將數值格式化為小數點後兩位,確保均值以 0.00 顯示。
# 將有效 z 分數整理為繪圖資料
plot_data <- data.frame(z_ESCS = z_escs[valid])
# 以 30 個區間繪製直方圖
z_histogram <- ggplot(plot_data, aes(x = z_ESCS)) +
geom_histogram(bins = 30, color = "white", fill = "steelblue") +
labs(
title = "ESCS z 分數分布",
x = "ESCS z 分數",
y = "次數"
) +
theme_minimal()
z_histogram
# 將圖另存為 PNG,方便在報告外使用
ggsave("ESCS_z_score_histogram.png", z_histogram, width = 8, height = 5, dpi = 300)
ggplot() 指定繪圖資料及 x
軸變項;geom_histogram() 將連續型 z
分數分組並呈現各組次數,bins = 30
指定區間數。labs()
設定標題與座標軸名稱,theme_minimal()
使用簡潔的圖表主題。ggsave() 將圖表輸出為 PNG 檔。
z 分數的均值為 -0.00,標準差為 1.00。直方圖呈單峰,觀察值主要集中在 0 附近,整體近似鐘形且大致對稱,略微左偏。