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

问题描述 投票:0回答:1

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

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

1)来自MASS的fitdistr

2)来自stats4的mle

结果:一般来说,当我使用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))
r distribution mle model-fitting
1个回答
0
投票

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

dbeta2 <- function(x, shape){


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

return(res)

}

那么结果是一致的。

© www.soinside.com 2019 - 2024. All rights reserved.