カイ二乗値を計算する

今まであまり考えないで検定用の関数に突っ込んでたんで実際に計算してみんとす。

例が悪くてあれなんだが、以下のような取引戦略A・B、およびその勝敗のデータがあったとする。

> x <- matrix(c(110, 119, 200, 207), 2, 2)
> rownames(x) <- paste0("Strategy", LETTERS[1:2])
> colnames(x) <- c("WIN", "LOSE")
> x
          WIN LOSE
StrategyA 110   200
StrategyB 119   207

これは

  • 取引戦略A:試した310日中、110日勝った
  • 取引戦略B:試した326日中、119日勝った

というデータだと読めばよい。
(※コメント欄の指摘が正しいので、修正したらどっちもクソ戦略になっちゃった・・・)

で、「取引戦略Bの方が勝率が高いが、それって統計的に有意と言えるんでしたっけ?」という場合にはカイ二乗検定をして見ればよい。

> chisq.test(x, correct=FALSE)

	Pearson's Chi-squared test

data:  x
X-squared = 0.0716, df = 1, p-value = 0.789

結果、p値が0.789と大きく、「勝率が等しい」とする帰無仮説を棄却することができず有意じゃないですねと。

で、ここで出てくる「X-squared = 0.0716」って量は、元のデータから

> expected <- rowSums(x)%o%colSums(x)/sum(x)
> sum((x-expected)^2/expected)
[1] 0.07163452

として計算できますね・・・というのを確認したかった。

Wikipediaに載ってる数式、雑すぎるんだよね。