用参数有界的R拟合经验分布到理论分布?

ghhkc1vu  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(125)

简介:我有10个号码。我想适合genpareto。


的数据
问题:模型已经过数学处理,但未提供形状(绿色形状)。我想在拟合过程中对形状参数设置界限。根据形状参数的不同,曲线得到不同的效果。从自动结果中,我们得到小于零的形状参数值(绿色形状)。我正在寻找一种方法,如何得到红色的曲线形状。匹配参数应为interval(0,0.5)。代码可以在下面找到:

library("fitdistrplus")
library("actuar")
dataPar=c(17.5, 17.8, 22.4, 22.6 ,25, 25.2, 27.5, 30, 32.4, 32.5)
fitdist(dataPar, "genpareto", lower=c(-Inf, 0, -Inf), start=list(shape1 = min(dataPar), shape2 = 1,  rate = 1), upper=c(+Inf, 0.5, +Inf))

字符串

bmp9r5qi

bmp9r5qi1#

你的问题有几个重要的问题:

  1. Klugman、Panjer和Willmot的广义Pareto分布--也就是Goulet在actuar中使用的分布--是一个三参数分布。你不会得到一个很好的拟合只有10个数据点。
    1.有两个形状参数。在R中,shape1对应于α,shape2对应于τ。您没有明确表示参照的是哪个形状参数。
    1.形状参数是常数。绘制形状曲线没有任何意义。您可以根据拟合的形状和比例参数绘制CDF。
    1.你的曲线似乎是在绘制一个生存函数,而不是CDF,因为它随着概率的增加而减少。
    话虽如此,这里有一个可能的例子,你打算做什么。
    举例来说:
# Data
dataPar <- c(17.5, 17.8, 22.4, 22.6 ,25, 25.2, 27.5, 30, 32.4, 32.5)

# Negative Loglikelihood function
nLL <- function(par, data) {
  -sum(actuar::dgenpareto(data, par[1L], par[2L], scale = par[3L], log = TRUE))
}

# General-purpose robust non-linear optimization package
library(nloptr)

fit <- nloptr(c(1, 2, 3), eval_f = nLL, data = dataPar,
              opts = list(algorithm = "NLOPT_LN_NELDERMEAD", maxeval = 1e5L))

fit

Call:
nloptr(x0 = c(1, 2, 3), eval_f = nLL, opts = list(algorithm = "NLOPT_LN_NELDERMEAD", 
    maxeval = 100000L), data = dataPar)

Minimization using NLopt version 2.7.1 

NLopt solver status: 4 ( NLOPT_XTOL_REACHED: Optimization stopped because xtol_rel or xtol_abs 
(above) was reached. )

Number of Iterations....: 1185 
Termination conditions:  maxeval: 100000 
Number of inequality constraints:  0 
Number of equality constraints:    0 
Optimal value of objective function:  30.5855340735935 
Optimal value of controls: 571935643 23.56514 613707172

# Create y elements
yy <- seq(17.5, 35, 0.5)
# Calculate survival function at each y element for x value
xx <- actuar::pgenpareto(yy, fit$solution[1], fit$solution[2], scale = fit$solution[3], lower.tail = FALSE)
# Plot similar to OP
plot(xx, yy, type = "o", ylim = c(17.5, 35))

# Add rough empirical survival by plotting dataPar against 0.95, 0.85, etc.
ecdfDP <- seq(0.95, 0.05, -0.1)
points(ecdfDP, dataPar, col = "red", pch = 16L)

字符串
x1c 0d1x的数据
该图看起来与您发布的图相似,经验数据点与拟合的生存率相似,这表明拟合合理。然而,参数非常大,可能会发散,这表明广义Pareto不是适合此数据的族。考虑一个更简约的分布,如Pareto或Weibull分布,如果不是指数分布的话。

相关问题