MENU

R でトレンド検定に必要なサンプルサイズを計算する方法

トレンド検定のサンプルサイズ計算。

>>もう統計で悩むのは終わりにしませんか? 

↑期間・数量限定で無料プレゼント中!

目次

トレンド検定とは

トレンドとは、順序カテゴリの小さいほうから大きいほうに移るにつれて、カテゴリの平均値や割合が大きくなるとか小さくなるとか、傾向や相関があることを指す。

トレンドがなく同じというのが帰無仮説で、母集団で、だんだんに大きくなる、もしくは小さくなるトレンドがあるのかを、検定する。

トレンド検定 平均値の場合

母数とスコアの相関係数を考える。

ポイントは、合計が0になるようにスコアを与えること。

c: 線形対比(ベクトル)←これがポイント。

K=3(3グループ)の場合はc(-1,0,1)

K=4の場合はc(-3,-1,1,3):等間隔(間隔は2)

mu: 母平均(ベクトル)

sigma.sq: ANOVAから計算される誤差分散(下記分散分析表の太字下線部分)

DfSum SqMean SqF valuePr(>F)
tension220341017.17.2060.00175**
Residuals517199141.1

R スクリプトは以下の通り。

samplesize.mean.trend.test <- function(mu, sigma.sq, score, sig.level=.05, power=.8){
METHOD <- "Sample size determination for trend test of the means"
NOTE <- "n is each number in groups"
Za <- qnorm(sig.level/2, lower.tail=FALSE)
Zb <- qnorm(power)
n <- ((Za+Zb)^2 * sigma.sq * sum(score^2))/(sum(score*mu)^2)
structure(list(n=n, mu=mu, sigma.sq=sigma.sq, score=score, sig.level=sig.level, power=power, method=METHOD, note=NOTE), class = "power.htest")
}

平均値のトレンド検定サンプルサイズ計算 例1

参考書籍の例題は、以下のように計算される。

三群のトレンド検定の例題

例題は分散分析表でなくSE(標準誤差)の値がわかるタイプ。

症状スコアの変化量は、-2, -3.5, -3.5と想定されるとする。

相関を見る線形対比は-2, 1, 1とする。

合計でゼロになるようにすることと、
症状スコアの変化量を表している数字にすること。

三群のうち、-2の群だけ違うわけなので、
その場合は-2, 1, 1というスコアが妥当。

(変化量と割り当てるスコアがともに-2なのはたまたま。念のため)

誤差分散は最大のSE=0.36の二乗に三群の症例数の真ん中あたり70例をかける。

SEはこんなふうに計算される。

$$ SE = \sqrt{\frac{分散}{n}} $$

よって二乗して症例数をかけると分散に戻る。

$$ \left( \sqrt{\frac{分散}{n}} \right)^2 \times n = \frac{分散}{n} \times n = 分散 $$

結果として一群48例必要と計算される。

> samplesize.mean.trend.test(mu=c(-2,-3.5,-3.5), sigma.sq=70*0.36^2, score=c(-2,1,1))
Sample size determination for trend test of the means
n = 47.47002
mu = -2.0, -3.5, -3.5
sigma.sq = 9.072
score = -2, 1, 1
sig.level = 0.05
power = 0.8
NOTE: n is each number in groups

平均値のトレンド検定サンプルサイズ計算 例2

もう一つの例として、warpbreaksデータセットで計算してみる。

warpbreaksのデータでトレンド検定してみた結果は以下を参照(リンク先記事の最下段)。

各群の平均値は、以下のように、36.4, 26.4, 21.7とする。

> with(data=warpbreaks, tapply(breaks, tension, mean))
L        M        H
36.38889 26.38889 21.66667

また、誤差分散は分散分析表から141.1とする。

> aov.res <- aov(breaks ~ tension, data=warpbreaks)
> summary(aov.res)
            Df Sum Sq Mean Sq F value  Pr(>F)
tension      2   2034  1017.1   7.206 0.00175 **
Residuals   51   7199   141.1
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1

上記の条件で計算すると、各群11例必要と計算される。

実際のデータは各群18例なので、
トレンド検定のためには少し多めだが悪くはない。

> samplesize.mean.trend.test(mu=c(36.4, 26.4, 21.7), sigma.sq=141.1, score=c(1,0,-1))
Sample size determination for trend test of the means
n = 10.25015
mu = 36.4, 26.4, 21.7
sigma.sq = 141.1
score = 1, 0, -1
sig.level = 0.05
power = 0.8
NOTE: n is each number in groups

トレンド検定のサンプルサイズ計算 平均値の場合をエクセルで

よければ、下記のリンク先からどうぞ。

5グループまで対応。

平均値のトレンド検定 サンプルサイズ計算【エクセルでサンプルサイズ】 | TKER SHOP

使い方解説動画。

こちらもよければどうぞ。

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

トレンド検定 割合の場合

R スクリプトは以下の通り。

割合のベクトルはprop、線形対比ベクトルはscore、でそれぞれインプットする。

samplesize.prop.trend.test <- function(prop, score, sig.level=.05, power=.8){
METHOD <- "Sample size determination for trend test of the proportions"
NOTE <- "n is each number in groups"
p <- mean(prop)
R <- sqrt(p*(1-p)*sum(score^2))
S <- sqrt(sum(score^2*prop*(1-prop)))
Za <- qnorm(sig.level/2, lower.tail=FALSE)
Zb <- qnorm(power)
n <- ((Za*R+Zb*S)/sum(score*prop))^2
structure(list(n=n, proportion=prop, score=score, sig.level=sig.level, power=power, method=METHOD, note=NOTE), class = "power.htest")
}

割合のトレンド検定サンプルサイズ計算 例1

例えば有効率が55%、75%、75%の三群と予想できるとする。

線形対比スコアは平均値の時と同じ-2, 1, 1とする。

55%の群だけ有効性が低いと見えるからだ。

このときにトレンド検定で有意になるには各群65例必要と計算される。

> samplesize.prop.trend.test(prop=c(0.55,0.75,0.75), score=c(-2,1,1))
Sample size determination for trend test of the proportions
n = 64.66423
proportion = 0.55, 0.75, 0.75
score = -2, 1, 1
sig.level = 0.05
power = 0.8
NOTE: n is each number in groups

割合のトレンド検定サンプルサイズ計算 例2

もう一つ、carDataパッケージのTitanicSurvivalというデータで検証してみよう。

carDataパッケージは最初からインストールされているので、呼び出すだけで使えるようになる。

タイタニック号が沈没したとき生存した乗客の性別、年齢、客室クラスのデータ。

客室クラスで生存割合にトレンドがあるかどうかを見てみる。

割合のトレンド検定はCochran-Armitage検定で、prop.trend.test()でできる。

以下の過去記事も参照。

library(carData)
with(TitanicSurvival, table(passengerClass, survived))
tab <- with(TitanicSurvival, table(passengerClass, survived))
prop.table(tab,1)
prop.table(tab,1)[,2]*100
barplot(prop.table(tab,1)[,2]*100, xlab="Passenger Class", ylab="Survived (%)")
prop.trend.test(tab[,2], rowSums(tab), score=c(1,0,-1))

生存割合は、一等が62%、二等が43%、三等が26%だった。

グラフにすると見事にトレンドがみられる。

タイタニック号事故 客室クラスと生存割合

結果は統計学的有意でトレンドあり。

> library(carData)
>
> with(TitanicSurvival, table(passengerClass, survived))
survived
passengerClass  no yes
1st 123 200
2nd 158 119
3rd 528 181
>
> tab <- with(TitanicSurvival, table(passengerClass, survived))
>
> prop.table(tab,1)
survived
passengerClass        no       yes
1st 0.3808050 0.6191950
2nd 0.5703971 0.4296029
3rd 0.7447109 0.2552891
>
> prop.table(tab,1)[,2]*100
1st      2nd      3rd
61.91950 42.96029 25.52891
>
> barplot(prop.table(tab,1)[,2]*100, xlab="Passenger Class", ylab="Survived (%)")
>
> prop.trend.test(tab[,2], rowSums(tab), score=c(1,0,-1))
Chi-squared Test for Trend in Proportions
data:  tab[, 2] out of rowSums(tab) ,
using scores: 1 0 -1
X-squared = 127.81, df = 1, p-value < 2.2e-16

もし仮にサンプルサイズ計算をすると、一群29例と計算される。

タイタニックは試験ではなく悲劇の事故なので、サンプルサイズ計算の対象ではないが、もしもの話なので、あしからず。

> samplesize.prop.trend.test(prop=c(0.62,0.43,0.26), score=c(1,0,-1))
Sample size determination for trend test of the proportions
n = 28.603
proportion = 0.62, 0.43, 0.26
score = 1, 0, -1
sig.level = 0.05
power = 0.8
NOTE: n is each number in groups

トレンド検定のサンプルサイズ計算 割合の場合をエクセルで

よければ、下記のリンク先からどうぞ。

5グループまで対応。

割合のトレンド検定 サンプルサイズ計算【エクセルでサンプルサイズ】 | TKER SHOP

使い方解説動画。

こちらもよければどうぞ。

まとめ

トレンド検定のサンプルサイズ計算を、平均値の場合と割合の場合に分けて紹介した。

三群以上で、群間比較は不要で、トレンドだけ見られればいいという状況は少ないと思うが、もし必要な場合はこの記事のスクリプトを使えば計算できる。

参考書籍

出典:丹後俊郎著 無作為化比較試験 朝倉書店
3.7 傾向性検定-量反応関係の検出

医学統計学シリーズ 5
新版 無作為化比較試験 ―デザインと統計解析― (医学統計学シリーズ5)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメントする

目次