t検定の一般化としてのホテリングのt-squared

  • 1次元正規分布を「原点からの距離」で考え直すと、-xとxとが同じ距離にあることになり、0 <= xに関する分布を考えることとなり、カイ分布になる。距離の二乗で考えることにすればカイ二乗分布
  • d次元正規分布を「原点からの距離」で考え直すと、原点から等距離にある点を集約して考えることになり、非負の距離値に関して考えれば、自由度dのカイ分布になるし、距離の二乗で考えれば自由度dのカイ二乗分布になる
  • t分布は、1次元に正規分布で分布している2群の平均値の差の検定などに使われる分布。これは1次元の世界のもの
  • 多次元空間に正規分布があるとする。2群あって、平均が同じか違うかに興味があるときには、多次元正規分布の平均値(平均座標)の異同を検定したい
  • そんなときに「多次元平均座標の差」をスカラー値として測定して、検定に持ち込みたい。t検定を多次元版に一般化したい、と言い換えてもよい
  • それがホテリングのt-squared(二乗しているので非負値を取る)
  • 一般化になっていることを納得するには、一般次元で動いているホテリングのt-squaredの1次元版とt検定とが対応していることを見ればよい
  • やってみる
library(MCMCpack) # 多次元正規分布を作るのに逆Wishart分布にて行列を作るため
library(Hotelling) # ホテリング検定のため
df <- 3 # 次元
N1 <- 1000 # 第1群サンプル数
N2 <- 1200 # 第2群サンプル数

n.iter <- 1000 # 帰無仮説の下でデータを発生させる回数
H <- p <- rep(0,n.iter)
for(i in 1:n.iter){
	S <- riwish(df,diag(rep(1,df)))
	X1 <- rmvnorm(N1,mean=rep(0,df),sigma=S)
	X2 <- rmvnorm(N2,mean=rep(0,df),sigma=S)
	tmp <- hotelling.test(X1,X2)
	H[i] <- tmp[[1]][1]
	p[i] <- tmp[[2]]
}
# 統計量とp値を見てみる。p値は一様分布になっている
par(mfcol=c(1,2))
hist(unlist(H))
hist(p)
par(mfcol=c(1,1))

# 次元を1にして、t検定の結果と比べる
df <- 1
N1 <- 1000
N2 <- 1200

n.iter <- 1000
H <- p <- t <- tp <- rep(0,n.iter)
for(i in 1:n.iter){
	S <- riwish(df,diag(rep(1,df)))
	X1 <- rmvnorm(N1,mean=rep(0,df),sigma=S)
	X2 <- rmvnorm(N2,mean=rep(0,df),sigma=S)
	tmp <- hotelling.test(X1,X2)
	H[i] <- tmp[[1]][1]
	p[i] <- tmp[[2]]
	tmp2 <- t.test(X1,X2)
	t[i] <- tmp2[[1]]
	tp[i] <- tmp2[[3]]
}
par(mfcol=c(1,2))
# t値とH's t-sqの平方根は絶対値が同じ
plot(sqrt(unlist(H)),t)
plot(p,tp)
par(mfcol=c(1,1))