首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >simr:如何在lm()或aov()模型中指定预期的效果大小?

simr:如何在lm()或aov()模型中指定预期的效果大小?
EN

Stack Overflow用户
提问于 2019-11-18 18:51:52
回答 2查看 648关注 0票数 0

我试图使用simR来评估简单GLMs的能力,以检测特定的效果大小,给出一组试点数据。例如:

代码语言:javascript
复制
library(simr)
m1 = lm(y ~ x, data=simdata)
powerSim(m1)

在测试能力以检测“观察”效果大小(即试验数据中存在的任何影响大小)时,我没有问题,不过,我想指定一个“预期的”效果大小。在处理LMER模型时,使用fixef函数很容易做到这一点,例如:

代码语言:javascript
复制
m2 = lmer(y ~ x + (1|g), data=simdata)
fixef(m2)['x'] = <expected effect size>

不幸的是,此函数不适用于aov()lm()模型。例如,使用..。

代码语言:javascript
复制
fixef(m1)['x'] = <expected effect size>

结果出现以下错误:

代码语言:javascript
复制
Error in UseMethod("fixef") : 
  no applicable method for 'fixef' applied to an object of class "c('aov', 'lm')"

我是否可以使用另一种方法/包/解决方案来更改aov()lm()的效果大小?我认为这可能需要对摘要输出进行“黑客攻击”,从而改变F值(对于aov())或系数值(对于lm()),但是我没有任何运气能够使其工作起来。

任何建议都将不胜感激!

编辑

为了澄清,我所说的“效应大小”是指由模型产生的固定效应系数。因此,在以下输出中:

代码语言:javascript
复制
# Call:
# lm(formula = y ~ x, data = simdata)

# Coefficients:
# (Intercept)            x  
#     10.6734      -0.2398

x的“影响大小”为-0.2398。在功率分析中,改变影响大小应该直接影响统计能力(因为大的影响需要较少的检测功率,反之亦然)。例如,在使用LMER时,使用fixef()更改效果大小直接影响统计能力:

代码语言:javascript
复制
m2 = lmer(y ~ x + (1|g), data=simdata)
summary(powerSim(m2, progress=F, nsim=100)

#   successes trials mean     lower     upper
# 1        96    100 0.96 0.9007428 0.9889955

指定较小的影响大小和重新评估能力:

代码语言:javascript
复制
fixef(m2)['x'] = 0.05
summary(powerSim(m2, progress=F, nsim=100)
#   successes trials mean     lower     upper
# 1        12    100 0.12 0.0635689 0.2002357

我尝试使用以下方法修改lm()的系数值:

代码语言:javascript
复制
m1 = lm(y ~ x, data=simdata)
m1$coefficients['x'] = <expected effect size>

然而,这对功率没有影响,例如当系数从0.9变到0.09时

代码语言:javascript
复制
m1$coefficients['x'] = 0.9
summary(powerSim(m1, progress=F, nsim=100))
#   successes trials mean     lower     upper
# 1        22    100 0.22 0.1433036 0.3139197

m1$coefficients['x'] = 0.09
summary(powerSim(m1, progress=F, nsim=100))
#  successes trials mean     lower     upper
# 1        24    100 0.24 0.1602246 0.3357355

因此,我想我的问题的一个更准确的措辞是:如何以一种反映统计能力变化的方式来改变aov()/lm()模型的效果大小?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-10 22:02:39

你需要使用:

代码语言:javascript
复制
coef(m1)['x'] = <expected effect size>

而不是

代码语言:javascript
复制
fixef(m1)['x'] = <expected effect size>
票数 1
EN

Stack Overflow用户

发布于 2019-11-27 15:14:20

对此,最简单的解决方案是完全避免使用powerSim,而是使用包pwr中的pwr.f2.test。这提供了一个精确的功率测量(相对于模拟功率),给定特定的模型参数和预期的效果大小。

代码语言:javascript
复制
m1 = lm(y ~ x, data=simdata)
anova(m1) 

# Analysis of Variance Table
# 
# Response: y
# Df  Sum Sq Mean Sq F value Pr(>F)
# x          1  14.231 14.2308  1.5943 0.2171
# Residuals 28 249.925  8.9259 

anova(m1)中的df值用于uv参数到pwr.f.test

代码语言:javascript
复制
pwr.f2.test(u=1, v=28, f2=<expected effect size>)

多亏了@StupidWolf,你才弄明白了这一点!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58921085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档