前言

我們假設讀者已具備正確使用雙樣本假設檢定的基礎知識,故本文並不會詳加論之。需提醒各位讀者,本文將重心放於協助您以R commander立即解決當前的問題,我們十分鼓勵讀者自行學習R語言,亦強烈建議您將學習重心放於理解而非計算

本文分為以下三個部分:

  • 期望值 \(\mu\) 之假設檢定

  • 變異數 \(\sigma\) 之假設檢定

  • 比例 \(p\) 之假設檢定

考慮部分讀者可能對於檢定方法較不熟悉,我們提供下圖讓讀者參考兩獨立母體期望值 \(\mu\) 之假設檢定的\({\color{red}{一種}}\)方法。

\({\color{red}{注意}}\):上圖我們僅提供一種可行的方案。舉例來說, Wilcoxon rank sum test並不需假設其母體為常態分布,有常態分佈假設或大樣本時亦可使用。我們鼓勵讀者去熟悉各種檢定方法的假設並活用之,不一定要按照上圖的方法去執行。

整齊的資料

如何整理資料是我們必須學習的一個課題,引用Hadley WickhamJournal 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:接著選取V1V2,再點OK,使用中的資料將變為StakedDataV1V2會被堆疊成一欄,名為factor;V1V2的值會被堆疊成另一欄,名為variable。但是由於兩獨立樣本觀察值個數可能不同,執行後可能會出現NA值(缺失值)。


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


若已經有整齊的資料的就不一定要手動輸入了,以下提供其他幾種輸入方法供讀者參考。

輸入CSV檔,文字檔或剪貼簿

由資料\(\Rightarrow\)匯入資料\(\Rightarrow\)匯入文字檔,剪貼簿或URL檔,接著選擇適當的\(\color{blue}{資料檔位置}\)\(\color{blue}{欄位分隔字元}\)(CSV檔請選逗號Commas)及\(\color{blue}{小數點符號}\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

更多資訊請參考4,安裝R Studio參考6

期望值 \(\mu\) 之假設檢定

  • Z檢定

R commander中並沒有Z檢定,一方說法為誤用T檢定不會造成太大的問題(why?)。但我們仍提供一個R code的範例供參考。

Step1: 輸入兩筆資料(分開的),以下範例為資料集sample3中僅含一變數rate3,資料集sample4中僅含一變數rate4,且我們已知他們的常態母體變異數分別為0.22455620.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)雙尾檢定 \(\alpha=0.05\)

由上圖可知檢定結果

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\) 值,以及兩樣本的變異數是否相等

(1)變異數相等

由上圖可知,\(\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\)

  • Wilcoxon rank sum test

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\)

(1)雙尾檢定 \(\alpha=0.05\)

由上圖可知,第一筆資料的自由度為 \(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\)

(1)變異數相等

由上圖可知,獨立樣本自由度\(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中僅含一變數rate3sample4中僅含一變數rate4。如果你有觀察到的話,你可能會覺得很奇怪,為什麼要用34呢?以下將會為大家揭曉這份資料的秘密。

關於這個 \(\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")

Step2: 看一下它長什麼樣子。

data

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]