logo
生物科学研究所 井口研究室
Laboratory of Biology, Okaya, Nagano, Japan
Home

Dixon の Q 検定(外れ値検定)を R で計算:統計表の作成

井口豊(生物科学研究所,長野県岡谷市)
最終更新: 2022 年 11 月 1 日

1. はじめに

分析化学などでしばしば使われる外れ値(異常値)を検出する検定に,Dixon の Q 検定がある。最近,これに関して,生命科学・生物工学のための 間違いから学ぶ実践統計解析 - R・Pythonによるデータ処理事始(川瀬雅也・松田史生 著,近代科学社Digital)を読んでいて,どうも気になる点があった。この本の p.53–54の内容である。この内容は,もともと以下の生物工学会誌に掲載された解説論文のようだ。

川瀬雅也・松田史生(2017)
間違いから学ぶ実践統計解析 第6回 外れ値にご用心
生物工学会誌 95(2): 96-99.

前記の著書でも,論文でも, R を使った解説をしているのだが, Dixon の Q 検定に関しては,この検定のもとになった以下の論文の表を参照せよ,という解説だった。

Dean, R. B.and Dixon, W. J. (1951)
Simplified statistics for small numbers of observations
Analytical chemistry 23(4): 636-638.

ネット上の他のサイトでも,そのような方法のようだ。大学の授業や試験対策ならばそれも良いが,それだけでは面白くないので,ここでは R で計算してみた。

2. R で Dixon の Q 検定の統計表を作成

R の場合, dixonTest パッケージを利用すると, Dixon の Q 検定を実行できる。また,せっかく R で表を作るので, gt パッケージも利用して,以下のようなスクリプトにした。


#############
# Dixon's Q test 統計表

library(dixonTest)
library(gt)

q99<- q95<- q90<- as.numeric(NULL)

for(i in 3:10) {
  q99[i]<- qdixon(0.01, n=i)
  q95[i]<- qdixon(0.05, n=i)
  q90[i]<- qdixon(0.10, n=i)
}

df<- data.frame(
  n = 1:10,
  Q.90 = q90,
  Q.95 = q95,
  Q.99 = q99
)

df

tab<- gt(df)

tab %>%
 tab_header(
 title = "Critical Values of Dixon's Q Test"
)

################

結果は以下の表 1 になった。

表 1.Dixon の Q 検定統計表 Dixon の Q 検定統計表

冒頭に挙げた川瀬・松田の著書も, R を使って解説しているのだから, Q 検定統計表を引かせるだけでなく,その作成スクリプトも掲載して欲しかった。改訂版に期待したい。

3. R で Dixon の Q 検定を実行する

表を引くのも面倒なので,直接, Dixon の Q 検定を実行してみよう。データは,前述の川瀬雅也・松田史生(2017) p.98 に出ている測定値 b を使う。 Q 検定も,後のバージョン(Refine version)を使ってみる。


#############
library(dixonTest)

b<- c(8.1, 9.5, 10.5, 8.5)
dixonTest(
   b, alternative = "two.sided",
   refined = TRUE
)

################

結果は,以下のとおりである。


#############
        Dixons outlier test

data:  b
r10 = 0.41667, n = 4, p-value = 0.7378
alternative hypothesis: two.sided
sample estimates:
  pos value 
  3.0  10.5 
################

データ 3 番目の 10.5 が外れ値候補だったが,有意差は認められなかった。

関連ページ

シューハート管理図係数の計算

Home