如何改进我的 R 代码以进行双向重复测量方差分析以产生正确的自由度?

问题描述 投票:0回答:1

我正在 rstudio 中运行双向重复测量方差分析,我发现分析的输出产生了一些奇怪的自由度,我担心分析结果不准确。当我认为残差应该小于 30 时,我的残差是 352,尽管有 12 个时间点,但输出的“点”部分的 df 只是 1。

上下文:我正在尝试比较 3 个条件下超过 12 个时间点的中毒分数。我的数据集有 30 个主题,每个主题有 12 个条目对应 12 个时间点。我相信这个问题是由 R 将 360 行解释为单独的组引起的,并且也没有认识到“点”因子有 12 个级别。

我的 RM 方差分析的输出如下所示:

Error: Within
                 Df Sum Sq Mean Sq F value   Pr(>F)    
Point             1   15.4  15.444  14.774 0.000144 ***
Condition         2   36.8  18.410  17.611 5.13e-08 ***
Point:Condition   2    0.4   0.176   0.169 0.844842    
Residuals       352  368.0   1.045

我的数据集的片段

ID Condition Day Intox_score Point
2341    T   1   0   1
2341    T   1   1   2
2341    T   1   0   3
2341    T   2   3   4
2341    T   2   2   5
2341    T   2   3   6
2341    T   3   0   7
2341    T   3   2   8
2341    T   3   3   9
2341    T   4   2   10
2341    T   4   1   11
2341    T   4   1   12

我想补充一点,我是一个非常缺乏经验的用户,并且到目前为止已经使用基础 R 完成了所有可能的分析。如果仍然可以使用基本 R 来解决问题,那就更好了。我纠正问题的时间有限,我担心学习使用另一个包并重新进行分析。我也可能误解了此处自由度的统计组成部分,但我认为无论哪种方式我都能够产生可靠的结果。

我尝试使用 aov() 函数,我相信它是 R 的基础,我的代码如下所示:

behint_rm_anova <- aov(Intox_score ~ Point * Condition + Error(ID/Point), data = Behavioral_intox_data_v4_for_R)

summary(behint_rm_anova)

我预计“点”的自由度是因子 (12) 减去 1 = 11 的水平 相反,我的输出仅显示自由度 1。

我还预计我的残差为 27(30 个受试者 - 3 组),但我的输出显示 352。

我尝试将代码中的错误术语更改为:“Error(ID/DAY)”,并尝试将其全部删除,认为这可能会改变 R 解释这些事物的方式,但这并没有改变我的自由度。

非常感谢您的反馈/帮助,非常感谢。

r statistics
1个回答
0
投票

我怀疑您没有将

Point
(可能还有
ID
)列编码为
factor()

像您这样的示例数据

set.seed(42)

data <- data.frame(
  ID = rep(1:30, each = 12),
  Condition = rep(LETTERS[1:3], each = 120),
  Point = rep(1:12, 30)
)

data$Intox_score[data$Condition == "A"] <- 1 + 0.09 * data$Point[data$Condition == "A"] + rnorm(120)
data$Intox_score[data$Condition == "B"] <- 2 + 0.09 * data$Point[data$Condition == "B"] + rnorm(120)
data$Intox_score[data$Condition == "C"] <- 3 + 0.09 * data$Point[data$Condition == "C"] + rnorm(120)

剧情

with(
  data, 
  interaction.plot(
    Point, Condition, Intox_score
  )
)

ID 和点作为数字

m_1 <- aov(Intox_score ~ Point * Condition + Error(ID/Point), data)
summary(m_1)
#> 
#> Error: ID
#>           Df Sum Sq Mean Sq
#> Condition  1  204.1   204.1
#> 
#> Error: ID:Point
#>       Df Sum Sq Mean Sq
#> Point  1   29.4    29.4
#> 
#> Error: Within
#>                  Df Sum Sq Mean Sq F value   Pr(>F)    
#> Point             1   14.0  13.964  14.998 0.000128 ***
#> Condition         2   27.6  13.788  14.809 6.68e-07 ***
#> Point:Condition   2    0.1   0.070   0.075 0.927833    
#> Residuals       352  327.7   0.931                     
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ID 和点作为因素

data$ID <- factor(data$ID)
data$Point <- factor(data$Point)

m_2 <- aov(Intox_score ~ Point * Condition + Error(ID/Point), data)
summary(m_2)
#> 
#> Error: ID
#>           Df Sum Sq Mean Sq F value   Pr(>F)    
#> Condition  2 231.70  115.85   116.9 5.04e-14 ***
#> Residuals 27  26.75    0.99                     
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Error: ID:Point
#>                  Df Sum Sq Mean Sq F value   Pr(>F)    
#> Point            11  48.32   4.393   4.799 8.31e-07 ***
#> Point:Condition  22  24.37   1.108   1.210    0.237    
#> Residuals       297 271.83   0.915                     
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

创建于 2024-05-15,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.