我想将伽玛和正态分布的混合物加到R中的数据中。
数据:
dput(A)
0.0838, 0.081, 0.0816, 0.0838, 0.0824, 0.0871, 0.0899, 0.0938, 0.099, 0.1018, 0.0998, 0.1, 0.0955, 0.0972
基于我相信的数据(通过查看直方图),伽马和正态分布的混合是最佳候选。
我使用以下代码来使用fitdistrplus软件包中的fitdist函数拟合混合分布:
# Define the quantile
qgm_normal <- function(p,
w_gm=0.5,
par_shape=2,
par_rate=1,
mean=0,
sd=1) {
w_normal=1-w_gm
qgm=qgamma(p,shape=shape, rate=rate)
qnormal=qnorm(p,mean =mean,sd = sd)
return(w_gm*qgm+w_normal*qnormal)
}
# Define the distribution function
pgm_normal <- function(q,
w_gm=0.5,
par_shape=2,
par_rate=1,
mean=0,
sd=1) {
w_normal=1-w_gm
pgm=pgamma(q,shape=shape, rate=rate)
pnormal=pnorm(q,mean =mean,sd = sd)
return(w_gm*pgm+w_norm*pnormal)
}
# Define the density
dgm_normal <-function(x,
w_gm=0.5,
par_shape=2,
par_rate=1,
mean=0,
sd=1) {
w_normal=1-w_gm
dgm=dgamma(x,shape=par_shape, rate=par_rate)
dnormal=dnorm(x,mean =mean,sd = sd)
return(w_gm*dgm+w_normal*dnormal)
}
fit_A <- fitdist(A, "gm_normal",start=list(w_gm=0.5, par_shape=2,par_rate=1, mean=0, sd=1))
我已阅读此处发布的问题R - fitting a mixture distribution with fitdistrplus,但我收到了以下错误:
Error in fitdist(A, "gm_normal", start = list(w_gm = 0.5, par_shape = 100, : the function mle failed to estimate the parameters,
with the error code 1
我可能没有完全理解那里发布的解决方案。如果有人能提供一些帮助,将非常感激。提前谢谢!
答案 0 :(得分:0)
对于任何想做类似事情的人,如果您将 par_shape
和 par_rate
分别替换为 shape
和 rate
,此代码示例是有效的。
问题是函数调用中的 rate
和 shape
参数未定义,因为他将它们表示为 par_rate
和 par_shape
。
同时将 lower=c(0,0,0,0,0), upper=c(1,1000,1000,1000,1000)
添加到 fitdist
调用以确保混合参数保持在 [0,1]。祝你好运。