前言
我們假設讀者已具備正確使用雙樣本假設檢定的基礎知識,故本文並不會詳加論之。需提醒各位讀者,本文將重心放於協助您以R commander立即解決當前的問題,我們十分鼓勵讀者自行學習R語言,亦強烈建議您將學習重心放於理解而非計算。
本文分為以下三個部分:
期望值 \(\mu\) 之假設檢定
變異數 \(\sigma\) 之假設檢定
比例 \(p\) 之假設檢定
考慮部分讀者可能對於檢定方法較不熟悉,我們提供下圖讓讀者參考兩獨立母體期望值 \(\mu\) 之假設檢定的\({\color{red}{一種}}\)方法。

\({\color{red}{注意}}\):上圖我們僅提供一種可行的方案。舉例來說, Wilcoxon rank sum test並不需假設其母體為常態分布,有常態分佈假設或大樣本時亦可使用。我們鼓勵讀者去熟悉各種檢定方法的假設並活用之,不一定要按照上圖的方法去執行。
整齊的資料
如何整理資料是我們必須學習的一個課題,引用Hadley Wickham在Journal of Statistical Software,Tidy Data中所述:
\({Tidy\ datasets\ are\ easy\ to\ manipulate,\ model\ and\ visualise,\ and\ have\ a\\ specific\ structure:\ each\ variable\ is\ a\ column,\ each\ observation\ is\ a\ row,\\ and\ each\ type\ of\ observational\ unit\ is\ a\ table.}\)
我們常用的表格有寬表格與長表格兩種:
寬表格的特性是每增加一行即增加一個變數
長表格的特性是每增加一列即增加一個觀察值
更詳細的資訊請參考[2]和[3]。
預備知識-資料輸入
成對樣本
在輸入成對樣本時我們採用寬表格。由資料\(\Rightarrow\)新資料集輸入型如入下圖的資料。

獨立樣本
<法一>在輸入成對樣本時我們採用長表格。由資料\(\Rightarrow\)新資料集輸入型如入下圖的資料。

<法二>Step1:先輸入寬表格。

<法二>Step2:按資料\(\Rightarrow\)使用中的資料集\(\Rightarrow\)堆疊使用中資料集內的變數。

<法二>Step3:接著選取V1和V2,再點OK,使用中的資料將變為StakedData,V1和V2會被堆疊成一欄,名為factor;V1和V2的值會被堆疊成另一欄,名為variable。但是由於兩獨立樣本觀察值個數可能不同,執行後可能會出現NA值(缺失值)。


<法二>Step4:資料\(\Rightarrow\)使用中的資料集\(\Rightarrow\)移除有缺值的列\(\Rightarrow\)包含所有變數\(\Rightarrow\)OK


若已經有整齊的資料的就不一定要手動輸入了,以下提供其他幾種輸入方法供讀者參考。
輸入EXCEL檔案
R commander讀取EXCEL檔案的功能有問題,可以將他轉為CSV檔再輸入,請參考5。但\(\color{red}{若您非要直接讀取EXCEL檔案不可的話}\),可以進入R的介面,點選左上角的檔案\(\Rightarrow\)變更現行目錄,將之變更至檔案所在資料夾。

輸入以下指令
install.packages("ezpickr") #僅需安裝一次,之後就不用打這行了
#下載點可以選擇離我們較近的國家,如:日本、韓國
library("ezpickr") #當你要使用這個包時就要輸入這行
接著輸入資料集名稱 <- pick(“檔案名稱.xlsx”)或資料集名稱 <- pick(“檔案名稱.xls”),下圖示範將pair_sample.xlsx讀入,名為ham。
ham <- pick("pair_sample.xlsx")
最後,就可以在R Commander中的資料集選擇之。
用R套件中的資料
點選資料\(\Rightarrow\)R套件中的附帶資料集\(\Rightarrow\)讀取指定套件中附帶的資料集

接著選擇適當資料集與所需資料即可,下圖以datasets中的iris為例。
用R Studio輸入資料
點選左上角的File\(\Rightarrow\)Import Dataset,在選擇引入檔案類型,下圖以 EXCEL 檔為例

點選右上角的Browse\(\Rightarrow\)選擇資料\(\Rightarrow\)Open\(\Rightarrow\)Import

期望值 \(\mu\) 之假設檢定
R commander中並沒有Z檢定,一方說法為誤用T檢定不會造成太大的問題(why?)。但我們仍提供一個R code的範例供參考。
Step1: 輸入兩筆資料(分開的),以下範例為資料集sample3中僅含一變數rate3,資料集sample4中僅含一變數rate4,且我們已知他們的常態母體變異數分別為0.2245562和0.2503402。


Step2: 輸入以下指令
install.packages("BSDA") #僅需安裝一次,之後就不用打這行了
library("BSDA") #當你要使用這個包時就要輸入這行
z.test(x = sample3$rate3, y = sample4$rate4, alternative = "two.sided", mu = 0, sigma.x = 0.2245562, sigma.y = 0.2503402, conf.level = 0.95)

因為\(0 \in (-0.0828811,0.1683012)\),\(\mu_1 - \mu_2\)的95%信賴區間,所以我們不拒絕\(H_0\)。
討論說明
方法: Z test
假設: 母體皆為常態分布,母體變異數皆已知,大樣本時可以樣本變異數代替母體變異數
檢定統計量: \(\displaystyle Z = \frac{\overline{X}-\overline{Y}}{\sqrt{\frac{\sigma_x^2}{n_x}+\frac{\sigma_y^2}{n_y}}} \sim \mathcal{N}(0,1)\), under \(H_0\)
我們一般會藉由Q-Q plot去測試樣本是否為常態分布,若觀察值幾乎都落在合理範圍內(接近成一條斜直線),那麼我們會主觀上的認定樣本不違反常態假設。以下示範如何使用R commander繪製Q-Q plot。
Step1 : 繪圖\(\Rightarrow\)分量比較(Q-Q)圖

Step2 : 選擇變數\(\Rightarrow\)OK


更多關於Q-Q plot的資訊請參考7。接著簡單就紹一下z.test函數的用法。
表示法:
z.test(x, y = NULL, alternative = “two.sided”, mu = 0, sigma.x = NULL, sigma.y = NULL, conf.level = 0.95)
參數:
|
參數
|
說明
|
|
x
|
數值向量,NA值和Infs會被移除
|
|
y
|
數值向量,NA值和Infs會被移除
|
|
mu
|
一個數值,虛無假設中指定的平均值或是平均值差異
|
|
alternative
|
字元字串,為“greater”, “less” 與 “two.sided”三者之一。單樣本時,表x母體平均對於mu的關係;雙樣本時,表x母體平均與y母體平均之差對於mu的關係
|
|
sigma.x
|
一個數值,x母體標準差
|
|
sigma.y
|
一個數值,y母體標準差
|
|
conf.level
|
0~1之間的一個數值,信心水準
|
成對樣本 \(\mu_1 = \mu_2\) 檢定
Step1:準備兩筆常態分佈的資料,合併成寬表格形成成對樣本並設定資料名稱“MergedNorm”






Step2:進行T-test,設定單尾或雙尾檢定並調整 \(\alpha\) 值
由上圖可知檢定結果
1. p-value判別法 p-value\(=2.2 \times 10^{-16} < \alpha=0.05\),故拒絕 \(H_0\)
2. 信賴區間判別法 \(\mu_1 - \mu_2 =0 \not\in (4.294563,5.674268)\) ,故拒絕\(H_0\)
(2)單尾檢定 \(\alpha=0.05\)


由上圖可知,\(\mu_1 - \mu_2 =0 \not\in\)CI\(=(4.408885,\infty)\),故拒絕 \(H_0\)
獨立樣本 \(\mu_1 = \mu_2\) 檢定
Step1:將上述的成對樣本“MergedNorm”堆疊形成獨立樣本,並設定資料名稱“StackedNorm”



Step2:進行T-test,設定單尾或雙尾檢定並調整 \(\alpha\) 值,以及兩樣本的變異數是否相等
由上圖可知,\(\mu_1 - \mu_2 = 0 \not\in\) \((4.308674,5.660157)\) ,故拒絕 \(H_0\)
\(\star\) 註:變異數相等時,\(df=(n_1 - 1) + (n_2 -1)\),所以上圖之\(df=50-1+50-1=98\)
(2)變異數相異


由上圖可知,\(\mu_1 - \mu_2 = 0 \not\in (4.304773,5.664058)\) ,故拒絕 \(H_0\)
\(\star\) 註:兩樣本個數分別為\(n_1\)、\(n_2\),變異數相異時,自由度的估計值\(\displaystyle v=\frac{(\frac{s_1^{2}}{n_1}+\frac{s_2^{2}}{n_2})^{2}}{\frac{s_1^{4}}{n_1^{2}v_1}+\frac{s_2^{4}}{n_2^{2}v_2}}\),其中\(v_1=n_1 -1\),\(v_2=n_2 -1\)
Step1:輸入獨立樣本資料

Step2:統計量\(\Rightarrow\)無母數檢定\(\Rightarrow\)雙樣本Wilcoxon檢定

Step3:選擇適當資料與選項


\(\color{blue}{檢定類型}\)中精確性用於小樣本;近似常態分佈用於大樣本;預設即讓程式自行判斷樣本屬大或小;近似常態分佈與連續性校正除了會近似常態還會加強連續性。

因為p-value\(>0.05\),所以不拒絕\(H_0\)。
討論說明
方法: Wilcoxon rank sum test
假設: 兩母體形狀相似
統計檢定量: \(W = \sum_{i=1}^{n}r_i\),其中\(n=min\{n_x,n_y\}\)
我們一般可以把樣本繪出觀察形狀是否相似,但當樣本數太小時,可能也看不太出來(如範例)。值得注意的是,這個方法是在檢定兩母體的中位數是否相等,非平均數。
變異數 \(\sigma_1^{2} = \sigma_2^{2}\) 之假設檢定
[注意]
1.\(F=\frac{\chi_m^{2}/m}{\chi_n^{2}/n}\),因此做F檢定時所需的樣本需來自常態分布母體, 若為其他分布則需樣本數\(\geq 30\)而趨近於常態分佈才可適用F檢定
2.雙樣本變異數F檢定須為兩獨立樣本,故使用上述之獨立樣本“StackedNorm”進行檢定
進行F-test,設定單尾或雙尾檢定,調整 \(\alpha\) 值
由上圖可知,第一筆資料的自由度為 \(num \ df=49\),第二筆資料的自由度為 \(denom \ df=49\),而\(\frac{\sigma_1^{2}}{\sigma_2^{2}}=1 \not \in (2.954435,9.174431)\) ,故拒絕 \(H_0\)
(2)單尾檢定 \(\alpha=0.05\)


由上圖可知,\(\frac{\sigma_1^{2}}{\sigma_2^{2}}=1 \in (0.000000,8.367984)\) ,所以不拒絕 \(H_0\)
比例 \(p\) 之假設檢定
Step1:準備兩筆伯努利分佈的資料,合併成寬表格形成成對樣本並設定資料名稱“MergedBer”(二項分布的實驗次數為一次時即為伯努利分布)





Step2:將上述的成對樣本“MergedBer”堆疊形成獨立樣本,設定資料名稱“StackedBer”,因為兩樣本的觀察值個數不同,所以需將“StackedBer”的NA值移除


下圖左:移除NA值前 下圖右:移除NA值後

Step3:進行T-test,設定單尾或雙尾檢定並調整 \(\alpha\) 值
由上圖可知,獨立樣本自由度\(df=(40-1)+(50-1)=88\),而p-value\(=0.7798 > \alpha = 0.05\) ,所以不拒絕 \(H_0\)
(2)變異數相異


由上圖可知,\(p_1 - p_2=0 \in (-0.1827062,0.2427062)\) ,所以不拒絕 \(H_0\)
參考
[1] http://vita.had.co.nz/papers/tidy-data.pdf
[2] https://daxpowerbi.com/長表格-寬表格-好的表格讓你玩轉資料科學!/
[3] https://daxpowerbi.com/寬表格轉換成長表格實戰power-bi-python-r/#anchor_5
[4] https://support.rstudio.com/hc/en-us/articles/218611977-Importing-Data-with-RStudio
[5] https://officeguide.cc/excel-export-csv-file-tutorial/
[6] https://medium.com/@GalarnykMichael/install-r-and-rstudio-on-windows-5f503f708027
[7] https://data.library.virginia.edu/understanding-q-q-plots/
[8] https://data.gov.tw/
[9] http://stats.moe.gov.tw/files/detail/107/107_student.csv
沒錯!接下來就是 \(\color{#FF00FF}{彩蛋}\) 的部分了!
\(\color{red}{警告}\): 以下內容較適合已經具備R語言基礎的學生觀看。
不知道各位還記不記得前面在做Z檢定時我們所使用的資料:sample3中僅含一變數rate3,sample4中僅含一變數rate4。如果你有觀察到的話,你可能會覺得很奇怪,為什麼要用3和4呢?以下將會為大家揭曉這份資料的秘密。
關於這個 \(\color{#FF00FF}{彩蛋}\) 的動機約莫要從我大學入學典禮那天(反正就是剛進大學時)說起,但我懶得寫太多,所以直接切入重點,我拿到了一本性別平等教育協會的筆記本。
那時候我沒有細看上面的字,就天真地認為「這所學校的女男比是5:5」。於是乎,我去找了政府資料開放平台8中的「107學年大專院校校別學生數」9,想說要來算算看這是不是個事實,無意間就發覺這資料好像可以拿來做Z檢定報告的部分。以下就來講解我如何處理這份資料:
Step1: 使用tidyverse中的read_csv讀資料進來
library("tidyverse")
data <- read_csv("http://stats.moe.gov.tw/files/detail/107/107_student.csv")
Step3: 改欄的名字,去掉不要的列。
data1 <- data[2:nrow(data),]
colnames(data1) <- as.character(data[2,])
data2 <- data1[2:nrow(data1),]
Step4: 去蕪存菁後取樣本,就完成了!
data3 <- data2 %>%
filter( data2[,3] == "D 日", 等級別 == "B 學士") %>% #大學生
select("學校名稱", "三年級男生", "三年級女生", "四年級男生", "四年級女生") %>% #大三和大四
mutate( 三年級男生 = as.numeric(stringr::str_replace(三年級男生,",",""))) %>% #去掉","改為數值
mutate( 三年級女生 = as.numeric(stringr::str_replace(三年級女生,",",""))) %>%
mutate( 四年級男生 = as.numeric(stringr::str_replace(四年級男生,",",""))) %>%
mutate( 四年級女生 = as.numeric(stringr::str_replace(四年級女生,",",""))) %>%
mutate( rate3 = 三年級女生/三年級男生) %>% #大三女男比
mutate( rate4 = 四年級女生/四年級男生) %>% #大四女男比
select("學校名稱", "rate3", "rate4")
sample3 <- data3[,2][sample(1:nrow(data3), size = 25, replace = F),1]
sample4 <- data3[,3][sample(1:nrow(data3), size = 30, replace = F),1]