これは、R プログラミングの質問であり、統計の質問でもあります。私の実験から、R パッケージの lawstat の runs.test 関数は、小さなサンプルに対して非常に奇妙な結果をもたらすようです。誰でも確認、反論、および/または説明できますか? 私の推論は以下の通りです。
私のテスト データは、15 年ごとに 1 つの技術クラスで会社に発行された特許の数です。
testpats <- c(2,1,2,0,1,4,1,1,2,4,2,6,1,3,3)
ランニング
runs.test(testpats, plot.it=T, alternative="positive.correlated")
まず第一に、実行の次の画像を生成します。(画像を投稿させてもらえないので、ここに私のレクリエーションがあります。)
B B B B A B B B A A A B A A
ドキュメントによると、「サンプルの中央値よりも小さい観測値は文字 "A" で表され、サンプルの中央値以上の観測値は文字 "B" で表されます。」
testpats のサンプル中央値は 2 です。したがって、ドキュメントが正しければ、画像は次のようになります。
= - = - - + - - = + = + - + +
B A B A A B A A B B B B A B B
明らかにこれは非常に異なるため、runs.test が「サンプル中央値」に何を使用しているかはわかりません。
第二に、関数出力によって与えられる検定統計量
Runs Test - Positive Correlated
data: testpats
Standardized Runs Statistic = -0.4877, p-value = 0.3129
http://www.itl.nist.gov/div898/handbook/eda/section3/eda35d.htmで説明されている方法を使用して手動で計算するものとは大きく異なります
mymid <- median(testpats)
runsdummy <- ifelse(testpats >= mymid, 1, -1)
n1 <- length(which(runsdummy>0)) #number of values above or equal to the median
n2 <- length(which(runsdummy<0)) #number of values below the median
sr2 <- (2*n1*n2*(2*n1*n2 - n1 - n2))/((n1+n2)^2 * (n1+n2-1)) #standard deviation of the number of runs
Rbar <- (2*n1*n2)/(n1+n2) + 1 #expected number of runs
R <- 9 #observed number of runs - how do I automate?
Z <- (R-Rbar)/sr2 #runs test statistics
Z
与える
[1] 0.2508961
この手動で計算されたテスト統計は、runs.test() によって提供される -0.4877 とは似ていないことに注意してください。
または、 Swed and Eisenhartで説明されているテストの小さなサンプル バージョンを使用することもできます。小標本法では、上下の観測数と実行数のみを使用します。
n1 = 5 とすると、n2 = 6; R = 9
片側 p 値は 0.976 である必要があります。
繰り返しますが、これは runs.test() によって生成された数に近くさえありません
それで、何が得られますか?runs.test() の使い方を完全に誤解していますか? データを上/下インジケーター (例: 1/-1) に変換した後に関数を使用しようとしましたが、それでも奇妙な結果が得られます。