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 になった。
冒頭に挙げた川瀬・松田の著書も, 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 が外れ値候補だったが,有意差は認められなかった。