傾向検定について

統計

「傾向検定」とは、標本集団で観察された平均値や割合が、だんだん大きくなる、もしくはだんだん小さくなるというトレンド(傾向)が、母集団でもそうなっているかどうかを検定するものです.
連続変数における平均値やカテゴリー変数の割合(ここでは二値変数になりますが)のほかに、生存分析でおなじみのLog-rank testも登場します.
では具体的にどんな検定が出てくるのでしょうか.そしてStataでどのように実装するかみていきましょう. アウトカムの種類に応じて整理するとわかりやすいです.

1.二値変数の割合:Cochran-Armitage trend test

結果変数が二値、説明変数が順序または数値変数の傾向検定をCochran-Armitage傾向検定と言います . p=a+bxという直線の傾きbが有意かどうかを検定します.

例えば、担任の先生の経験年数と志望校合格割合の間に傾向があるのではないか、ということを証明したい場合を想像してみましょう.
1組の先生は新人(経験年数0年)で合格割合10%
2組の先生は5年目で合格割合30%
3組の先生は20年目で合格割合60%
4組の先生は30年目で合格割合70%
のような状況を思い浮かべてください.

コマンドとしては “ptrend” を使います.

ptrend rvar nrvar xvar
/// あるいは以下のようにやることもできます

ptrendi r1 nr1 x1 \ r2 nr2 x2 \ r3 nr3 x3 [ \ r4 nr4 x4 ... ]
/// "i"はimmediate、すなわちデータセットを展開しなくてもすぐできるコマンド

上の例で考えると、

ptrend rvar nrvar xvar
ptrendi 10 90 1 \ 30 70 2 \ 60 40 3 \ 70 30 4
/// あるいは以下のようにやることもできます

input teacher_id experience rate failure
1 0 10 90
2 5 30 70
3 20 60 40
4 30 70 30
end
ptrend rate failure teacher_id

Cochran-Armitage trend testの結果はこのChi2(1) for trendの部分(Qtrend)の結果を見ればよいようです.
ただし、Stata社のQ&Aセッションでは以下のような記載がありました。

Qdeparture (=”Chi2(1) for departure” as Royston’s output nicely labels it) is the statistic for the Cochran–Armitage test. But Qtrend and Qdeparture are usually performed at the same time, so lumping them together under the name “Cochran–Armitage” is sometimes loosely done.
The null hypothesis for the Cochran–Armitage test is that the trend is linear, and the test is for “departures” from linearity; i.e., it’s simply a goodness-of-fit test for the linear model.

Chi2(1) for departure(Q departure)がCochran-Armitage testの統計量であり、この検定の帰無仮説はトレンドが線形であることを意味するので、(線形でない場合にP<0.05となるから)Goodness-of-fit testみたいなものだ、と書いています.
しかしQtrendの部分を報告すればよいということを確認しました.実際多くの論文ではTrendが有意にあるときにはP<0.05と報告していますよね.

Overallの結果は検出力が落ちますが、そもそも傾向検定は、特定の方向性をもった結果かどうかについて検討するものです.

2.連続変数の平均:Jonckheere–Terpstera trend test

これは二値変数の割合がCochran-Armitage trend testで検定できたのに対し、
ある連続的な値に対する平均値のトレンドをみる、というのが目的になります.
コマンドとしては”nptrend”を用います.helpにある例を使って説明します.

 webuse sg

nptrend exposure, by(group)

結果はP = 0.129ということで有意な関連はありません、ということになります.

(5/6 追記)ある親切な方にご指摘いただきましたが、Stataのnptrendは実はJonckheere–Terpstera trend testではなく、よく似た別物である”Cuzick test ”を行っているとのことでした.
StataではJonckheere-Terpstra test関して、ユーザー作成コマンドがあります

“jonter” という名前のコマンドです.
“.web install jonter” と入れてみてください.

 web install jonter 
webuse sg, clear

jonter exposure, by(group)

とりあえず両側検定のものを先ほどのnptrendと比較してみると、それほど値がずれていないようなので、まあ似たようなことをしているのでしょうね.

さてここで、連続値と連続値ではどうしたらよいのか?という疑問を抱く方がいると思いますが、
その場合は散布図+相関あるいは回帰直線(曲線)を作って検定するなどの方法が一般的には取られうる方法と思います.
しかし例えば連続値をある閾値に従ってグループ化→順序変数に置き換える、
といった手続きを踏めば上記の方法を使った検討は行うことができます.

またいつものautoのデータを使います.車体が重くなるほど値段が上がる、というトレンドを見ていきます.
散布図ではそんな感じに見えます.

sysuse auto, clear
recode weight (min/3000 = 1) (3000/4000 = 2) (4000/max = 3), gen(weight_cat)
nptrend price, by(weight_cat)

3.生存時間分析:Log-rank trend test

最後は簡単です.Log-rank検定で、例えば曝露因子が連続値の4分位点によってグループ化してある変数だとします.
このとき”sts test var”と入れるとoverallの検定になりますが、オプションで”trend”と入れるだけで傾向検定の結果が得られるのです.楽ちんですね.

これを使っている研究は本当にたくさんあります.たまたま見つけたJAMAの論文(JAMA 2007; 298: 299-308)がわかりやすいので、見てみてください.

4.まとめ

いかがでしたか?傾向検定についてはアウトカムの種類に応じて整理していくととてもスッキリしますよね.
二値変数の割合:Cochran-Armitage trend testはptrend,
連続変数の平均:Jonckheere–Terpstera trend testはnptrend,
生存時間分析:Log-rank trend testはsts test var, trend
ということで整理ができたでしょうか.

コメント

タイトルとURLをコピーしました