簡體   English   中英

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

[英]simr: how to specify expected effect size in lm() or aov() models?

在給定一組試驗數據的情況下,我正在嘗試使用simR來評估簡單 GLM 檢測特定效果大小的能力。 例如:

library(simr)
m1 = lm(y ~ x, data=simdata)
powerSim(m1)

在測試檢測“觀察到的”效果大小(即試驗數據中存在的任何效果大小)的能力時,我這樣做沒有問題,但是我想指定一個“預期的”效果大小。 這在處理LMER模型時很容易做到,使用fixef function,例如:

m2 = lmer(y ~ x + (1|g), data=simdata)
fixef(m2)['x'] = <expected effect size>

不幸的是,這個 function 不適用於aov()lm()模型。 例如,使用...

fixef(m1)['x'] = <expected effect size>

導致以下錯誤:

Error in UseMethod("fixef") : 
  no applicable method for 'fixef' applied to an object of class "c('aov', 'lm')"

我可以使用另一種方法/包/解決方法來更改aov()lm()的效果大小嗎? 我想這可能需要“破解”摘要 output 以改變 F 值(對於aov() )或系數值(對於lm() ),但是我沒有任何運氣讓它工作。

任何建議將不勝感激!

編輯

澄清一下,“效應大小”是指由 model 生成的固定效應系數。 所以在下面的output中:

# Call:
# lm(formula = y ~ x, data = simdata)

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

x的“效果大小”為 -0.2398。 在功效分析的背景下,改變效應大小應直接影響統計功效(因為大效應需要較少的檢測功效,反之亦然)。 例如,在使用 LMER 時,使用fixef()更改效果大小會直接影響統計功效:

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

指定較小的效應大小並重新評估功效:

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()的系數值:

m1 = lm(y ~ x, data=simdata)
m1$coefficients['x'] = <expected effect size>

但是,這對功率沒有影響,例如,將系數從 0.9 更改為 0.09 時

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()模型的效果大小?

你需要使用:

coef(m1)['x'] = <expected effect size>

代替

fixef(m1)['x'] = <expected effect size>

最簡單的解決方案是完全避免使用powerSim ,而是使用pwr.f2.test pwr 中的 pwr.f2.test。 考慮到特定的 model 參數和預期效果大小,這提供了功率的精確測量(與模擬功率相反)。

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 anova(m1)中的 df 值用於uv arguments 到pwr.f.test

pwr.f2.test(u=1, v=28, f2=<expected effect size>)

感謝@StupidWolf 解決了這個問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM