R - 帮助进行基本的单向置换测试

时间:2013-09-11 05:53:41

标签: r permutation

我在编码单向置换测试时遇到困难。我有跑步比赛的数据,我正在看两个专栏,看看来自国外或美国的跑步者是否更快。左栏是两个因素,A或D--国外或国内(国外参赛者明显快得多)。右栏是他们的时间,以分钟为单位。由于国外样本量很小,我想做一个排列测试来回答这个问题:如果时间是随机分配的,那么国外参赛者被分配到快速时间的概率是多少?

我很感激任何指导。我唯一的代码是将列转换为因子。我也试图进行排列测试,但我不知道它的发展方向。

abroaddomestic$City.f <- factor(abroaddomestic$City, labels = c("Abroad", "Domestic"))
msamp <- mean(abroad$TimeInMin) 
mpop <- mean(abroaddomestic$TimeInMin) 
msim <- replicate(10000, mean(sample(abroaddomestic$TimeInMin, 250))) 
sum(abs(msim-mpop) >= abs(msamp-mpop))/10000 

2 个答案:

答案 0 :(得分:1)

与Carl Witthoft的答案类似,您可以将模拟视为来自二项分布。即,模拟每个跑步者的国内或国外类型是否随机抽奖。

从那里,您可以将前十名(或任何阈值)中的跑步者数量视为您的统计数据,并根据模拟分布对其进行测试,其中国内/国外类型随机分配给所有参赛者。例如,假设1000名参赛者,其中100名来自国外:

# calculate your test statistic
# as the number of abroad runners in top ten
statistic <- 3
# 5000 simulations of number of abroad in top ten times
# take number of values greater than statistic as p-value
sum(replicate(5000,sum(rbinom(1000,1,.1)[1:10])) > statistic)/5000
# or, equivalently:
sum(replicate(5000,rbinom(1,10,.1)) > statistic)/5000

在这个例子中,你的p值是0.01,因此拒绝零假设,即排在前十位的是随机的(独立于国内/国外类型)。

答案 1 :(得分:0)

我认为您不需要为因素或任何源数据而烦恼。比如说,你有1000名选手,其中10名是“国外”。然后,您需要做的就是计算(模拟)runif(1000)的前10个值在所有随机值的前X%中的概率。由于你假设不相关,因此生成顺序无关紧要。