您不应该在这里使用“单向”或“拟合优度”卡方检验六次以上。您应该在双向列联表上使用卡方独立性检验。此外,正如@DJohnson 在下面指出的那样,您需要使用观察到的实际计数,而不是平均计数(例如,我不确定我是否理解您所说的底层只苍蝇。)也就是说,您需要建立一个像这样的列联表: 6.67
Layer
Color bottom middle top sum
red 7 3 10 20
green # # # 20
blue # # # 20
orange # # # 20
purple # # # 20
yellow # # # 20
然后运行您的卡方检验。卡方检验的自由度为(即行数减 1 乘以列数减 1)。在您的情况下,这将是:。 (r−1)(c−1)5×2=10
更新: 如果你有这个实验的三个重复版本,你有(在某种意义上)三个双向列联表,或者(更准确地说)一个三路列联表。您想测试考虑到迭代的行之间是否存在差异。分析多路列联表的一般方法是使用对数线性模型(实际上是修饰的 Poisson GLiM)。我在这里更详细地描述了这一点: of multidimensional data。下面,我使用创建了两个假数据集,一个我称之为“ ”(代表“null”,因为颜色和图层之间没有关系),另一个我称之为“ ”(代表“替代”, χ2R.n.a
dft = expand.grid(layer=c("bottom","middle","top"),
color=c("blue", "green", "orange", "red", "white", "yellow"),
Repeat=1:3)
dft = dft[,3:1]
dft.n = data.frame(dft, count=c(rep(c( 3,6,11), times=6),
rep(c( 6,7, 7), times=6),
rep(c(11,6, 3), times=6)))
dft.a = data.frame(dft,
count=c(c(3,6,11), c(11,6, 3), c(11,6, 3), c(3,6,11), c(3,6,11), c(11,6, 3),
c(3,6,11), c(11,6, 3), c(11,6, 3), c(3,6,11), c(3,6,11), c(11,6, 3),
c(3,6,11), c(11,6, 3), c(11,6, 3), c(3,6,11), c(3,6,11), c(11,6, 3) ))
tab.n = xtabs(count~color+layer+Repeat, dft.n)
# , , Repeat = 1
# layer
# color bottom middle top
# blue 3 6 11
# green 3 6 11
# orange 3 6 11
# red 3 6 11
# white 3 6 11
# yellow 3 6 11
#
# , , Repeat = 2
# layer
# color bottom middle top
# blue 6 7 7
# green 6 7 7
# orange 6 7 7
# red 6 7 7
# white 6 7 7
# yellow 6 7 7
#
# , , Repeat = 3
# layer
# color bottom middle top
# blue 11 6 3
# green 11 6 3
# orange 11 6 3
# red 11 6 3
# white 11 6 3
# yellow 11 6 3
tab.a = xtabs(count~color+layer+Repeat, dft.a)
# , , Repeat = 1
# layer
# color bottom middle top
# blue 3 6 11
# green 11 6 3
# orange 11 6 3
# red 3 6 11
# white 3 6 11
# yellow 11 6 3
#
# , , Repeat = 2
# layer
# color bottom middle top
# blue 3 6 11
# green 11 6 3
# orange 11 6 3
# red 3 6 11
# white 3 6 11
# yellow 11 6 3
#
# , , Repeat = 3
# layer
# color bottom middle top
# blue 3 6 11
# green 11 6 3
# orange 11 6 3
# red 3 6 11
# white 3 6 11
# yellow 11 6 3
我对两者都进行了快速对数线性分析。0模型从(“饱和”模型)到2(已删除项)列出。请注意,在 R 中,通常按从小到大的顺序列出模型,但anova()调用的结果将嵌套模型称为“ Model 1”,这使得名称不对应;尽量不要被这个甩掉。对于空数据集,Model 2不同于Model 1(即,m.1.n不同于m.2.n),这意味着layers不独立于Repeats。另一方面,Model 3不不同于Model 2(即,m.0.n不同于m.1.n),意味着layer*Repeat图案不因颜色而异。此外,Model 3与Saturated模型(因为它是饱和模型)。
library(MASS)
m.0.n = loglm(~color*layer*Repeat, tab.n)
m.1.n = loglm(~color+layer*Repeat, tab.n)
m.2.n = loglm(~color+layer+Repeat, tab.n)
anova(m.2.n, m.1.n, m.0.n)
# LR tests for hierarchical log-linear models
#
# Model 1:
# ~color + layer + Repeat
# Model 2:
# ~color + layer * Repeat
# Model 3:
# ~color * layer * Repeat
#
# Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
# Model 1 59.55075 44
# Model 2 0.00000 40 59.55075 4 0
# Model 3 0.00000 0 0.00000 40 1
# Saturated 0.00000 0 0.00000 0 1
m.0.a = loglm(~color*layer*Repeat, tab.a)
m.1.a = loglm(~color+layer*Repeat, tab.a)
m.2.a = loglm(~color+layer+Repeat, tab.a)
anova(m.2.a, m.1.a, m.0.a)
# LR tests for hierarchical log-linear models
#
# Model 1:
# ~color + layer + Repeat
# Model 2:
# ~color + layer * Repeat
# Model 3:
# ~color * layer * Repeat
#
# Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
# Model 1 87.47794 44
# Model 2 87.47794 40 0.00000 4 1e+00
# Model 3 0.00000 0 87.47794 40 2e-05
# Saturated 0.00000 0 0.00000 0 1e+00
对于替代数据集,Model 2与 没有区别Model 1(即,m.1.a与 不同m.2.a),这意味着layers它们独立于Repeats. 另一方面,Model 3确实不同于Model 2(即,m.0.a不同于m.1.a),这意味着layer*Repeat图案确实因颜色而异。(再一次,Model 3是Saturated模型。)