结果为每一行生成相同的p值,而当我单独计算每一行时,p值看起来不同。
我试图测试基线和基线比例之间的差异,这里是数据
group n_Baseline n_Endline sample_Baseline sample_Endline
<chr> <int> <int> <dbl> <dbl>
1 A 164 158 305 273
2 B 89 65 131 106
3 C 59 68 118 108
4 D 52 48 90 84
5 E 141 107 224 186
我尝试了下面的指令:
df$P_Values <- apply(df, 1, function(x) prop.test(x = c(df$n_Baseline, df$n_Endline), n = c(df$sample_Baseline, df$sample_Endline))$p.value).
每一行的结果都具有相同的p值:
group n_Baseline n_Endline sample_Baseline sample_Endline P_Values
<chr> <int> <int> <dbl> <dbl> <dbl>
1 A 164 158 305 273 0.109
2 B 89 65 131 106 0.109
3 C 59 68 118 108 0.109
4 D 52 48 90 84 0.109
5 E 141 107 224 186 0.109
然而,当我为每一行单独执行此操作时,pvalue非常不同。例如,在第一行中:
prop.test(x = c(164, 158), n = c(305, 273))
输出量:
2-具有连续性校正的比例相等样本检验
数据:c(164,158)/c(305,273)X平方= 0.82448,df = 1,p值= 0.3639备择假设:双侧95%置信区间:-0.12552283 0.04342351样本估计值:2019 - 05 - 25 00:00:00
为什么以及如何获得每一行的确切p值,而不是同一行?
1条答案
按热度按时间x4shl7ld1#
最简单的方法可能是在tidyverse中通过
dplyr
内部的rowwise
计算如果你想坚持使用基本的R,那么你可以使用
apply
,但是你的apply
语法在这里是不正确的。apply
中的函数将 Dataframe 的每一行作为向量,并将其称为x
。然后,您需要使用向量x
作为prop.test
中的元素,但实际上是将整个列从 Dataframe 传递给prop.test
。因为你每次都传递相同的东西,所以你每次都得到相同的(错误的)p值。此外,由于第一列是字符向量,因此每行都将被强制转换为字符向量,因此除非使用
df[-1]
跳过apply
调用中的第一列,否则数学运算将不起作用apply
的正确用法是:问题中的数据为可重现格式