R 对每行的一组列进行一次样本测试

R One sample test for set of columns for each row

我有一个数据集,其中包含 3 种情况下 50 个城市的水平和趋势。以下是示例数据 -

City <- paste0("City",1:50)

L1 <- sample(100:500,50,replace = T)
L2 <- sample(100:500,50,replace = T)
L3 <- sample(100:500,50,replace = T)

T1 <- runif(50,0,3)
T2 <- runif(50,0,3)
T3 <- runif(50,0,3)

df <- data.frame(City,L1,L2,L3,T1,T2,T3)

现在,在 3 个场景中,我使用以下代码找到了最低水平和最低趋势 -

df$L_min <- apply(df[,2:4],1,min)
df$T_min <- apply(df[,5:7],1,min)

现在我想分别检查这些最小值在水平和趋势之间是否有显着差异。因此,检查 L_min 的第 2-4 列和 T_min 的第 5-7 列。这需要为每个 城市(行) 完成,如果显着,则 return 它与哪一列有显着差异。

如果有人可以指导如何做到这一点,将会有所帮助。

谢谢!!

我会把我的想法放在这里,不过我期待着其他人的想法。

> head(df)
  City  L1  L2  L3       T1         T2        T3 L_min      T_min
1 City1 251 176 263 1.162313 0.07196579 2.0925715   176 0.07196579
2 City2 385 406 264 0.353124 0.66089524 2.5613980   264 0.35312402
3 City3 437 333 426 2.625795 1.43547766 1.7667891   333 1.43547766
4 City4 431 405 493 2.042905 0.93041254 1.3872058   405 0.93041254
5 City5 101 429 100 1.731004 2.89794314 0.3535423   100 0.35354230
6 City6 374 394 465 1.854794 0.57909775 2.7485841   374 0.57909775
> df$FC <- rowMeans(df[,2:4])/df[,8]
> df <- df[order(-df$FC), ]
> head(df)
  City  L1  L2  L3        T1        T2         T3 L_min      T_min       FC
18 City18 461 425 117 2.7786757 2.6577894 0.75974121   117 0.75974121 2.857550
38 City38 370 117 445 0.1103141 2.6890014 2.26174542   117 0.11031411 2.655271
44 City44 101 473 222 1.2754675 0.8667007 0.04057544   101 0.04057544 2.627063
10 City10 459 361 132 0.1529519 2.4678493 2.23373484   132 0.15295194 2.404040
16 City16 232 393 110 0.8628494 1.3995549 1.01689217   110 0.86284938 2.227273
15 City15 499 475 182 0.3679611 0.2519497 2.82647041   182 0.25194969 2.117216

现在,根据顶部的 2:4 列,您拥有最多不同的行。列 5:7 以类似方式。

以及统计测试的一些技巧:

  1. 始终使用t.test(参数,基于均值)而不是 wilcoxon(u-mann whitney - 非参数,基于中位数),它具有更大的功效; 然而:

-数据集应该是大ex。 hipotesis:蒙特利尔的公民比魁北克高; t.test 当您从每个城市抽取 100 人时,效果很好,因此我们有 200 人的身高测量 100 对 100。

-所有样本的分布应该接近正态分布;或者两个样本应该具有远离正态分布的相似分布——它可能是二项式的。无论如何,当一个样本具有正态分布而第二个没有时,我们不能使用此测试。

-两个样本的大小应该相等,所以 100 对 100 是可以的,但 87 对 234 不完全是,p 值将低于 0.05,但它可能会被歪曲。

如果你的数据不满足以上条件,我更喜欢非参数测试,功率更小但抗性更强。