R 中类别变量的两个以上水平的显著性检验

Significance tests across more than two levels of a categorical variable in R

提问人:Sophia L 提问时间:11/7/2023 最后编辑:DaveArmstrongSophia L 更新时间:11/8/2023 访问量:32

问:

我正在尝试确定两组之间具有 8 个级别的分类变量的频率是否存在显着差异。在这种情况下,两组被问到他们最喜欢的颜色,有 8 个选择。我想知道第 1 组的人选择颜色的频率与第 2 组的人选择相同颜色的频率是否存在显着差异。

也就是说,64.2%的Grp 1选择了橙色,而第2组则为53%。这种差异是否显著? 这是一个使用 tabpct() 的频率表

tabpct(all_data$Colors, all_data$Group, graph = F)
Column percent 
                         all_data$Group
all_data$Colors         Grp 1   %     Grp 2   %
           Red          3    (1.3)    2    (1.0)
           Blue         19   (8.4)    10   (5.0)
           Yellow       1    (0.4)    2    (1.0)
           Green        4    (1.8)    5    (2.5)
           Purple       1    (0.4)    2    (1.0)
           Orange       145  (64.2)   106  (53.0)
           Pink         1    (0.4)    1    (0.5)
           Brown       52   (23.0)   72   (36.0)
           Total        226  (100)    200  (100)

我确信有一种更简单的方法,但我似乎无法弄清楚。任何帮助将不胜感激!

我尝试对方差分析进行建模并对其进行 TukeyHSD 测试,但尽管没有 NA、NaN、Inf 或 0,但我还是得到了错误:

ColorComp <- aov(Color ~ Group, data = all_data)
TukeyHSD(ColorComp)

> Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
> NA/NaN/Inf in 'y'
> In addition: Warning message:
> In storage.mode(v) <- "double" : NAs introduced by coercion

我也尝试过同样的错误回归。

R 比较 分类数据 方差分析 频率分析

评论

1赞 DaveArmstrong 11/7/2023
为什么不直接在 Group 和 Color 的 2x8 表上做一个独立性的卡方检验呢?
0赞 IRTFM 11/7/2023
@DaveArmstrong 如果如此多的细胞剃须计数小于 5,则卡方检验通常无效。如果只有一两个低于 5,可以忽略,但 16 分中的 10 分真的会使统计数据无效。具有近似值的 2 x n Fisher 精确检验可能会成功。
0赞 DaveArmstrong 11/7/2023
当然,卡方解析 p 值可能不正确,但模拟的 p 值应该仍然有效,加上 。simulate.p.value=TRUE, B=10000chisq.test()
0赞 Sophia L 11/8/2023
@DaveArmstrong当我尝试“sum(x)错误:参数的'type'(语言)无效”时,我收到以下错误
0赞 DaveArmstrong 11/8/2023
@SophiaL,我在它起作用的地方发布了一个答案。

答:

0赞 IRTFM 11/7/2023 #1

测试单个颜色差异在统计学上是无效的,除非有一些先验的原因使该颜色成为分析的重点。

使用蒙特卡洛模拟的 Fisher 检验表明了分布差异的边缘提示证据:

read.table(text=txt, head=TRUE)
  Colors Grp1     X. Grp2   X..1
1    Red    3  (1.3)    2  (1.0)
2   Blue   19  (8.4)   10  (5.0)
3 Yellow    1  (0.4)    2  (1.0)
4  Green    4  (1.8)    5  (2.5)
5 Purple    1  (0.4)    2  (1.0)
6 Orange  145 (64.2)  106 (53.0)
7   Pink    1  (0.4)    1  (0.5)
8  Brown   52 (23.0)   72 (36.0)
> dat <-read.table(text=txt, head=TRUE)
> fisher.test(dat[c(2,4)])

    Fisher's Exact Test for Count Data

data:  dat[c(2, 4)]
p-value = 0.06452
alternative hypothesis: two.sided

可以进行卡方检验,但其有效性值得怀疑。

chisq.test(dat[c(2,4)])

    Pearson's Chi-squared test

data:  dat[c(2, 4)]
X-squared = 11.512, df = 7, p-value = 0.1178

Warning message:
In chisq.test(dat[c(2, 4)]) : Chi-squared approximation may be incorrect

0赞 DaveArmstrong 11/8/2023 #2

这是使用 的结果:simulate.p.valuechisq.test()

mat <- matrix(c(3  ,  2, 
19 ,  10,
1  ,  2, 
4  ,  5, 
1  ,  2, 
145,  106,
1  ,  1, 
52  , 72), ncol=2, byrow=TRUE) 
colnames(mat) <- c("Grp1", "Grp2")
rownames(mat) <- c("Red",    "Blue",   "Yellow", "Green",  "Purple", "Orange", "Pink",   "Brown")
mat
#>        Grp1 Grp2
#> Red       3    2
#> Blue     19   10
#> Yellow    1    2
#> Green     4    5
#> Purple    1    2
#> Orange  145  106
#> Pink      1    1
#> Brown    52   72

chisq.test(mat, simulate.p.value=TRUE, B=10000)
#> 
#>  Pearson's Chi-squared test with simulated p-value (based on 10000
#>  replicates)
#> 
#> data:  mat
#> X-squared = 11.512, df = NA, p-value = 0.09839

创建于 2023-11-07 with reprex v2.0.2