【问题标题】:Gamma density plot: dgamma working while own function returning error伽玛密度图:dgamma 工作,而自己的函数返回错误
【发布时间】:2016-02-18 18:03:26
【问题描述】:

我正在尝试为参数(形状)alfa=3457 和(速率)beta=84 绘制 Gamma 密度函数。如果我这样做:

curve(dgamma(x,shape=3457,rate=84),from=35,to=50,xlab="posterior theta",ylab="density")

一切正常,我得到的密度集中在 ~41。而如果我首先将密度构造为:

para_density = function(x,s=3457,r=84,N) ((r^s)/(gamma(s)))*x^(s-1)*exp(-r*x)

然后绘制它:

curve(para_density(x,s=3457,r=84,N=N),from=0,to=100)

R 告诉我 gamma(s) 返回 Inf,考虑到它的含义,这是明智的。

为什么我可以使用 plot 和 dgamma 函数以相同的参数化绘制它?

提前谢谢大家。

【问题讨论】:

    标签: r plot gamma-function


    【解决方案1】:

    好吧,那就用对数吧

    代码(未经测试!)

    mygamma <- function(x, s, r) {
        l <- s*log(r) - lgamma(s) + (s-1.0)*log(x) - x*r
        exp(l)
    }
    

    更新

    是的,它有效

    library(ggplot2)
    
    p <- ggplot(data = data.frame(x = 0), mapping = aes(x = x))
    p <- p + stat_function(fun = function(x) dgamma(x,shape=3457,rate=84))
    p <- p + stat_function(fun = function(x) mygamma(x,s=3457,r=84))
    p <- p + xlim(35.0, 50.0)
    print(p)
    

    【讨论】:

    • 谢谢 Severin,我考虑过使用日志,但我的下一个问题是,当 alfa 太大时,R 是否使用 log-Gamma 作为选项,因为我可以用它的密度函数绘制它(我找不到 R 用于 Gamma 密度的底层代码)?看R帮助功能好像不是这样的……
    • @GiacomoCapelli 坦率地说,我不知道它是如何在内部完成的。另一种选择是像斯特林渐近和仔细组合术语以避免溢出
    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多