分析目的

本報告使用 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 分數
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 分數的均值與樣本標準差
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 分數直方圖

# 將有效 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 附近,整體近似鐘形且大致對稱,略微左偏。