
僕が作った架空のデータで練習しましょう。結果についてはご意見があると思いますが、統計学の練習のためのサンプルですのでご了承ください。信頼区間の求め方は母平均の区間推定(母分散が未知の場合)をご覧ください。
例題)COPDの男性患者10名を対象にして、入院時と入院2週間後に6分間歩行距離(m)を計測した。両時点での歩行距離に差があるか有意水準5%で検証せよ。
データの準備と要約
Rを使って10名のサンプルを作成します
計測結果(pre: 入院時、post: 2週間後)
ID <- 1:10
pre <- c(330, 410, 410, 315, 395, 290, 250, 335, 302, 340)
post <- c(350, 420, 408, 333, 445, 312, 275, 312, 295, 395)
dat <- data.frame(ID, pre, post)
head(dat)

対応のあるデータのグラフ
#表の準備
x <- c(1.1, 1.9)
dat2 <- t(dat[,2:3])
print(dat2)

グラフ(dat2を使用します)
matplot(
x, dat2,
type ="b", lty=2,
xaxt="n",
xlim=c(1, 2),
xlab="", ylab=""
)
name <- c("入院時", "2週間後")
axis(side=1, at=c(1.1, 1.9), labels=name)

仮説
帰無仮説:入院時の歩行距離と2週間後の歩行距離に差はない\( \quad (pre=post)\)
対立仮説1:入院時と2週間後の歩行距離の差の平均は0ではない\( \quad (pre \neq post)\)
対立仮説2:2週間後の歩行距離は入院時の歩行距離より長い\( \quad (post – pre > 0)\)
対立仮説1を証明する場合には両側検定、対立仮説2を検証する場合には片側検定となります
入院治療の効果を判定する場合には、本来であれば対立仮説2になるのですが、対立仮説1で検証している報告が多いようです
t検定
仮説1の両側検定
sa <- dat$post - dat$pre
t.test(sa)

p>0.05で有意差なし・・・という結果になりました
仮説2の片側検定
t.test(sa, alternative="greater")

p<0.05で有意になりました
結果のみよければ、ここまでです

ここからはもう少し深く勉強してみましょう
統計量
2週間後 – 入院時: \(post-pre\)
(2週間後 – 入院時)の平均値:\(\bar{x}\)
(2週間後 – 入院時)の母平均値:\(\mu\)
(2週間後 – 入院時)の不偏分散: \(s^2\)
#標本平均
mean(sa)
#標本不偏分散
var(sa)

母分散が未知の平均値の差の検定なので、t統計量を使用します (\(\sim t(10-1)\))
また帰無仮説では \(pre=post\) を仮定しているので \(\mu = 0\) とします
\(t=
\dfrac{\bar{x}-\mu}{\sqrt{\dfrac{s^2}{n}}}=\dfrac{16.8-0}{\sqrt{\dfrac{579.733}{10}}}\)
標本不偏分散の求め方
$V[A – B] = V[A] + V[B] – 2cov(A, B)$ より
var(dat$pre) + var(dat$post) - 2*cov(dat$pre, dat$post)
t値の求め方
t <- mean(sa)/sqrt(var(sa)/length(sa))
print(t)


Rの検定結果に記載してあるt統計量と同じ値になりました。この統計量(t値=2.21)を利用して検定してみましょう
両側検定
対立仮説1(\(\mu \neq 0 \))を有意水準5%で検定してみましょう
自由度9のt分布

#グラフ
x <- seq(-5, 5, length=100)
plot(
x, dt(x, 9), type = "l",
xlim=c(-5, 5), ylim=c(0, 0.4),
xlab="", ylab="", xaxt="n"
)
t <- mean(sa)/sqrt(var(sa)/length(sa))
lines(c(t, t), c(-1.5, dt(t, 9)))
axis(side=1, at=t)
有意水準5%なので右側の面積 $<0.025$ であれば両側検定で帰無仮説が棄却できます
右側の面積が $<0.025$ の部分を青色で塗りつぶしてみましょう

#グラフ
x <- seq(-5, 5, length=100)
plot(
x, dt(x, 9), type = "l",
xlim=c(-5, 5), ylim=c(0, 0.4),
xlab="", ylab="", xaxt="n"
)
q = qt(0.025, 9, lower.tail=F)
p <- seq(q, 5, length=100)
y <- dt(p, 9)
polygon(c(p,rev(p)), c(rep(0,length(p)), rev(y)), col="#72C6EF")
t <- mean(sa)/sqrt(var(sa)/length(sa))
lines(c(t, t), c(-1.5, dt(t, 9)))
axis(side=1, at=t)
2.21は棄却域には入っていないようなので、p値は0.05より少し大きい値となっていることが予想できます
Rの関数で確認してみましょう
#再掲
t.test(sa)

t値は2.21でp値は0.055です
p>0.05で有意差なし・・・という結果になりました
p値
上記の検定は両側検定でした
したがって求めたp値は両側の裾の面積になります

x <- seq(-5, 5, length=100)
plot(
x, dt(x, 9), type = "l",
xlim=c(-5, 5), ylim=c(0, 0.4),
xlab="", ylab="", xaxt="n"
)
t <- mean(sa)/sqrt(var(sa)/length(sa))
p <- seq(t, 5, length=100)
y <- dt(p, 9)
polygon(c(p,rev(p)), c(rep(0,length(p)), rev(y)), col="yellow")
p2 <- seq(-t, -5, length=100)
y <- dt(p2, 9)
polygon(c(p2,rev(p2)), c(rep(0,length(p2)), rev(y)), col="yellow")
axis(side=1, at=c(-t, t)
両側検定の場合は、正確には以下のように描かなければなりません
両側の黄色い部分の合計面積が0.05となります

#グラフ
x <- seq(-5, 5, length=100)
plot(
x, dt(x, 9), type = "l",
xlim=c(-5, 5), ylim=c(0, 0.4),
xlab="", ylab="", xaxt="n"
)
q = qt(0.025, 9, lower.tail=F)
p <- seq(q, 5, length=100)
y <- dt(p, 9)
polygon(c(p,rev(p)), c(rep(0,length(p)), rev(y)), col="#72C6EF")
q = qt(0.025, 9, lower.tail=F)
p2 <- seq(-q, -5, length=100)
y <- dt(p2, 9)
polygon(c(p2,rev(p2)), c(rep(0,length(p2)), rev(y)), col="#72C6EF")
lines(c(t, t), c(-1.5, dt(t, 9)))
lines(c(-t, -t), c(-1.5, dt(-t, 9)))
axis(side=1, at=c(-t, t))
上側検定
post > pre を有意水準5%で証明してみます
対立仮説2:(post – pre)の平均 > 0
t値は両側検定で求めた値と同じです
#再掲
t <- mean(sa)/sqrt(var(sa)/length(sa))
print(t)

これは一側の検定ですの、下のグラフの緑色部分のみがp値として算出されます
つまり両側検定のときの半分のp値になります

#グラフ
x <- seq(-5, 5, length=100)
plot(
x, dt(x, 9), type = "l",
xlim=c(-5, 5), ylim=c(0, 0.4),
xlab="", ylab="", xaxt="n"
)
t <- mean(sa)/sqrt(var(sa)/length(sa))
p <- seq(t, 5, length=100)
y <- dt(p, 9)
polygon(c(p,rev(p)), c(rep(0,length(p)), rev(y)), col="yellow")
lines(c(t, t), c(-1.5, dt(t, 9)))
axis(side=1, at=t)

有意差検定を行う場合は、このように統計量とp値との関係性をイメージしながら検証されることをお勧めします。その場合、Rは最適なツールになりますよ!
同じ有意水準5%でも片側検定だと有意な結果になりました。統計のマジックという人もいるかもしれませんが、別にトリックではないので、解析結果を見誤ったりしないように注意が必要ですね。。
ダメ出し 間違い、分かりにくい部分などのご意見をお待ちします