R による Tukey-Kramer test

TukeyHSD() コマンドで Tukey-Kramer test を行う。

通常は Excel 等で作成した CSV ファイルを R に読み込んで分析する。しかし、ここでは便宜的に以下の簡単なデータフレームを作成し、data という変数に格納しておく。

data = data.frame(デバイス = c("デバイス A","デバイス B","デバイス A","デバイス A","デバイス C","デバイス C","デバイス B","デバイス C","デバイス A","デバイス A"), 出血量 = c(30,20,5,5,100,80,10,60,10,25))

data の内容を確認する。

data

デバイス間で出血量の平均に差があるかどうかを TukeyHSD() コマンドで検定する。

TukeyHSD(aov(data$出血量 ~ data$デバイス)) #95%信頼区間
TukeyHSD(aov(data$出血量 ~ data$デバイス), conf.level = 0.99) #99%信頼区間

Python による Tukey-Kramer test

statsmodels.stats.multicomp.pairwise_tukeyhsd() コマンドで Tukey-Kramer test を行う。p 値も示す。

Python を起動し、必要なライブラリを import する。

import pandas as pd
from statsmodels.stats.multicomp import pairwise_tukeyhsd

通常は Excel 等で作成した CSV ファイルを pandas に読み込んで分析する。しかし、ここでは便宜的に以下の簡単なデータフレームを作成し、data という変数に格納しておく。

data = pd.DataFrame({"デバイス":["デバイス A","デバイス B","デバイス A","デバイス A","デバイス C","デバイス C","デバイス B","デバイス C","デバイス A","デバイス A",], "出血量":[30,20,5,5,100,80,10,60,10,25]})

data の内容を確認する。

data

デバイス間で出血量の平均に差があるかどうかを statsmodels.stats.multicomp.pairwise_tukeyhsd() コマンドで検定する。結果を表示するのに print() コマンドだけでは p値が示されないが、summary() コマンドを使用することで p 値も示される。

pairwise_tukeyhsd(data["出血量"], data["デバイス"]).summary() #95%信頼区間
pairwise_tukeyhsd(data["出血量"], data["デバイス"], alpha = 0.01).summary() #99%信頼区間

計算結果は、R での結果とは微妙に異なる

R による Kruskal-Wallis test と ANOVA

kruskal.test() コマンドで Kruskal-Wallis test を行う。また、oneway.test() コマンドで one-way ANOVA (一元配置分散分析)を行う。

通常は Excel 等で作成した CSV ファイルを R に読み込んで分析する。しかし、ここでは便宜的に以下の簡単なデータフレームを作成し、data という変数に格納しておく。

data = data.frame(デバイス = c("デバイス A","デバイス B","デバイス A","デバイス A","デバイス C","デバイス C","デバイス B","デバイス C","デバイス A","デバイス A"), 出血量 = c(30,20,5,5,100,80,10,60,10,25))

data の内容を確認する。

data

デバイスによって出血量に偏りがあるかどうかを kruskal.test() コマンド、oneway.test() コマンドで検定する。

kruskal.test(出血量 ~ デバイス, data = data) #Kruskal-Wallis test
oneway.test(出血量 ~ デバイス, data = data) #one-way ANOVA (Welch 拡張)
oneway.test(出血量 ~ デバイス, data = data, var = T) #通常の one-way ANOVA

aov() コマンドや、anova() コマンドでも one-way ANOVA の計算ができる。

summary(aov(出血量 ~ デバイス, data = data))
anova(lm(出血量 ~ デバイス, data = data))

Python による Kruskal-Wallis test と ANOVA

scipy.stats.kruskal() コマンドで Kruskal-Wallis test を行う。また、scipy.stats.f_oneway() コマンドで one-way ANOVA (一元配置分散分析)を行う。

Python を起動し、pandas と scipy.stats を import する。

import pandas as pd
from scipy import stats

通常は Excel 等で作成した CSV ファイルを pandas に読み込んで分析する。しかし、ここでは便宜的に以下の簡単なデータフレームを作成し、data という変数に格納しておく。

data = pd.DataFrame({"デバイス":["デバイス A","デバイス B","デバイス A","デバイス A","デバイス C","デバイス C","デバイス B","デバイス C","デバイス A","デバイス A",], "出血量":[30,20,5,5,100,80,10,60,10,25]})

data の内容を確認する。

data

query() コマンドを使い、デバイスによって data を3群にグループ分けする。

A = data.query('デバイス == "デバイス A"')
B = data.query('デバイス == "デバイス B"')
C = data.query('デバイス == "デバイス C"')

それぞれのグループの平均や中央値等の基本統計量は describe() コマンドによって得られる。

A.describe()
B.describe()
C.describe()

A, B, C の出血量を Series 型に変換する。

x = A["出血量"]
y = B["出血量"]
z = C["出血量"]

x, y, z に偏りがあるかどうかを scipy.stats.kruskal() コマンド、scipy.stats.f_oneway() コマンドで検定する。

stats.kruskal(x, y, z) #Kruskal-Wallis test
stats.f_oneway(x, y, z) #ANOVA