1

我有两个具有已知权重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()

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

任何建议都有帮助。

谢谢

4

1 回答 1

0

有几个 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) 是 0.435 和 0.565,估计的平均值 (mu) 是 10,000 和 10,030,标准差 (sigma) 是 1.836 和 2.034,这与您的预期值很接近。阅读包小插图并微调参数可能会让你更接近。

混合图

于 2021-04-17T15:23:26.717 回答