在 R 中模拟 [1;5] 范围内的双峰分布

机器算法验证 r 正态分布 模拟 混合分布 双峰
2022-03-27 10:03:43

我想模拟具有 [1;5] 下限/上限的连续数据集/变量,同时确保绘制的分布可以被视为双峰分布。

搜索我的问题,我找到了这个源,它有助于模拟双峰分布,但是,它不应用下限/上限:https ://stats.stackexchange.com/search?q=bimodal+truncated+distribution

相比之下,rtruncnormR 中的函数(来自truncnorm包)帮助我模拟具有下限/上限的正态(但不是双峰)分布。

现在的问题是,我怎样才能将两者结合起来?从理论上讲,我可以只使用第一个链接中的方法,即生成具有两个基本正态分布的双峰分布,然后使用这种方法重新计算绘制的数据(https://stats.stackexchange.com/a/25897/66544)得到我的界限。

或者我可以使用 rtruncnorm 函数生成两个截断的正态分布,然后按照第一个链接的方法将其组合成双峰分布。

但我不确定这些方法中的任何一种在数学上是否合理。

注意:为什么我仍然想要 [1;5] 的范围?真实数据将来自一项调查,其中受访者将以 1-5 的 5 分制回答(连续的,而不是离散的),因此我需要模拟这种有限性。

2个回答

另一种方法是使用 beta 分发。它是有界的[0;1].

所以你只需要将一半的​​模拟样本“移动”到[1;3]另一半[3;5].

这里我使用Beta(2,2)和 Stephan Kolassa 的框架:

nn <- 1e4
set.seed(1)
betas<-rbeta(nn,2,2)
sims <- c(betas[1:(nn/2)]*2+1,
          betas[(nn/2+1):nn]*2+3)


hist(sims)

在此处输入图像描述

最简单的方法是绘制n2截断正态分布的样本,具有一个均值和另一个均值n2来自具有不同均值的截断正态分布的样本。这是一个,特别是具有相同权重的;您还可以通过改变从两个分布中提取的比例来使用不同的权重。

library(truncnorm)

nn <- 1e4
set.seed(1)
sims <- c(rtruncnorm(nn/2, a=1, b=5, mean=2, sd=.5),
                    rtruncnorm(nn/2, a=1, b=5, mean=4, sd=.5))

hist(sims)

直方图