我需要根据我的数据拟合自定义概率密度(基于对称β分布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))
答案 0 :(得分:0)
嗯,我明白了这个问题。丢失dbeta2中的归一化因子是个问题,因为这个数量也取决于形状。 如果我使用
dbeta2 <- function(x, shape){
res <- x^(shape-1)*(1-x)^(shape-1)/beta(shape, shape)
return(res)
}
然后结果是一致的。