【问题标题】:Performing a weighted repeated measures ANOVA in R or SPSS在 R 或 SPSS 中执行加权重复测量方差分析
【发布时间】:2021-11-10 12:02:04
【问题描述】:

我想对 3 个(相关)组进行加权重复测量方差分析。

一些假设数据:

Data = data.frame(
       ID = as.factor(1:10),
       DV = c(0.06, 0.23, -0.2, 0.8, 0.67, 0.11, 0.88, -0.04, -0.4, 0.5, 0.07,-0.1, 0.3, 0.02, 0.03, 0.6, 0.65, 0.2, 0.15, -0.15,-0.02, 0.04, 0, 0.5, -0.4, 0.6, 0.3, 0.12, 0.33, -0.02), 
       Weight = c(13, 5, 60, 45, 2, 90, 110, 54, 27, 25,84, 40, 23, 60, 10, 7, 100, 89, 73, 44,30, 68, 92, 34, 12, 30, 87, 35, 28, 88),
       IV = rep(c("Short","Medium","Long"), each=10)
)

我想通过 Data$Weight 列中的数字来衡量 DV。比如DV=0.06应该贡献13次,DV=0.23只有5次。

我尝试过使用以下任一方法:

library(ez)
library(nlme)
modelaov = aov(DV ~ IV + Error(ID/IV), weights=W, data=Data)
modellme = lme(DV ~ IV, random = ~1|ID/IV, weights=Data$W, data=Data)

两次尝试都收到错误消息,但我不知道如何解决。

我也尝试在 SPSS 中使用加权最小二乘回归来做到这一点,但我遇到了无法选择相关案例的问题。

希望任何人都可以提供帮助!

【问题讨论】:

    标签: r spss anova weighted


    【解决方案1】:

    nlme::lme() 的帮助说明 weights 参数:

    一个可选的 varFunc 对象或描述组内异方差结构的单边公式。如果作为公式给出,则将其用作 varFixed 的参数,对应于固定方差权重。有关可用 varFunc 类的描述,请参阅有关 varClasses 的文档。默认为 NULL,对应同方差组内错误。

    也许这个论点不那么有效。

    也许您可以按所需的权重复制每一行,然后像这样运行模型:

    library(purrr)
    library(nlme)
    
    Data = data.frame(
           ID = as.factor(1:10),
           DV = c(0.06, 0.23, -0.2, 0.8, 0.67, 0.11, 0.88, -0.04, -0.4, 0.5, 0.07,-0.1, 0.3, 0.02, 0.03, 0.6, 0.65, 0.2, 0.15, -0.15,-0.02, 0.04, 0, 0.5, -0.4, 0.6, 0.3, 0.12, 0.33, -0.02), 
           Weight = c(13, 5, 60, 45, 2, 90, 110, 54, 27, 25,84, 40, 23, 60, 10, 7, 100, 89, 73, 44,30, 68, 92, 34, 12, 30, 87, 35, 28, 88),
           IV = rep(c("Short","Medium","Long"), each=10)
    ) %>% 
      map_df(rep, .$Weight)
    
    modellme = lme(DV ~ IV, random = ~1|ID/IV, data=Data)
    summary(modellme)
    #> Linear mixed-effects model fit by REML
    #>   Data: Data 
    #>        AIC       BIC  logLik
    #>   -98353.6 -98321.87 49182.8
    #> 
    #> Random effects:
    #>  Formula: ~1 | ID
    #>          (Intercept)
    #> StdDev: 9.513974e-15
    #> 
    #>  Formula: ~1 | IV %in% ID
    #>         (Intercept)     Residual
    #> StdDev:   0.5281456 2.971485e-16
    #> 
    #> Fixed effects:  DV ~ IV 
    #>                  Value  Std.Error   DF    t-value p-value
    #> (Intercept)  0.0082162 0.01124611 1435   0.730580  0.4652
    #> IVMedium    -0.4753554 0.01688691   18 -28.149337  0.0000
    #> IVShort     -0.0453449 0.01826811   18  -2.482187  0.0231
    #>  Correlation: 
    #>          (Intr) IVMedm
    #> IVMedium -0.666       
    #> IVShort  -0.616  0.410
    #> 
    #> Standardized Within-Group Residuals:
    #>        Min         Q1        Med         Q3        Max 
    #> -1.8681284 -0.1868128  0.0000000  0.4670321  2.3351605 
    #> 
    #> Number of Observations: 1465
    #> Number of Groups: 
    #>         ID IV %in% ID 
    #>         10         30
    

    reprex package (v2.0.1) 于 2021-09-15 创建

    【讨论】:

    • 感谢您指出这一点,我已经合并了这些更改。在比较 aov 与 lme 模型的结果时,我确实得到了不同的答案:modelaov = aov(DV ~ IV + Error(ID/IV), weight=Weight, data=Data) summary(modelaov), p-value > 0.05,但是当我将 lme 模型 (lme(DV ~ IV, random = ~1|ID/IV, data=Data2, method="ML")) 与基线模型 (lme(DV ~ 1, random = ~1|ID/IV, data=Data2, method="ML")),有显着效果。你知道如何解释这种差异吗?
    • 正如 CIAndrews 所指出的,上述方法增加了最有可能导致显着性变化的观察次数。但是,还要注意,拟合算法因加权最小二乘法和最大似然法而异。
    【解决方案2】:

    作为使用Weight 设置权重的数据集,使用该变量名称是第1 步。接下来,在aov 中,您应该使用weight = variable name 而不是weights

    modelaov = aov(DV ~ IV + Error(ID/IV), weight=Weight, data=Data)

    对于lme,这对我有用: lme(DV~IV,random=~1|ID/IV,weights=~Weight, data = Data)

    【讨论】:

    • 感谢您指出我犯的愚蠢错误。通过使用两种不同的方法,我确实得到了不同的结果(显着与非显着)(在结合 the-mad-statter 的建议时,请参阅上面的评论)。你知道如何解释吗?
    • 我不确定。但请记住,the-mad-statter 的方法将观察次数从 30 增加到 1,435。当您想比较 aovlme 时,请确保在两种方法中使用相同的数据集。
    • 哦,这是一个好点 - 人们可能不希望增加观察次数
    猜你喜欢
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    相关资源
    最近更新 更多