使用pairwise t检验时出现0×0矩阵错误的技术求助
解决pollute变量事后检验出现“0×0矩阵”错误的方案
我尝试对pollute变量的三个水平(编码1、2、3)做事后检验,但运行代码时出现“0×0矩阵”错误。
错误代码
p.none <- (d$pollute = 1) p.i <- (d$pollute = 2) p.m <- (d$pollute = 3) pairwise.t.test(p.none, p.i, p.adj = "none") pairwise.t.test(p.none, p.m, p.adj = "none")
错误原因
- 赋值符号误用:代码里用
=做比较,这是赋值操作,会把整个d$pollute列强制改成对应数值,而非筛选符合条件的行。逻辑判断应该用==。 - 函数用法错误:
pairwise.t.test不需要手动拆分分组,它的第一个参数是要检验的响应变量(比如density),第二个参数是分组变量(即pollute),直接传入就能自动完成所有两两比较。
正确代码
推荐方法:直接调用pairwise.t.test
假设要检验的响应变量是density,一行代码就能完成所有两两比较:
pairwise.t.test(d$density, d$pollute, p.adj = "none")
如果要检验light变量,把d$density替换成d$light即可。
备选方法:手动拆分分组(适合理解逻辑)
一定要手动拆分的话,先正确筛选响应变量的子集,再做t检验:
# 筛选各pollute水平对应的density值 p1_density <- d$density[d$pollute == 1] p2_density <- d$density[d$pollute == 2] p3_density <- d$density[d$pollute == 3] # 两两t检验 t.test(p1_density, p2_density) t.test(p1_density, p3_density) t.test(p2_density, p3_density)
注意这种方式需要自己处理p值校正,不如前者高效。
数据集d的dput输出
structure(list(tank.id = 1:60, condition = c("hot_species1", "cool_species1", "cool_species2", "cool_species1", "hot_species1", "hot_species2", "cool_species2", "hot_species1", "cool_species2", "cool_species1", "hot_species2", "hot_species1", "hot_species1", "hot_species1", "cool_species1", "cool_species2", "cool_species2", "cool_species2", "cool_species1", "hot_species2", "cool_species2", "cool_species2", "cool_species1", "cool_species1", "hot_species2", "cool_species1", "hot_species2", "hot_species2", "cool_species2", "hot_species2", "cool_species2", "hot_species2", "cool_species1", "hot_species1", "hot_species1", "cool_species1", "hot_species1", "hot_species2", "hot_species1", "hot_species1", "hot_species1", "hot_species1", "hot_species2", "cool_species2", "hot_species2", "cool_species1", "cool_species1", "hot_species2", "hot_species2", "cool_species2", "cool_species2", "hot_species2", "cool_species1", "hot_species1", "cool_species2", "cool_species1", "cool_species2", "hot_species1", "cool_species1", "hot_species2"), pollute = c(2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 3L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 2L, 3L, 3L, 1L, 2L, 1L, 1L, 1L, 1L, 3L, 1L, 2L, 2L, 3L, 1L, 3L, 1L, 1L, 3L, 3L, 3L, 3L, 1L, 1L, 2L, 3L, 1L, 2L, 2L, 3L, 2L, 1L, 3L, 1L, 3L), temp = c(2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L), species = c(1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L), light = c(1395L, 1347L, 1408L, 1441L, 1371L, 1331L, 1418L, 1441L, 1407L, 1349L, 1392L, 1365L, 1356L, 1465L, 1435L, 1420L, 1416L, 1364L, 1405L, 1423L, 1411L, 1423L, 1380L, 1469L, 1421L, 1450L, 1412L, 1380L, 1407L, 1416L, 1359L, 1363L, 1450L, 1377L, 1359L, 1412L, 1374L, 1459L, 1371L, 1368L, 1397L, 1353L, 1404L, 1348L, 1395L, 1373L, 1380L, 1440L, 1376L, 1400L, 1351L, 1348L, 1430L, 1432L, 1387L, 1374L, 1388L, 1410L, 1460L, 1388L), density = c(218L, 257L, 227L, 251L, 213L, 161L, 250L, 208L, 222L, 214L, 223L, 244L, 203L, 235L, 241L, 255L, 260L, 210L, 284L, 242L, 252L, 324L, 230L, 229L, 191L, 314L, 218L, 240L, 297L, 228L, 290L, 328L, 321L, 242L, 200L, 269L, 188L, 199L, 244L, 196L, 234L, 128L, 252L, 239L, 250L, 284L, 209L, 305L, 288L, 193L, 201L, 318L, 262L, 222L, 207L, 253L, 295L, 229L, 326L, 162L)), class = "data.frame", row.names = c(NA, -60L))
内容的提问来源于stack exchange,提问作者Harmony Nolder
相关产品推荐
相关产品推荐

