如何引导尊重主题内信息?

Posted

技术标签:

【中文标题】如何引导尊重主题内信息?【英文标题】:How to bootstrap respecting within-subject information? 【发布时间】:2013-07-02 14:45:20 【问题描述】:

这是我第一次在这个论坛发帖,我想从一开始就说我不是一个熟练的程序员。如果问题或代码不清楚,请告诉我!

我正在尝试通过引导来获得交互的 95% 置信区间 (CI)(这是我的测试统计量)。我正在使用“启动”包。我的问题是,对于每个重新采样,我希望在受试者内进行随机化,以便不同受试者的观察结果不会混合。这是生成类似于我的数据框的代码。如您所见,我有两个学科内因素(“Num”和“Gram”,我对两者之间的相互作用感兴趣):

Subject = rep(c("S1","S2","S3","S4"),4)
Num     = rep(c("singular","plural"),8) 
Gram    = rep(c("gram","gram","ungram","ungram"),4)
RT      = c(657,775,678,895,887,235,645,916,930,768,890,1016,590,978,450,920)
data    = data.frame(Subject,Num,Gram,RT) 

这是我用来获取经验交互值的代码:

summary(lm(RT ~ Num*Gram, data=data))

如您所见,我的两个因素之间的交互作用是-348。我想得到这个统计数据的引导置信区间,我可以使用“boot”包生成它:

# You need the following packages
install.packages("car") 
install.packages("MASS")
install.packages("boot")
library("car")
library("MASS")
library("boot")

#Function to create the statistic to be boostrapped
boot.huber <- function(data, indices) 
data <- data[indices, ] #select obs. in bootstrap sample
mod <- lm(RT ~ Num*Gram, data=data)
coefficients(mod)       #return coefficient vector


#Generate bootstrap estimate
data.boot <- boot(data, boot.huber, 1999)

#Get confidence interval
boot.ci(data.boot, index=4, type=c("norm", "perc", "bca"),conf=0.95) #4 gets the CI for the interaction

我的问题是,我认为应该在不混合单个受试者观察的情况下生成重新采样:也就是说,要生成新的重新采样,来自受试者 1 (S1) 的观察应该在受试者 1 内混洗,而不是将它们与来自主题 2 等的观察结果......我不知道“boot”是如何进行重采样的(我阅读了文档但不明白函数是如何做到的)

有谁知道我如何确保“引导”使用的重采样过程尊重主题级别信息?

非常感谢您的帮助/建议!

【问题讨论】:

+1 第一个问题很好,但你也应该删除另一个版本 migrated from CrossValidated。 @Thomas。糟糕,我忘记了!它现在被删除了:) 【参考方案1】:

只需像这样修改您对boot() 的调用:

data.boot <- boot(data, boot.huber, 1999, strata=data$Subject)

?boot 提供了strata= 参数的此描述,它完全符合您的要求:

strata:一个整数向量或因子,用于指定地层 多样本问题。这可以指定为任何 模拟,但在“sim = "parametric"”时被忽略。什么时候 “strata”是为非参数引导程序提供的, 模拟在指定的地层内完成。


补充说明:

要确认它是否按您的意愿工作,您可以调用debugonce(boot),运行上面的调用,然后逐步调试调试器直到对象i(其行包含用于重新采样@987654328 行的索引@ 来创建每个 bootstrap resample) 已经赋值了,然后看一下。

debugonce(boot)
data.boot <- boot(data, boot.huber, 1999, strata=data$Subject)
# Browse[2]>
## [Press return 34 times]
# Browse[2]> head(i)
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
# [1,]    9   10   11   16    9   14   15   16    9     2    15    16     1    10
# [2,]    9   14    7   12    5    6   15    4   13     6    11    16    13     6
# [3,]    5   10   15   16    9    6    3    4    1     2    15    12     5     6
# [4,]    5   10   11    4    9    6   15   16    9    14    11    16     5     2
# [5,]    5   10    3    4    1   10   15   16    9     6     3     8    13    14
# [6,]   13   10    3   12    5   10    3    4    5    14     7    16     5    14
#      [,15] [,16]
# [1,]     7     8
# [2,]    11    16
# [3,]     3    16
# [4,]     3     8
# [5,]     7     8
# [6,]     7    12

(您可以随时输入Q退出调试器。)

【讨论】:

感谢@Josh,这正是我想要的!而且调试技巧超级好用! @SolLago -- 很高兴能够提供帮助。调试位对我来说几乎是必不可少的。至少我从来没有能够让自己使用strata 论点,而无需窥视“引擎盖下”以向自己保证它正在做我想做的事情。 理论上,我发现这里的参考资料很有用:stats.stackexchange.com/questions/43185/…

以上是关于如何引导尊重主题内信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确链接 wordpress 主题下的引导脚本?

为啥桌面版 Safari 15 不尊重我的主题颜色设置?

使用 Java 返回 OBIEE 主题区域和受尊重的表

黑苹果 OpenCore 引导制作开机主题教程

如何在 JS 项目中使用 Wrap Bootstrap?我有一个引导主题,但不清楚如何将其添加到项目中

Wix3.7 自定义引导程序不显示主题库中的 WPF 主题