2013-03-25 189 views
1

我试图通过使用总计数和beta分布来制定先验。在R中使用Beta.Select函数(事先估计)

我有以下记载:

quantile(df$row, probs=c(0.00001, 0.5, 0.99999)) 

quantile1 <- list(p=0.5, x=8) 
quantile2 <- list(p=0.99999, x=10) 
quantile3 <- list(p=0.00001, x=1) 

library("LearnBayes") 
findBeta <- function(quantile1,quantile2,quantile3) 

quantile1_p <- quantile1[[1]]; quantile1_q <- quantile1[[2]] 
quantile2_p <- quantile2[[1]]; quantile2_q <- quantile2[[2]] 
quantile3_p <- quantile3[[1]]; quantile3_q <- quantile3[[2]] 

priorA <- beta.select(list(p=0.5, x=8), list(p=0.99999, x=10)) 

,一旦我试图计算使用beta.select功能Priora的我得到以下错误:

Error in if (p0 < p) m.hi = m0 else m.lo = m0 : 
    missing value where TRUE/FALSE needed 
In addition: Warning message: 
In pbeta(x, K * m0, K * (1 - m0)) : NaNs produced 

我只是无法摆脱的错误,不知道如何处理它。迫切需要帮助。

+0

什么是'df'?也许是一个'dput(df)'? – 2013-03-25 06:20:38

+0

对于beta分布值应该介于0和<1之间。在你的例子中,0.5分位数是x = 8,0.9999分位数是x = 10 - 所以你会得到错误信息。 – 2013-03-25 06:28:36

回答

1

我在猜测(完全凭空调)你正在处理百分比。在这种情况下,要使用x/100

beta.select(list(p=0.5, x=.08), list(p=0.9, x=.10)) 
# [1] 28.02 318.74 

无论哪种方式,而这将是很好的beta.select抛出一个更合适的错误信息(或者说,要在那里有一个错误校验),根问题在于你的x超出了范围。 (正如@Didzis指出的,beta dist的区间是[0, 1]

+0

是的,我想到了。由于我正在使用Beta版本作为配合,因此我不得不重新计算贝叶斯分布的发生。在循环中的某些位置,beta.select函数要么估计负值,要么估计值高于1,这对分布是不可能的。 谢谢你的回应。 – user2206363 2013-03-25 18:13:25