将错误指定为块和处理之间的交互

Specify error as interaction between block and treatment

程序员,

我正在尝试在 R 中指定 aov 中的错误项是块和我的治疗的相互作用。你能帮助我吗?我在下面构建了一个示例。

-里克

d   <- data.frame("a"=as.factor(rep(1:3,12)),
                  "b"=as.factor(rep(1:3,each=3)),
                  "block"=as.factor(rep(1:4,each=9)));
    d$y <- as.numeric(d$a)*rnorm(36, mean=.75, sd=1) +
      as.numeric(d$b)*rnorm(36, mean=1.2, sd=1) +
      as.numeric(d$block)*rnorm(36, mean=1.2, sd=1)+
      rnorm(36);
    anova1=aov(y~a+b+Error(a*b*block),data=d)
    summary(anova1)

我做了上面的操作,但我的输出不包含 p 值:

Error: a
  Df Sum Sq Mean Sq
a  2  50.38   25.19

Error: b
  Df Sum Sq Mean Sq
b  2  16.61   8.307

Error: block
          Df Sum Sq Mean Sq F value Pr(>F)
Residuals  3  138.2   46.06               

Error: a:b
          Df Sum Sq Mean Sq F value Pr(>F)
Residuals  4  46.39    11.6               

Error: a:block
          Df Sum Sq Mean Sq F value Pr(>F)
Residuals  6  69.71   11.62               

Error: b:block
          Df Sum Sq Mean Sq F value Pr(>F)
Residuals  6    110   18.33               

Error: a:b:block
          Df Sum Sq Mean Sq F value Pr(>F)
Residuals 12  289.5   24.12      

作为对 summary.aov 状态的帮助,仅返回 p 值 "if there are non-zero residual degrees of freedom." 这是明智的,因为没有残差 df,模型中就没有随机性可以估计了。

您的模型是 'fully saturated',这意味着它试图估计的因子水平组合中没有重复。有关进一步讨论,请参阅 this cross-validated answer

要诊断您数据中的这个问题,请尝试以下代码。它表明每个 block/a*b 组合中只有一个观察值:

> xtabs( ~ a + b + block,  d)
, , block = 1

   b
a   1 2 3
  1 1 1 1
  2 1 1 1
  3 1 1 1

, , block = 2

   b
a   1 2 3
  1 1 1 1
  2 1 1 1
  3 1 1 1

, , block = 3

   b
a   1 2 3
  1 1 1 1
  2 1 1 1
  3 1 1 1

, , block = 4

   b
a   1 2 3
  1 1 1 1
  2 1 1 1
  3 1 1 1