【統計】ヨンキー検定(傾向性検定)

傾向性検定(ヨンキー検定)について。

【目次】

 

 Jonckheere-Terpstra trend test(ヨンクヒール-タプストラ検定、またはヨンキー検定)は目的変数が連続値の時に使用できる傾向性検定。
目的変数が割合の場合は Cochran-Armitage trend test(コクラン-アミテージ検定)を使用。 

cochineal19.hatenablog.com

 

帰無仮説、対立仮設


ヨンキー検定は中央値を用いるノンパラメトリックな手法です。
対立仮説が「<」ではなく「<=」であるため、A=B<=CでもA<=B=Cでも有意になる可能性があります。

 

計算式等


\quad JT=\sum U_{ij}=\sum _{i=1}^{n_{i}}\sum _{j=1}^{n_{j}}\left( WIN_{ij}+\dfrac{1}{2}TIE_{ij}\right)\verb|  ※i<j の組み合わせのみ|

\quad E[ JT] =\dfrac{n^{2}-\sum n_{i}^{2}}{4}

\quad Var[ JT] =\dfrac{n^{2}\left( 2n+3\right) -\sum \{ n_{i}^{2}\left( 2n_{i}+3\right) \} }{72}

\quad z=\dfrac{JT-E[ JT] }{\sqrt{Var[ JT] }}

 

JT統計量は、水準間の総当たり戦(ただし、i < jの組み合わせのみ)。勝ち数と引き分け数(0.5倍)を総和したものが統計量となる。

ただし、タイ(同一順位)を考慮して、分散を次のとおり算出する方法がある。
SAS社のアルゴリズムはこちらのよう(ホームページ見る限り)。

\quad A=n\left( n-1\right) \left( 2n+5\right)-\sum \{\left( n_{i}-1\right) \left( 2n_{i}+5\right)\} - \sum \{ d_{i}\left( d_{i}-1\right) \left( 2d_{i}+5\right)\}

\quad B =\sum \{ \left( n_{i}-1\right) \left( n_{i}-2\right) \} \cdot \sum \{ d_{i}\left( d_{i}-1\right) \left( d_{i}-2\right) \}

\quad C=\sum \left( n_{i}-1\right) \cdot \sum \{d_{i}\left( d_{i}-1\right) \}

\quad Var[ JT ] =\dfrac{A}{72}+\dfrac{B}{36n\left( n-1\right) \left( n-2\right) }+\dfrac{C}{8n\left( n-1\right) }


A~Cにある  \sum d_{i} ....データの頻度の総和。
例えば {10,10,11,12,16} であれば、 { d_{10}=2,  d_{11}=1,  d_{12}=1,  d_{16}=1} となる。この例では10が2つあるので、 d_{10}=2 になるのが特徴。

 

計算例


簡単なデータを使って手順を確認。
今回は簡単のため、グループ1~3に4つずつ、計12個のデータ。

  g1{11, 13, 10, 11}
  g2{15, 12, 10, 11}
  g3{20, 20, 16, 19}

先にExcelにまとめたものを掲載。 

f:id:cochineal19:20201205161816p:plain

JT統計量:

グループの順序が i < j の組み合わせのみで大小比較するため、今回の3グループ(g1、g2、g3)では、g1 vs. g2(U_{12})、g1 vs. g3(U_{13})、g2 vs. g3(U_{23}) の3つが比較対象。
例えば U_{12} のg1{11} vs. g2{15,12,10,11} では、{勝ち、勝ち、負け、引き分け}になるため、1+1+0+1×0.5=2.5となる(Excel F2:H6)。
これら個々の勝敗を足し合わせたものが JT統計量(Excel Q9)。
2.5 + 1 + 3.5 + 2.5 + 4 + 4+ 4 + 4 + 4 + 4+ 4 + 4 = 41.5

 

タイの補正:

データ全体で、10に2つ、11に3つ、20に2つの同値がある。
タイを補正する場合、分散の式中の  \sum d_{i} .... が役割を担う(Excel J9:N16、Q12:Q14)。
なお、図のとおり、タイがない値は d(d-1) = 1×(1-1) = 0 でゼロになるため、タイのみ考慮されることが分かる。

期待値・分散、z値・p値:

公式のとおり計算を行うと次の結果が得られる(Excel Q11:R18)。
\quad E[JT]=24
\quad VAR[JT]=45.6000,\quad z=2.5915,\quad p=0.004778\quad \left(タイの補正ありの式\right)
\quad VAR[JT]=46.6667,\quad z=2.5617,\quad p=0.005207\quad \left(タイ補正なしの式\right)

今回の架空データでは、TRT01P=1→2→3の順で観測値(AVAL)が増加する傾向があった(p for trend < 0.01)と結論付けられそう(タイ補正の有無問わず)。

 

Excelの関数の中身はこちら。

f:id:cochineal19:20201205160318p:plain

f:id:cochineal19:20201205161958p:plain

Rでの実行:
PMCMRplusとclinfunの2パッケージを見つけたのでこれらを試す。

> ADS1 <- data.frame(AVAL=c(11,13,10,11,15,12,10,11,20,20,16,19)
+                    , TRT01PN=c(1,1,1,1,2,2,2,2,3,3,3,3))
> ADS1$TRT01PF <- factor(ADS1$TRT01PN, levels = c("1","2","3"))
> 
> #-- PMCMRplu タイ補正あり
> library(PMCMRplus)
> jonckheereTest(ADS1$AVAL, ADS1$TRT01PF, alternative="greater")

	Jonckheere-Terpstra test

data:  ADS1$AVAL and ADS1$TRT01PF
z = 2.5915, p-value = 0.004778
alternative hypothesis: greater
sample estimates:
  JT 
41.5 

 警告メッセージ: 
 jonckheereTest.default(ADS1$AVAL, ADS1$TRT01PF, alternative = "greater") で: 
  Ties are present. Jonckheere z was corrected for ties.
  
> #-- clinfun タイ補正なし
> library(clinfun)
> jonckheere.test(ADS1$AVAL, ADS1$TRT01PN, alternative="increasing")

	Jonckheere-Terpstra test

data:  
JT = 41.5, p-value = 0.005207
alternative hypothesis: increasing

 警告メッセージ: 
 jonckheere.test(ADS1$AVAL, ADS1$TRT01PN, alternative = "increasing") で: 
  Sample size > 100 or data with ties 
 p-value based on normal approximation. Specify nperm for permutation p-value

両パッケージともJT統計量=41.5で同値だが、
PMCMRplusはタイ補正ありの p=0.004778、
clinfunはタイ補正なしの p=0.005207 と一致(タイがない場合は、p値は同じ)。


SASでの実行:
タイ補正ありの結果が得られる。増減を見たいので片側検定の結果を見る。

data ads;
  do AVAL=11,13,10,11; TRT01PN=1; output; end;
  do AVAL=15,12,10,11; TRT01PN=2; output; end;
  do AVAL=20,20,16,19; TRT01PN=3; output; end;
run;
proc sort data=ads: by TRT01PN AVAL; run;
proc freq data=ads;
  tables TRT01PN * AVAL / jt;
  exact jt;
  output out=OutputDS jt;
run;

f:id:cochineal19:20201219164014p:plain

 

プログラムコード


■ Rのコード

library(PMCMRplus) #-- タイ補正あり
jonckheereTest(ADS1$AVAL, ADS1$TRT01PF, alternative=c("greater","less"))

library(clinfun) #-- タイ補正なし
jonckheere.test(ADS1$AVAL, ADS1$TRT01PN, alternative=c("decreasing","increasing"))

 

SASのコード

proc freq data=[InputDS];
tables GROUP * AVAL / jt; /* 群*測定値の順序にする。*/
exact jt; /* 正確検定する場合設定。*/
output out=[OutputDS] jt; /* _JT_,Z_JTを取得。XPR_JTは正確確率(右側)*/
run;

 

Pythonのコード 

整備中

 

ヨンキー検定とケンドールの順位相関


ヨンキー検定はケンドールの順位相関と同じ考え方のよう。
実行してみると、z値、p値ともにタイ補正ありの式と同値だった。 

■ ケンドールの順位相関

> cor.test(ADS1$TRT01PN, ADS1$AVAL, method="kendall", alternative="greater")

	Kendall's rank correlation tau

data:  ADS1$TRT01PN and ADS1$AVAL
z = 2.5915, p-value = 0.004778
alternative hypothesis: true tau is greater than 0
sample estimates:
      tau 
0.6468186 

 警告メッセージ: 
 cor.test.default(ADS1$TRT01PN, ADS1$AVAL, method = "kendall",  で: 
   タイのため正確な p 値を計算することができません 

 

参考


Tao Xu, Jonckheere-Terpstra test

Programming Documentetion, SAS

 


サイトマップ

cochineal19.hatenablog.com

本ブログは個人メモです。 本ブログの内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。