伽马分布怎么拟合/

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了伽马分布怎么拟合/相关的知识,希望对你有一定的参考价值。

%假定序列服从 分布,获得参数 的估计
%利用参数 估计,得到一个累积分布函数
%利用 法进行分布检验
% 表明数据服从 分布, 为置信水平
(‘该序列服从 分布’) %输出
(‘该序列不服从 分布’)
gamfit
gamcdf
把这两函数的意思看懂了就知道
可以在matlab里面看他函数的功能
一列数Z,a=0.05是信度水平
利用gamfit 得到干伽马分布的两个参数
必须先看伽马分布的函数式子
参考技术A 还可以参考kstest2这个函数

高斯和伽马分布的混合

【中文标题】高斯和伽马分布的混合【英文标题】:Mixture of Gaussian and Gamma distribution 【发布时间】:2013-03-27 05:49:00 【问题描述】:

我正在寻找 R 中的一些脚本/包(Python 也会这样做),以从中找出分量分布参数。到目前为止我用过 R包“mixtools”将数据建模为高斯混合,但我认为它可以更好地通过伽马加高斯建模。

谢谢

【问题讨论】:

gamlss.mx? 这听起来像tweedy model,在这种情况下package tweedy 可能是一个选项。 @Andrie,我想你的意思是“tweedie” 【参考方案1】:

这是一种可能性:

定义实用函数:

rnormgammamix <- function(n,shape,rate,mean,sd,prob) 
    ifelse(runif(n)<prob,
           rgamma(n,shape,rate),
           rnorm(n,mean,sd))

(这可以提高一点效率...)

dnormgammamix <- function(x,shape,rate,mean,sd,prob,log=FALSE) 
    r <- prob*dgamma(x,shape,rate)+(1-prob)*dnorm(x,mean,sd)
    if (log) log(r) else r

生成虚假数据:

set.seed(101)
r <- rnormgammamix(1000,1.5,2,3,2,0.5)
d <- data.frame(r)

方法 #1:bbmle 包。拟合形状、比率、log 尺度上的标准差、logit 尺度上的概率。

library("bbmle")
m1 <- mle2(r~dnormgammamix(exp(logshape),exp(lograte),mean,exp(logsd),
                     plogis(logitprob)),
     data=d,
     start=list(logshape=0,lograte=0,mean=0,logsd=0,logitprob=0))
cc <- coef(m1)

png("normgam.png")
par(bty="l",las=1)
hist(r,breaks=100,col="gray",freq=FALSE)
rvec <- seq(-2,8,length=101)
pred <- with(as.list(cc),
             dnormgammamix(rvec,exp(logshape),exp(lograte),mean,
                           exp(logsd),plogis(logitprob)))
lines(rvec,pred,col=2,lwd=2)
true <- dnormgammamix(rvec,1.5,2,3,2,0.5)
lines(rvec,true,col=4,lwd=2)
dev.off()

tcc <- with(as.list(cc),
            c(shape=exp(logshape),
              rate=exp(lograte),
              mean=mean,
              sd=exp(logsd),
              prob=plogis(logitprob)))
cbind(tcc,c(1.5,2,3,2,0.5))

拟合是合理的,但参数相差甚远——我认为这个模型在这个参数范围内不是很容易识别(即 Gamma 和 gaussian 分量可以交换)

library("MASS")
ff <- fitdistr(r,dnormgammamix,
     start=list(shape=1,rate=1,mean=0,sd=1,prob=0.5))

cbind(tcc,ff$estimate,c(1.5,2,3,2,0.5))

fitdistr 得到与mle2 相同的结果,这表明我们是 在局部最小值。如果我们从我们得到的真实参数开始 到合理且接近真实参数的东西。

ff2 <- fitdistr(r,dnormgammamix,
     start=list(shape=1.5,rate=2,mean=3,sd=2,prob=0.5))
-logLik(ff2)  ## 1725.994
-logLik(ff)   ## 1755.458

【讨论】:

以上是关于伽马分布怎么拟合/的主要内容,如果未能解决你的问题,请参考以下文章

如何在一个图中绘制拟合图和伽马分布的实际图?

创建归一化的直方图并在 Matlab 上使用伽马分布对其进行拟合

伽马分布为啥叫伽马

高斯伽马分布

高斯和伽马分布的混合

阐述伽马分布的几种类型的特点