自由度因我的一个因素的倍数而偏离(R 中的双向方差分析)

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

我在 R 中运行了双向重复测量方差分析,残差的自由度似乎已关闭。

我的数据集如下所示:Behavioral Intox Data

**和我的方差分析代码:

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

summary(behint_rm_anova)

**产生这些结果:

> Error: Within  
> Df Sum Sq Mean Sq F value   Pr(>F)    
> Point            11  55.82   5.075   6.626 5.81e-10 ***  
> Condition         2  36.82  18.410  24.036 1.96e-10 ***  
> Point:Condition  22  29.18   1.326   1.732   0.0232 *    
> Residuals       312 238.97   0.766 

如果我没记错的话,残差 df 应该是:总观测值 (360) - 因子 A 的水平 (3) x 因子 B 的水平 (12)。 360-36 = 324。

我在这里查看了过去的帖子,我相信我已经包含了正确的错误术语。我还使用以下方法将“点”更改为一个因子:

Behavioral_intox_data_v4_for_R$Point <- as.factor(Behavioral_intox_data_v4_for_R$Point)

将其更改为一个因子解决了我最初遇到的“Point”的 df 问题,但没有解决此问题。

我还尝试使用与上面相同的代码将“ID”更改为因子以及“日”,但是当我尝试此操作时,它生成了一个完全缺少“条件”的方差分析表:

Error: ID:Point  
                 Df Sum Sq Mean Sq F value Pr(>F)    
Point            11 114.93  10.448  13.942 <2e-16 ***  
Point:Condition  22  30.32   1.378   1.839 0.0135 *    
Residuals       297 222.58   0.749 

我不确定为什么将“ID”更改为因子会一起删除输出的“条件”部分。也不确定如何重组我的 r 代码以产生正确的残差 df。

r
1个回答
0
投票

无法访问您的数据,我创建了一个示例数据框。现在,我认为这是错误:

您已将预期残差 df 计算为 324(360−36=324),从而假设数据集中没有缺失值且完美平衡。以下是通常如何考虑这种故障:

观察总数:

360
因子 A 水平(点):
12
因子 B 水平(条件):
3
互动:
12*3=36

重复测量设计中残差的自由度将通过调整每个受试者内的所有这些影响来计算。假设

𝑛=30
受试者,每人在3种条件下测量12次。您计算的数字 (324) 似乎没有考虑减去每个主题的自由度,如典型的 RM 方差分析设置中所做的那样:

Residual df=(n−1)*(levels of Point*levels of Condition−1)
Residual df=(30−1)*(36−1)=29*35=1015

尝试这样做:

set.seed(123) 

ID <- rep(1:30, each=36)  ditions)
Condition <- rep(c("T", "F", "M"), each=12, times=30)  
Point <- rep(1:12, times=90)  
Intox_score <- sample(1:100, 1080, replace=TRUE)  

Behavioral_intox_data <- data.frame(ID, Condition, Point, Intox_score)

str(Behavioral_intox_data)

Behavioral_intox_data$ID <- as.factor(Behavioral_intox_data$ID)
Behavioral_intox_data$Condition <- as.factor(Behavioral_intox_data$Condition)
Behavioral_intox_data$Point <- as.factor(Behavioral_intox_data$Point)

if (!("stats" %in% .packages(TRUE))) {
  library(stats)
}

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


这给出了

Error: ID
          Df Sum Sq Mean Sq F value Pr(>F)
Residuals 29  12639   435.8               

Error: ID:Point
           Df Sum Sq Mean Sq F value Pr(>F)  
Point      11  17310  1573.7   1.828 0.0485 *
Residuals 319 274567   860.7                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Error: ID:Condition
          Df Sum Sq Mean Sq F value Pr(>F)
Condition  2   1068   533.8   0.662  0.519
Residuals 58  46740   805.9               

Error: ID:Point:Condition
                 Df Sum Sq Mean Sq F value Pr(>F)
Point:Condition  22  22946  1043.0   1.283  0.174
Residuals       638 518647   812.9             

记住:这是我创建的数据。检查您的实际数据。

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