测试两组之间的分布差异

机器算法验证 r 假设检验 卡方检验
2022-04-02 12:15:02

在练习的框架内,我有两个因素:a type of animal& adatabase

M <- as.table(rbind(c(22000, 2300, 42009,106000), c(380,30,7,260)))
dimnames(M) <- list(Databases=c("database1","database2"), Animals=c("Bird","Dog", "Cat","Mouse"))# 

           Animals
Databases     Bird    Dog    Cat  Mouse
  database1  22000   2300  42009 106000
  database2    380     30      7    260

我只是想知道与 相比,database1每只database2动物的个体数量是否遵循相同的分布?例如,在这里我们看到在database1里面有更多Mouse10600069.6%),而在database2里面只有26038.4%.

请问有人知道我可以使用什么测试来测试两个数据库之间重新分区的差异吗?

2个回答

通过检查,很明显Cat第二个数据库中的代表性不足。让我们看看它如何在您的卡方检验中发挥作用 2×4权变矩阵。

db1 =  c(22000,   2300,  42009, 106000)
db2 =  c(  380,     30,      7,    260)
MAT= rbind(db1,db2);  MAT
     [,1] [,2]  [,3]   [,4]
db1 22000 2300 42009 106000
db2   380   30     7    260

chisq.test(MAT)

        Pearson's Chi-squared test

data:  MAT
X-squared = 1238, df = 3, p-value < 2.2e-16

两个数据库中比例相同的原假设被强烈拒绝,P值接近0.

Pearson 残差的平方和是卡方统计量1238.具有最大绝对值的残差指向观察和预期计数差异最大的单元格。

chisq.test(MAT)$resi
         [,1]       [,2]        [,3]       [,4]
db1 -1.958478 -0.4334418   0.7695618  0.4790736
db2 31.244842  6.9149717 -12.2773080 -7.6429657

因此,鸟类和猫的比例差异最大。特设,我们可以看看2×2 仅适用于鸟类和猫的应急矩阵。

chisq.test(MAT[,c(1,3)], cor=F)

        Pearson's Chi-squared test

data:  MAT[, c(1, 3)]
X-squared = 690.98, df = 1, p-value < 2.2e-16

根据您的兴趣,您也可以查看其他子矩阵。通常,人们会担心错误的发现,对相同的数据进行多次测试,但 P 值如此之小,人们可以在 不使用 Bonferroni 等方法调整显着性水平的情况下进行多次临时测试。

评论中每个问题的附录。假设我们有

Db1 =  c(22000,   2300,  42009, 106000)
Db2 =  c(  380,     30,      4,    260)
MTR = rbind(Db1,Db2);  MTR

卡方检验适用于您建议的较小单元格。也许你已经读过需要计数高于5.这是根据行和列总计计算的“预期计数”,基于H0. 中的计数MTR是“观察计数”。在 R 中,您可以使用$-notation 查看预期计数:

chisq.test(MTR, cor=F)$exp
           [,1]        [,2]       [,3]        [,4]
Db1 22292.79999 2320.921536 41849.3032 105845.9753
Db2    87.20001    9.078464   163.6968    414.0247

由于相对较大的行和列总计,单元格 [2,3] 可以(以及所有其他单元格)。如果不是,chisq.test将在输出中显示警告消息,说明 P 值可能不准确。然后你可以使用参数sim=Tchisq.test模拟一个更有用的 P 值。

chisq.test(MTR, cor=F)

        Pearson's Chi-squared test

data:  MTR
X-squared = 1249.3, df = 3, p-value < 2.2e-16

> chisq.test(MTR, cor=F)$exp
           [,1]        [,2]       [,3]        [,4]
Db1 22292.79999 2320.921536 41849.3032 105845.9753
Db2    87.20001    9.078464   163.6968    414.0247

一个χ2-test 将是显而易见的选择,特别是因为您似乎对小细胞计数没有问题。