PISA「盗難事件」問題ほか・回答編

登場人物はすべて架空の人です。

A君の答え

相関係数の検定と χ2 検定とは,右図が示すように,別のものを見ている。したがって,相関係数の検定

> cor.test(1:6, x)

で求めた p = 0.016 で何ら問題ない。

なお,右図は次のようにして描いた。

ni = 1000
p = numeric(ni)
q = numeric(ni)
for (i in 1:ni) {
  s = numeric(6)
  for (j in 1:4826) {
    k = sample(1:6, 1)
    s[k] = s[k] + 1
  }
  p[i] = chisq.test(s)$p.value
  q[i] = cor.test(1:6, s)$p.value
}

> mean(p <= 0.05)
[1] 0.047
> mean(q <= 0.05)
[1] 0.047

> par(las=1)
> par(mgp=c(2,0.8,0))
> plot(p,q,asp=1,xlab="",ylab="")

B君の答え

度数データ(一般に整数データ)の(Pearsonの)相関係数には注意が必要。例えば6個のイベントを3個のビンに投げ込む場合,(1,2,3) とか (0,2,4) あるいはその逆順は頻繁に生じる。これらと 1:3 の相関係数を求めると,p = 0 になり,有意になりすぎる:

> cor.test(1:3,1:3)

	Pearson's product-moment correlation

data:  1:3 and 1:3 
t = Inf, df = 1, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0 
sample estimates:
cor 
  1 

順位相関係数ならこういうことは起きない。Pearsonの相関係数を使いたい場合は,並べ替え検定でより正確な p 値を求めることができる:

x = c(762,792,795,794,849,834)

としておいて

y = replicate(10000, cor(1:6, x[sample(6)]))  # 数はできるだけ多く

またはより正確には

library(gtools)
n = factorial(6)
y = numeric(n)
p = permutations(6,6)
for (i in 1:n) y[i] = cor(1:6, x[p[i,]])

そして最後に

mean(abs(y) >= abs(cor(1:6,x)))

とすると,p = 0.022 となり,A君の主張より大きくなる。

C君の答え

相関係数の検定では,ほとんど増加のない場合でも,一定の割合で増加すれば,非常に有意になってしまう。通常の回帰分析ではなく,Poisson分布を帰無仮説として年ごとの増加率を検定しなければならない。

> x = c(762,792,795,794,849,834)
> lm(x ~ seq(6))

とすれば,増加率が 15.14 件/年 であることがわかる。Poisson分布の乱数で同じことをしてみて,増加率の絶対値が偶然に 15.14 以上になる確率を求めて検定するのが正しい。

x = c(762,792,795,794,849,834)
m = mean(x)
ni = 1000000  # もっと小さくてよい
r = numeric(ni)
for (i in 1:ni) {
  r[i] = lm(rpois(6,m) ~ seq(6))$coefficients[2]
}
r1 = lm(x ~ seq(6))$coefficients[2]
mean(abs(r) >= abs(r1))

結果は p = 0.025 ほどになり,B君の結果よりさらに大きくなる。

D君の答え

それならPoisson回帰をすればいい。

線形の場合:

r = glm(x ~ seq(6), family=poisson(link="identity"))
summary(r)

p = 0.0253

リンクが対数の場合:

r = glm(x ~ seq(6), family=poisson(link="log"))
summary(r)

p = 0.0255


奥村晴彦

Last modified: 2009-03-02 10:07:55