我试图创建一个函数,在x和x2变量之间的R中执行元素明智的prop.test,并返回每个测试的p值列表。 x1和x2表示每个类别的成功次数。我当时认为应该采取措施,但我无法弄清楚如何让它发挥作用。
set.seed(4576)
x1 <- round(runif(15, 200, 1000))
x2 <- round(runif(15, 200, 1000))
p <- cbind(x1, x2)
x1 x2
[1,] 919 559
[2,] 471 975
[3,] 537 792
[4,] 776 524
[5,] 329 603
[6,] 201 610
[7,] 520 353
[8,] 461 853
[9,] 491 765
[10,] 527 358
[11,] 248 331
[12,] 953 322
[13,] 453 680
[14,] 401 654
[15,] 962 358
function(data) {
n1 <- sum(data[,1])
n2 <- sum(data[,2])
sapply(data, function(x) {
prop.test(x = c(data[,1], data[,2]), n = c(n1, n2) )$p.value
} )
}
我可能只是误解了如何使用sapply,但任何帮助都会受到赞赏!
答案 0 :(得分:2)
对于行索引sapply
可能最简单,那么您不必手动从p
中提取每个值。
sapply(1:nrow(p), function(z) prop.test(p[z,, drop = FALSE])$p.value)
# [1] 9.810393e-21 6.072933e-40 3.228340e-12 3.366985e-12 3.807659e-19 1.487836e-46 1.929026e-08 3.988440e-27 1.327621e-14 1.630269e-08 6.548799e-04
# [12] 1.141069e-69 1.891166e-11 8.598155e-15 7.322714e-62
您的数据代表的内容并不十分清楚,但我在上面假设p
中的两列分别是成功和失败的计数。
这很重要,因为R实际上会根据您提供的数据结构执行不同的比例测试。例如:
> sapply(1:nrow(p), function(z) prop.test(p[z,, drop = FALSE], n = colSums(p))$p.value)
[1] 9.810393e-21 6.072933e-40 3.228340e-12 3.366985e-12 3.807659e-19 1.487836e-46 1.929026e-08 3.988440e-27 1.327621e-14 1.630269e-08 6.548799e-04 1.141069e-69
[13] 1.891166e-11 8.598155e-15 7.322714e-62
> sapply(1:nrow(p), function(z) prop.test(p[z,, drop = TRUE], n = colSums(p))$p.value)
[1] 7.981801e-28 6.509059e-37 6.883520e-10 8.391497e-17 1.044857e-16 1.291989e-43 3.079194e-11 3.329273e-24 3.663355e-12 2.373325e-11 5.689494e-03 5.212655e-84
[13] 2.658030e-09 1.781938e-12 2.023293e-75
这些数字都是0的浮点表示,所以这种情况下的不同是不相关的,但是如果你看一下这两种不同类型代码的单次迭代,你就会看到R在做什么不同因此它为什么给你不同的p值:
> prop.test(p[1,, drop = FALSE], n = colSums(p))
1-sample proportions test with continuity correction
data: p[1, , drop = FALSE], null probability 0.5
X-squared = 87.1996, df = 1, p-value < 2.2e-16
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
0.5964359 0.6464965
sample estimates:
p
0.6217862
> prop.test(p[1,, drop = TRUE], n = colSums(p))
2-sample test for equality of proportions with continuity correction
data: p[1, , drop = TRUE] out of colSums(p)
X-squared = 119.5388, df = 1, p-value < 2.2e-16
alternative hypothesis: two.sided
95 percent confidence interval:
0.03879812 0.05605522
sample estimates:
prop 1 prop 2
0.11140744 0.06398077
提供n
参数实际上并不重要drop = FALSE
(即,如果提供矩阵),因为它正在执行的测试是对行中两个数字的比较。
听起来这不是你想要的,所以你应该指定drop = TRUE
(这是默认值,因此你实际上不必提供它),但指定n
,正如我在上面的第二组代码中所做的那样。