交叉表或樞紐分析表,是最常使用的統計方法。大部分的情況,可以透過table()來呼叫交叉表。
交叉表
table()在只有單一變數的情況下,會自動產生次數分配表。
> table(class_12$english, useNA="ifany")
61 66 68 73 77 81 86 89 90 96 97 ‹NA›
1 1 1 1 1 1 1 1 1 1 1 1
有兩個變數才會產生交叉表。
> pass<-c("") #將成績分為及格與不及格
> pass[class_12$math<60]<-0 #不及格編碼為0
> pass[class_12$math>=60]<-1 #及格編碼為1
> pass<-factor(pass, levels=c(0,1), labels=c("no pass", "pass")) #變數命名
> table(class_12$gender, pass, useNA="ifany")
pass
no pass pass
F 1 5
M 1 4
‹NA› 0 1
邊際總和
所謂邊際總和就是各欄與各列的總和。margin.table()配合預設值1與2的功能,可以完成列與欄的加總計算。
> mathpass_table<-table(class_12$gender, pass, useNA="ifany")
> margin.table(mathpass_table, 1) #列(性別)加總
F M ‹NA›
6 5 1
> margin.table(mathpass_table, 2) #欄(及格與否)加總
pass
no pass pass
2 10
一個更簡便的方法是透過addmargins()來計算:
> addmargins(mathpass_table)
pass
no pass pass Sum
F 1 5 6
M 1 4 5
‹NA› 0 1 1
Sum 2 10 12
邊際機率
有了邊際總和後,可以計算出邊際機率:
> margin.table(mathpass_table, 1)/margin.table(mathpass_table)
F M ‹NA›
0.50000000 0.41666667 0.08333333
> margin.table(mathpass_table, 2)/margin.table(mathpass_table)
pass
no pass pass
0.1666667 0.8333333
用addmargins()計算邊際機率:
> addmargins(prop.table(mathpass_table))
pass
no pass pass Sum
F 0.08333333 0.41666667 0.50000000
M 0.08333333 0.33333333 0.41666667
‹NA› 0.00000000 0.08333333 0.08333333
Sum 0.16666667 0.83333333 1.00000000
round()指令四捨五入取到小數第2位:
> round(addmargins(prop.table(mathpass_table)), 2)
pass
no pass pass Sum
F 0.08 0.42 0.50
M 0.08 0.33 0.42
‹NA› 0.00 0.08 0.08
Sum 0.17 0.83 1.00
百分比
表格中每一個儲存格的百分比,可以直接呼叫prop.table()計算,此時分母是樣本總數:
> prop.table(mathpass_table)
pass
no pass pass
F 0.08333333 0.41666667
M 0.08333333 0.33333333
‹NA› 0.00000000 0.08333333
列百分比,設定預設值1來計算:
> prop.table(mathpass_table, 1)
pass
no pass pass
F 0.1666667 0.8333333
M 0.2000000 0.8000000
‹NA› 0.0000000 1.0000000
欄百分比,設定預設值2來計算:
> prop.table(mathpass_table, 2)
pass
no pass pass
F 0.5 0.5
M 0.5 0.4
‹NA› 0.0 0.1