r - 在 R 中拟合多峰分布;从拟合分布生成新值

标签 r distribution random mixed-models

我正在处理小样本数据:

>dput(dat.demand2050.unique)  
c(79, 56, 69, 61, 53, 73, 72, 86, 75, 68, 74.2, 80, 65.6, 60, 54)    

其密度分布如下所示:
pdf of data

我知道这些值来自两个状态 - 低和高 - 并假设基础过程是正常的,我使用 mixtools 包来拟合双峰分布:

set.seed(99)  
dat.demand2050.mixmdl <- normalmixEM(dat.demand2050.unique, lambda=c(0.3,0.7), mu=c(60,70), k=2)

这给了我以下结果:
enter image description here
(实线是拟合曲线,虚线是原始密度)。

# get the parameters of the mixture
dat.demand2050.mixmdl.prop <- dat.demand2050.mixmdl$lambda    #mix proportions
dat.demand2050.mixmdl.means <- dat.demand2050.mixmdl$mu    #modal means
dat.demand2050.mixmdl.dev <- dat.demand2050.mixmdl$sigma   #modal std dev  

混合参数为:

>dat.demand2050.mixmdl.prop  #mix proportions  
[1] 0.2783939 0.7216061  
>dat.demand2050.mixmdl.means  #modal means  
[1] 56.21150 73.08389  
>dat.demand2050.mixmdl.dev  #modal std dev  
[1] 3.098292 6.413906 

我有以下问题:

  1. 为了生成一组近似基础分布的新值,我的方法正确还是有更好的工作流程?
  2. 如果我的方法正确,我如何使用该结果从该混合分布中生成一组随机值?

最佳答案

你的样本量对于拟合混合物来说有点可疑,但没关系。您可以按如下方式从拟合的混合物中取样:

probs <- dat.demand2050.mixmdl$lambda
m <- dat.demand2050.mixmdl$mu
s <- at.demand2050.mixmdl$sigma

N <- 1e5
grp <- sample(length(probs), N, replace=TRUE, prob=probs)
x <- rnorm(N, m[grp], s[grp])

关于r - 在 R 中拟合多峰分布;从拟合分布生成新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17924976/

相关文章:

swift - Swift 中两个不同的随机生成数

r - 如何在不同大小的循环中复制特定的随机抽取?

r - 在 Linux 上的 Azure 上部署 R (centos 8.2.2004)

iphone - 通过网站分发 iPad 应用程序(.ipa 格式文件)

r - R中正态分布函数的逆/逆

Python:保持最小距离的范围内的随机数字列表

r - 如何在具有多个预测变量的混合模型中绘制随机截距和斜率?

r - 使用 "expression"使用数据帧中的值创建带有斜体的标签列表

ios - iTunes Connect:带有特殊字符的公司名称

bash - 在 bash 中生成不重复的随机数序列