正如@whuber所指出的,统计方法在这里并不完全有效。您需要从其他来源推断分布。当您知道分布时,您将进行非线性方程求解练习。表示为参数向量 θ的所选概率分布的分位数函数。您拥有的是以下非线性方程组:fθ
q0.05q0.5q0.95=f(0.05,θ)=f(0.5,θ)=f(0.95,θ)
哪里q是您的分位数。您需要求解该系统才能找到。现在,对于几乎所有3参数分布,您都将找到满足该方程的参数值。对于2参数和1参数分布,该系统是过高确定的,因此没有确切的解决方案。在这种情况下,您可以搜索一组将差异最小化的参数:θ
(q0.05- ˚F(0.05 ,θ ))2+ (q0.5- ˚F(0.5 ,θ ))2+ (q0.95- ˚F(0.95 ,θ ))2
在这里,我选择了二次函数,但是您可以选择任意函数。根据@whuber的评论,您可以分配权重,以便更准确地拟合更重要的分位数。
对于四个或更多参数,系统是不确定的,因此存在无限数量的解。
这是一些示例R代码,说明了此方法。出于演示目的,我从VGAM软件包的Singh-Maddala分布中生成了分位数。此分布具有3个参数,并用于收入分配建模。
q <- qsinmad(c(0.05,0.5,0.95),2,1,4)
plot(x<-seq(0,2,by=0.01), dsinmad(x, 2, 1, 4),type="l")
points(p<-c(0.05, 0.5, 0.95), dsinmad(p, 2, 1, 4))
现在形成评估非线性方程组的函数:
fn <- function(x,q) q-qsinmad(c(0.05, 0.5, 0.95), x[1], x[2], x[3])
检查真值是否满足以下公式:
> fn(c(2,1,4),q)
[1] 0 0 0
为了解决非线性方程组,我使用nleqslv
了软件包nlqeslv中的函数。
> sol <- nleqslv(c(2.4,1.5,4.3),fn,q=q)
> sol$x
[1] 2.000000 1.000000 4.000001
如我们所见,我们得到了确切的解决方案。现在让我们尝试使对数正态分布适合这些分位数。为此,我们将使用该optim
函数。
> ofn <- function(x,q)sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2)
> osol <- optim(c(1,1),ofn)
> osol$par
[1] -0.905049 0.586334
现在绘制结果
plot(x,dlnorm(x,osol$par[1],osol$par[2]),type="l",col=2)
lines(x,dsinmad(x,2,1,4))
points(p,dsinmad(p,2,1,4))
由此我们立即看到二次函数不是很好。
希望这可以帮助。