这既是 R 编程问题,也是统计问题。从我的实验来看,R 包 lawstat 中的 runs.test 函数似乎对小样本给出了非常奇怪的结果。任何人都可以确认、反驳和/或解释吗?我的推理如下。
我的测试数据是在 15 年中每年授予一家公司在一个技术类别中的专利数量。
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 和 Eisenhart中解释的测试的小样本版本。小样本方法只是使用上下观察的数量和运行次数。
给定 n1 = 5; n2 = 6; R = 9
单边 pvalue 应该是 0.976。
同样,这甚至不接近 runs.test() 产生的数字
那么,什么给了?我是否完全误解了如何使用 runs.test()?在将数据转换为上/下指标(例如 1/-1)后,我尝试使用该函数,但仍然得到奇怪的结果。