[R]ノンパラメトリック検定で東京の気温に差があるか検定してみた

東京の夏が暑くなっているかシリーズの続き。
一つ前のエントリで8月の東京の最高気温は正規分布していないことが分かりましたので、t検定などのパラメトリック検定が使えない※ため、ノンパラメトリック検定を実施する必要があります。
※正規分布以外の分布に従っていれば、その分布に応じたパラメトリック検定が可能…ですよね?

そんなわけで、ノンパラメトリック検定の一つである「ウィルコクソンの順位和検定」を実施して、1985~1999年と2000~2014年の東京における8月の最高気温(の中央値)に差があることを確認してみます。
二期間の最高気温分布はこんな形をしています。
150813-222606
150813-222610
(図の右側は正規確率紙プロット、直線になっていない→正規分布では無い、詳細は一つ前参照)

こちらのサイトに手法については詳しく書かれていますので、細かい事は割愛しますが、二つの標本を一つに合わせて順位を付けた後に、サンプル数の少ない方の標本に付けられた順位を合計した値をもって、二つの標本の代表値に違いがあるか否かを検証するものです。ちなみに、帰無仮説は「二つの標本の(2群)間に差がないこと」で、求められたp値が有意水準を下回っていれば帰無仮説が棄却されて「二つの標本の間に差があること」となります。
(いきなりRとかExcelを使わずに、簡単&極端な例で手計算をしてみると、この検定の仕組みがよく分かりました)

さて、実際にRのスクリプトを書いてみます。

#ディレクトリ設定(皆様の環境に合わせてください)…ダウンロードしてきたcsvの保存先。
setwd("C:/ほげほげ")

#初期設定
city <- "東京" #観測所名

#気温データファイルを開く
Temp <- read.csv("東京.csv")
T1 <- Temp[1985 <= Temp$y & Temp$y <= 1999,]
T2 <- Temp[2000 <= Temp$y & Temp$y <= 2014,]

#使用するパッケージ読み取り
library(exactRankTests)

#検定実行
wilcox.exact(T1$max,T2$max,paired=FALSE)

早速、検定の結果を見てみましょう。

        Asymptotic Wilcoxon rank sum test

data:  T1$max and T2$max
W = 91201, p-value = 3.638e-05
alternative hypothesis: true mu is not equal to 0

P値: 3.638e-05 < 0.01
なので、帰無仮説が棄却され、東京の8月の最高気温は1985~1999年と2000~2014年とで差がある事が確認できました。


余談ですが、先ほどのRスクリプトの10行目を
T2 <- Temp[1986 <= Temp$y & Temp$y <= 2000,] と改変して、1年ずらした、1986~1999年と1985年~2000年年の最高気温を比較してみました。 すると、

W = 106250, p-value = 0.649

となり、有意差が無いということが結果になりました。


参考
ウィルコクソンの順位和検定(バイオインフォマティクス入門)
統計のTips(IKEDA Yoichiro’ s Room)