如何解释这些自定义对比?

机器算法验证 r 方差分析 对比 广义最小二乘法
2022-03-29 11:31:22

我正在使用自定义对比进行单向方差分析(每个物种)。

     [,1] [,2] [,3] [,4]
0.5    -1    0    0    0
5       1   -1    0    0
12.5    0    1   -1    0
25      0    0    1   -1
50      0    0    0    1

我比较强度 0.5 和 5、5 和 12.5 等等。这些是我正在处理的数据

在此处输入图像描述

结果如下

Generalized least squares fit by REML
  Model: dark ~ intensity 
  Data: skofijski.diurnal[skofijski.diurnal$species == "niphargus", ] 
       AIC      BIC    logLik
  63.41333 67.66163 -25.70667

Coefficients:
            Value Std.Error  t-value p-value
(Intercept) 16.95 0.2140872 79.17334  0.0000
intensity1   2.20 0.4281744  5.13809  0.0001
intensity2   1.40 0.5244044  2.66970  0.0175
intensity3   2.10 0.5244044  4.00454  0.0011
intensity4   1.80 0.4281744  4.20389  0.0008

 Correlation: 
           (Intr) intns1 intns2 intns3
intensity1 0.000                      
intensity2 0.000  0.612               
intensity3 0.000  0.408  0.667        
intensity4 0.000  0.250  0.408  0.612 

Standardized residuals:
       Min         Q1        Med         Q3        Max 
-2.3500484 -0.7833495  0.2611165  0.7833495  1.3055824 

Residual standard error: 0.9574271 
Degrees of freedom: 20 total; 15 residual

16.95 是“niphargus”的全球平均值。在强度 1 中,我正在比较强度 0.5 和 5 的平均值。

如果我理解正确的话,强度 1 的系数 2.2 应该是强度级别 0.5 和 5 之间差异的一半。但是,我的手算与总结的不符。任何人都可以插入我做错了什么吗?

ce1 <- skofijski.diurnal$intensity
levels(ce1) <- c("0.5", "5", "0", "0", "0")
ce1 <- as.factor(as.character(ce1))
tapply(skofijski.diurnal$dark, ce1, mean)
       0    0.5      5 
  14.500 11.875 13.000 
diff(tapply(skofijski.diurnal$dark, ce1, mean))/2
      0.5       5 
  -1.3125  0.5625 
2个回答

您为对比指定的矩阵原则上是正确的。要将其转换为适当的对比矩阵,您需要计算原始矩阵的广义逆矩阵。

如果M是你的矩阵:

M

#     [,1] [,2] [,3] [,4]
#0.5    -1    0    0    0
#5       1   -1    0    0
#12.5    0    1   -1    0
#25      0    0    1   -1
#50      0    0    0    1 

现在,使用 计算广义逆,并使用ginv转置结果t

library(MASS)
t(ginv(M))

#     [,1] [,2] [,3] [,4]
#[1,] -0.8 -0.6 -0.4 -0.2
#[2,]  0.2 -0.6 -0.4 -0.2
#[3,]  0.2  0.4 -0.4 -0.2
#[4,]  0.2  0.4  0.6 -0.2
#[5,]  0.2  0.4  0.6  0.8

结果与@Greg Snow 的结果相同。使用此矩阵进行分析。

这比手动操作要容易得多。


还有一种更简单的方法可以生成滑动差异矩阵(又名重复对比)。这可以通过函数contr.sdif和因子级别的数量作为参数来完成。如果您有五个因素水平,例如您的示例:

library(MASS)
contr.sdif(5)

#   2-1  3-2  4-3  5-4
#1 -0.8 -0.6 -0.4 -0.2
#2  0.2 -0.6 -0.4 -0.2
#3  0.2  0.4 -0.4 -0.2
#4  0.2  0.4  0.6 -0.2
#5  0.2  0.4  0.6  0.8

如果顶部的矩阵是您对虚拟变量进行编码的方式(您传递给 R 中的Corcontrast函数的内容),那么它们第一个是将第一级与其他级别进行比较(实际上是第一级的 0.8 倍从 0.2 倍中减去)其他的总和)。

第二项将第 1 2 级与最后 3 级进行比较。第 3 项将第 1 3 级与最后 2 级进行比较,第 4 项将第 1 4 级与最后 1 级进行比较。

如果您想进行您描述的比较(比较每一对),那么您想要的虚拟变量编码是:

      [,1] [,2] [,3] [,4]
[1,] -0.8 -0.6 -0.4 -0.2
[2,]  0.2 -0.6 -0.4 -0.2
[3,]  0.2  0.4 -0.4 -0.2
[4,]  0.2  0.4  0.6 -0.2
[5,]  0.2  0.4  0.6  0.8