我想模拟的React时间和准确性与一定的相互关系。
这是我的第一个猜测:
n <- 2000
RTs <- brms::rshifted_lnorm(n, meanlog = log(1.3), sdlog = 0.1, shift = 0.5)
acc <- sapply(RTs,
FUN = function(x){
rbinom(
n = 1,
# multiplying by 0.3 should give me a correlation around 0.3... am I right?
prob = boot::inv.logit(x * 0.3),
size = 1
)
}
)
cor(RTs, acc)
然而,所得到的相关性在0左右而不是0.3左右。
我做错了什么?
我看到了这个答案:Simulation of correlated categorical and continuous data,但它模拟分类(可以转换为二项数据)和高斯分布。
2条答案
按热度按时间fnvucqvd1#
这里是一个简单的解决方案,通过保持相关性的模拟。我们需要做的就是以受控的方式生成二进制变量(
acc
)(给定生成的RT
值)。由于所生成的变量值需要保持固定的相关性,因此它们两者都不能作为来自对应分布的独立样本来提取。
如果一个变量中越来越多的高值对应于另一个变量的高值,并且类似地对应于低值,则两个随机向量之间的相关性可以增加。
下面的函数
gen.correlated.binary.data()
从要生成的目标向量acc
中的低数量的1开始,并逐渐增加对应于变量RT
的高值的1的数量(通过排序来确保)。这使
RT
向量保持不变,但逐渐增加变量之间的相关性。现在,一旦达到所需的相关值,就立即停止-这将创建acc
向量中所需的对排序和1的比例。最后,通过保持对应性(从而保持相关常数)来混洗向量,以生成随机
acc
向量。现在,从生成的
RT
向量开始,生成acc
向量:下图显示了生成的变量值的分布沿着相关性和
stat_smooth
拟合线。x1c 0d1x下一个动画显示了如何修改
acc
向量以实现相关性(0.5
这次是通过逐渐增加相关性),给定RT
向量:注意,
RT
矢量以及RT
的分布是固定的,只有acc
分布发生变化,因此相关性增加。5fjcxozz2#
谢谢你的评论和精彩的回答。
然而,我尝试了一种不同的方法,包括模拟多元高斯,然后将其转换如下:
这样,相关性在0.4左右