假設檢定

此章節運用在R軟體之前,要先將課堂上的虛無假設與對立假設理解透徹,當運用其檢定函式時參數才不會放錯位置,並且理解單尾與雙尾檢定的差異,運用上才能遊刃有餘。

首先先以Z值檢定配合課堂例子開始進入本章節教學,在使用前必須先安裝asbio套件並且載入。

install.packages("asbio")
## Installing package into 'C:/Users/User/Documents/R/win-library/3.4'
## (as 'lib' is unspecified)
## Error in contrib.url(repos, "source"): trying to use CRAN without setting a mirror
library(asbio)
## Warning: package 'asbio' was built under R version 3.4.3
## Loading required package: tcltk

安裝完畢確定載入成功後先介紹Z檢定的函示說明

函數 指令 說明
單樣本Z檢定 one.sample.z() p-value值

這裡運用sample隨機產生20個樣本,並且定義為投手投球的球速,針對速度(speed),探討平均速度大於100,所以先定義出虛無假設(平均速度小於100)與對立假設(平均速度超過100),先將此些條件新建出對應物件。

set.seed(15)                                          #設計隨機編號
ball_speed <- sample(50:150,20,replace = TRUE)        #宣告速度樣本(ball_speed)
ball_mean <- mean(ball_speed)                         #宣告平均速度(ball_mean)
ball_n <- 20                                          #宣告樣本數(ball_n)
ball_sd <- sd(ball_speed)                             #宣告速度標準差(ball_speed)

運用one.sample.z()函式,計算出其中Z值與P-value值,下面介紹此函數中個別參數意義。

ball_z_test <- one.sample.z(ball_speed,                 #放入預檢定資料集
                            null.mu = 100,              #虛無假設
                            xbar = ball_mean,           #平均值
                            sigma = ball_sd,            #標準差
                            alternative = "greater",    #檢定方式(右尾)
                            conf = 0.95 )               #信心值
ball_z_test
## 
## One sample z-test 
##        z*    P-value
##  1.872116 0.03059525

下面利用之前學過的視覺化方法,呈現計算出來的型一錯誤(p-value)

sigma <- ball_sd                     #宣告標準差
mu0   <- 100                         #宣告虛無假設
alpha <- ball_z_test$test$`P-value`  #宣告之前計算出來的p-value
xLims <- c(0, 200)                   #定義X座標軸     
crit <- qnorm(1-alpha, mu0, sigma)   #算出p-value對應X軸的臨界值
crit2 <- qnorm(0.95, mu0, sigma)     #算出95%信心對應X軸的臨界值
right <- seq(crit, xLims[2],   length.out=100)  #以臨界值到X軸邊界切出100位置
yH0r  <- dnorm(right, mu0, sigma)               #利用常態分配分別以剛剛切出100位子分別計算出Y軸位置
curve(dnorm(x, mu0, sigma),                     #利用算出來的平均值與標準差,畫出常態分配
      xlim=xLims, lwd=2, col="red", xlab="x", ylab="density", 
      main="Normal distribution", ylim=c(0, 0.018), xaxs="i")
polygon(c(right, rev(right)),
        c(yH0r, numeric(length(right))), border=NA,     #以臨界值向右塗上陰影
        col=rgb(1, 0.3, 0.3, 0.6))
text(crit+5,  0.0015, adj = 0,label="p-value")          #剛剛上色的部分為計算出來的p-value值
abline(v=crit, lty=1, lwd=3, col="blue")                #利用藍色線標記出計算出來的p-value值對應臨界值
text(crit+1,  0.010,  adj=0, label="←critical value")   #標記此線段為計算出來的p-value值對應的臨界值

abline(v=crit2, lty=1, lwd=3, col="red")                #利用紅色線段標記95%信心對應X軸的臨界值
text(crit2+1,  0.015,  adj=0, label="←alpha=0.05")      #標記此線段為95%信心對應X軸的臨界值

利用上面的是視覺化結果可以幫助理解在虛無假設下,拒絕域在什麼位置,並且對應的臨界值為多少,對於視覺化有興趣的同學可以試著操作左尾檢定與雙尾檢定如何運用視覺化來呈現。

Alpha & Beta

此段篇幅利用剛剛棒球球速的例子配合視覺化來探討Alpha & Beta值,所以要多給定一個新的平均值。

mu1   <- 130                        #宣告對立假設(新的平均值)
pow <- pnorm(crit, mu1, sigma)      #算出對立假設下對應的檢定力(power)
beta <- 1-pow                       #反之用1相減可算出所求beta
left  <- seq(xLims[1],              #以臨界值到X軸原點切出100位置
             crit, length.out=100) 
yH1l  <- dnorm(left,  mu1, sigma)   #利用常態分配分別以剛剛切出100位子分別計算出Y軸位置
curve(dnorm(x, mu0, sigma),         #利用算出來的平均值與標準差,畫出常態分配
      xlim=xLims, lwd=2, col="red", xlab="x", ylab="density", 
      main="Normal distribution", ylim=c(0, 0.018), xaxs="i")
curve(dnorm(x, mu1, sigma),         #利用新的平均值與標準差,畫出常態分配
      lwd=2, col="blue", add=TRUE)
polygon(c(right, rev(right)),       #以臨界值向右塗上陰影
        c(yH0r,
          numeric(length(right))), border=NA,     
        col=rgb(1, 0.3, 0.3, 0.6))
polygon(c(left,  rev(left)),        #以臨界值向左塗上陰影
        c(yH1l, numeric(length(left))),  border=NA,
        col=rgb(0.3, 0.3, 1, 0.6))
text(crit-12, 0.004,                #標記出beta
     expression(beta),  cex=1.3)    
text(crit+5,  0.0015,               #標記出alpha
     expression(alpha), cex=1.3)

現在我們調整Alpha & Beta的參數看看在圖形上會出現什麼差異。

alpha <- alpha+0.05                 #跟新alpha值
crit <- qnorm(1-alpha, mu0, sigma)  #跟新臨界值
right <- seq(crit, xLims[2],   length.out=100)  #以臨界值到X軸邊界切出100位置
yH0r  <- dnorm(right, mu0, sigma)               #利用常態分配分別以剛剛切出100位子分別計算出Y軸位置
pow <- pnorm(crit, mu1, sigma)      #算出對立假設下對應的檢定力(power)
beta <- 1-pow                       #反之用1相減可算出所求beta
left  <- seq(xLims[1],              #以臨界值到X軸原點切出100位置
             crit, length.out=100) 
yH1l  <- dnorm(left,  mu1, sigma)   #利用常態分配分別以剛剛切出100位子分別計算出Y軸位置
curve(dnorm(x, mu0, sigma),         #利用算出來的平均值與標準差,畫出常態分配
      xlim=xLims, lwd=2, col="red", xlab="x", ylab="density", 
      main="Normal distribution", ylim=c(0, 0.018), xaxs="i")
curve(dnorm(x, mu1, sigma),         #利用新的平均值與標準差,畫出常態分配
      lwd=2, col="blue", add=TRUE)
polygon(c(right, rev(right)),       #以臨界值向右塗上陰影
        c(yH0r,
          numeric(length(right))), border=NA,     
        col=rgb(1, 0.3, 0.3, 0.6))
polygon(c(left,  rev(left)),        #以臨界值向左塗上陰影
        c(yH1l, numeric(length(left))),  border=NA,
        col=rgb(0.3, 0.3, 1, 0.6))
text(crit-12, 0.004,                #標記出beta
     expression(beta),  cex=1.3)    
text(crit+5,  0.0015,               #標記出alpha
     expression(alpha), cex=1.3)

希望本章節藉由視覺化的效果,對於同學們在學習上更能清楚理解估計的含意。

參考資料

本篇筆記參考“R軟體:應用統計方法”(作者:陳景祥) stackexchange.com