R中的Anova重复
Anova in R with repetitions
好的,我正在上统计课程(我是一名博士生),但我在用 R 执行方差分析时遇到了一些麻烦。代码如下:
df <- data.frame(
x1 = c(-1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1),
x2 = c(-1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1),
x3 = c(-1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1),
y = c(59, 74, 50, 69, 50, 81, 46, 79, 61, 70, 58, 67, 54, 85, 44, 81)
)
我知道我可以用
执行方差分析
summary(aov(y ~ x1 + x2 + x3, data = df))
问题是残差分析错误。它给了我 474 的 SQR 和 12 个自由度,但它应该分别是 64 和 8。我确信这一点,因为我们不仅在 class 中与我的教授手工完成了(这花了一段时间),而且我们还在 Matlab 中通过不止一种方法完成了它并得到了相同的结果。知道为什么 R 给我错误的答案吗?我尝试使用另一种方法,例如 anova.lme 但没有成功。只看自由度,如果我有 16 个实验并且我计算了 8 个均值,那么我就有 8 个自由度。换一种方式来看,我有 16 个实验和 8 个不同的组(一个用于每个标准化交互),这也给了我 8 个 df。 SQR 的自由度公式为 N - k,k 是不同的组。在这种情况下,这些组都是可能的相互作用,所以 16 个实验 - 8 个可能的相互作用 = 8 度 freedom.This 已经证明 12 个 dfs 是错误的(我不知道这 12 个是从哪里来的)。下面是我从 R 得到的答案,来自 x1、x2、x3 的 SQG 都是正确的,它们的自由度也是正确的。但是由于残差是错误的,所以我的F值也不对。
我说的交互(组)是:
x1 x2 x3
-1 -1 -1;
1 -1 -1;
-1 1 -1;
1 1 -1;
-1 -1 1;
1 -1 1;
-1 1 1;
1 1 1;
下面是我从 R
那里得到的答案
Df Sum Sq Mean Sq F value Pr(>F)
x1 1 2116 2116.0 53.570 9.23e-06 ***
x2 1 100 100.0 2.532 0.138
x3 1 9 9.0 0.228 0.642
Residuals 12 474 39.5
感谢您的帮助,对于任何错误,我深表歉意,英语不是我的主要语言。
此处您将 x1
、x2
和 x3
建模为单独的协变量,但您似乎想将其合并为一个因子。您可以使用 R 中的 interaction()
函数来执行此操作。例如
summary(aov(y ~ interaction(x1, x2, x3), data = df))
# Df Sum Sq Mean Sq F value Pr(>F)
# interaction(x1, x2, x3) 7 2635 376.4 47.05 7.07e-06 ***
# Residuals 8 64 8.0
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
这似乎给出了您期望的值基本上它为您创建了具有 8 个不同值的新变量
with(df, table(interaction(x1, x2, x3)))
# -1.-1.-1 1.-1.-1 -1.1.-1 1.1.-1 -1.-1.1 1.-1.1 -1.1.1 1.1.1
# 2 2 2 2 2 2 2 2
好的,我正在上统计课程(我是一名博士生),但我在用 R 执行方差分析时遇到了一些麻烦。代码如下:
df <- data.frame(
x1 = c(-1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1),
x2 = c(-1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1),
x3 = c(-1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1),
y = c(59, 74, 50, 69, 50, 81, 46, 79, 61, 70, 58, 67, 54, 85, 44, 81)
)
我知道我可以用
执行方差分析summary(aov(y ~ x1 + x2 + x3, data = df))
问题是残差分析错误。它给了我 474 的 SQR 和 12 个自由度,但它应该分别是 64 和 8。我确信这一点,因为我们不仅在 class 中与我的教授手工完成了(这花了一段时间),而且我们还在 Matlab 中通过不止一种方法完成了它并得到了相同的结果。知道为什么 R 给我错误的答案吗?我尝试使用另一种方法,例如 anova.lme 但没有成功。只看自由度,如果我有 16 个实验并且我计算了 8 个均值,那么我就有 8 个自由度。换一种方式来看,我有 16 个实验和 8 个不同的组(一个用于每个标准化交互),这也给了我 8 个 df。 SQR 的自由度公式为 N - k,k 是不同的组。在这种情况下,这些组都是可能的相互作用,所以 16 个实验 - 8 个可能的相互作用 = 8 度 freedom.This 已经证明 12 个 dfs 是错误的(我不知道这 12 个是从哪里来的)。下面是我从 R 得到的答案,来自 x1、x2、x3 的 SQG 都是正确的,它们的自由度也是正确的。但是由于残差是错误的,所以我的F值也不对。
我说的交互(组)是:
x1 x2 x3
-1 -1 -1;
1 -1 -1;
-1 1 -1;
1 1 -1;
-1 -1 1;
1 -1 1;
-1 1 1;
1 1 1;
下面是我从 R
那里得到的答案 Df Sum Sq Mean Sq F value Pr(>F)
x1 1 2116 2116.0 53.570 9.23e-06 ***
x2 1 100 100.0 2.532 0.138
x3 1 9 9.0 0.228 0.642
Residuals 12 474 39.5
感谢您的帮助,对于任何错误,我深表歉意,英语不是我的主要语言。
此处您将 x1
、x2
和 x3
建模为单独的协变量,但您似乎想将其合并为一个因子。您可以使用 R 中的 interaction()
函数来执行此操作。例如
summary(aov(y ~ interaction(x1, x2, x3), data = df))
# Df Sum Sq Mean Sq F value Pr(>F)
# interaction(x1, x2, x3) 7 2635 376.4 47.05 7.07e-06 ***
# Residuals 8 64 8.0
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
这似乎给出了您期望的值基本上它为您创建了具有 8 个不同值的新变量
with(df, table(interaction(x1, x2, x3)))
# -1.-1.-1 1.-1.-1 -1.1.-1 1.1.-1 -1.-1.1 1.-1.1 -1.1.1 1.1.1
# 2 2 2 2 2 2 2 2