微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在给定分位数值的情况下估计 2 个法线的混合分布的参数

如何解决在给定分位数值的情况下估计 2 个法线的混合分布的参数

我有两个已知权重 0.60.4 的法线的混合分布。

我知道参数的真实值 - 在这种情况下,第一个是平均值 = 10030,sd = 2 的正常值,第二个是平均值为 10000 且 sd = 1 的正常值 - 但我希望能够估计它们来自分位数值。

如果给我 23 个分位数

0.010 0.025 0.050 0.100 0.150 0.200 0.250 0.300 0.350 0.400 0.450 0.500 0.550 0.600 0.650
0.700 0.750 0.800 0.850 0.900 0.950 0.975 0.990

和他们的价值

9998.040  9998.466  9998.850  9999.326  9999.681 10000.000 10000.319 10000.674 10001.150
10004.895 10027.234 10028.065 10028.651 10029.139 10029.579 10030.000 10030.421 10030.861
10031.349 10031.935 10032.766 10033.463 10034.256

在 R 中估计每个分布的均值和方差参数的最佳方法是什么?

我尝试过使用最小二乘法和 nls 函数进行估算

nls(quantiles~weights[1]*pnorm(rvals,mean1,sd1),start = list(mean1=startm1,sd1=startsd1,startm2,startsd2))

我也尝试过使用 rootSolve::multiroot()

我试过一次求解一个参数或求解所有四个参数。到目前为止,获得良好估计的唯一希望是给出非常接近真实参数的起始值。

任何建议都有帮助。

谢谢

解决方法

有几个 R 包可以执行混合分析。以下是使用 mixtools 的示例:

library(mixtools)
mix <- normalmixEM(rvals)   # Using all default parameters
mix
# number of iterations= 5 
# $x
#  [1]  9998.040  9998.466  9998.850  9999.326  9999.681 10000.000 10000.319 10000.674 10001.150 10004.895 10027.234 10028.065 10028.651 10029.139 10029.579 10030.000 10030.421
# [18] 10030.861 10031.349 10031.935 10032.766 10033.463 10034.256
# 
# $lambda
# [1] 0.4347826 0.5652174
# 
# $mu
# [1] 10000.14 10030.59
# 
# $sigma
# [1] 1.836207 2.034118
# 
# $loglik
# [1] -63.6896
# 
# $posterior
#    . . . 
plot(mix,which=2)

您可以看到估计的权重 (lambda) 分别为 .435 和 0.565,估计的均值 (mu) 分别为 10,000 和 10,030,标准差 (sigma) 分别为 1.836 和 2.034,与您的预期值接近。阅读包装小插图并微调参数可能会让您更接近。

Mixture Plot

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。