提问人:Anne 提问时间:9/15/2021 更新时间:9/15/2021 访问量:403
在 R 或 SPSS 中执行加权重复测量方差分析
Performing a weighted repeated measures ANOVA in R or SPSS
问:
我想对 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 中使用加权最小二乘回归来做到这一点,但在那里我遇到了无法选择依赖情况的问题。
希望任何人都能提供帮助!
答:
2赞
the-mad-statter
9/15/2021
#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 包 (v2.0.1) 于 2021-09-15 创建
评论
0赞
Anne
9/15/2021
感谢您指出这一点,我已经合并了这些更改。在比较 aov 与 lme 模型的结果时,我确实得到了不同的答案:modelaov = aov(DV ~ IV + Error(ID/IV), weight=Weight, data=Data) summary(modelaov),p 值> 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”)),效果显著。你知道如何解释这种差异吗?
0赞
the-mad-statter
9/15/2021
正如CIAndrews所指出的,上述方法增加了观测值的数量,这是最有可能导致显著性变化的原因。但是,还要注意,拟合算法因加权最小二乘法与最大似然法而异。
1赞
CIAndrews
9/15/2021
#2
作为用于设置权重的数据集,使用该变量名称是第 1 步。接下来,您应该使用代替:Weight
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)
评论
0赞
Anne
9/15/2021
谢谢你指出我犯的愚蠢错误。通过使用两种不同的方法,我确实得到了不同的结果(显着与不显着)(在合并 the-mad-statter 的建议时,请参阅上面的评论)。你对如何解释这一点有什么想法吗?
0赞
CIAndrews
9/15/2021
我不确定。但请记住,该方法将观测值的数量从 30 个增加到 1,435 个。如果要与 进行比较,请确保在两种方法中使用相同的数据集。the-mad-statter
aov
lme
0赞
the-mad-statter
9/15/2021
哦,这是一个很好的观点 - 人们可能不希望增加观察的数量
评论