R中的Beta分布拟合 - 各种尝试

时间:2017-12-21 10:34:49

标签: r distribution mle model-fitting

我需要根据我的数据拟合自定义概率密度(基于对称β分布B(形状,形状),其中两个参数shape1和shape2相同)。 麻烦的是,在处理普通的对称beta分布时,我也遇到了一些问题。 请考虑帖子末尾的代码。 在代码中,dbeta1是shape1 = shape2 = shape的beta分布的密度。 在代码中,dbeta2是明确写出的相同数量,没有标准化因子(如果我们谈论最大化数量,这根本不重要)。

然后根据Beta(0.2,0.2)生成一些随机数,我尝试使用

估计形状参数

1)来自MASS的fitdistr

2)mle from stats4

结果:一般来说,当我使用dbeta2代替dbeta1时,我对形状参数有无意义的估计,我不明白为什么。 最重要的是,mle与dbeta2崩溃,并且我常常遇到数值问题,这取决于我如何为随机数的x序列播种。

我一定是误会了,所以任何建议都值得赞赏。

library(MASS)
library(stats4)

dbeta1 <- function(x, shape, ...)
  dbeta(x, shape, shape, ...)

dbeta2 <- function(x, shape){
  res <- x^(shape-1)*(1-x)^(shape-1)
  return(res)
}

LL1 <- function(shape){
  R <- dbeta1(x, shape)
  res <- -sum(log(R))
  return(res)
}

LL2 <- function(shape){
  R <- dbeta2(x, shape)
  res <- -sum(log(R))
  return(res)
}

set.seed(124)
x <- rbeta(1000, 0.2, 0.2)

fit_dbeta1 <- fitdistr( x , dbeta1, start=list(shape=0.5) ,       method="Brent", lower=c(0), upper=c(1))
print("estimate of shape from fit_dbeta1 is")
print(fit_dbeta1$estimate)

fit_dbeta2 <- fitdistr( x , dbeta2, start=list(shape=0.5) , method="Brent", lower=c(0), upper=c(1))
print("estimate of shape from fit_dbeta2 is")
print(fit_dbeta2$estimate)

fit_LL1 <- mle(LL1, start=list(shape=0.5))
print("estimate of from fit_LL1")
print(summary(fit_LL1))

## this does not work
fit_LL2 <- mle(LL2, start=list(shape=0.5))

1 个答案:

答案 0 :(得分:0)

嗯,我明白了这个问题。丢失dbeta2中的归一化因子是个问题,因为这个数量也取决于形状。 如果我使用

dbeta2 <- function(x, shape){


res <- x^(shape-1)*(1-x)^(shape-1)/beta(shape, shape)

return(res)

}

然后结果是一致的。