【问题标题】:Quadrature to approximate a transformed beta distribution in R求求近似于 R 中变换后的 beta 分布
【发布时间】:2013-06-04 12:35:38
【问题描述】:

我正在使用 R 运行一个模拟,在该模拟中我使用似然比检验来比较两个嵌套的项目响应模型。 LRT 的一个版本使用联合似然函数 L(θ,ρ),而另一个版本使用边际似然函数 L(ρ)。我想在 f(θ) 上积分 L(θ,ρ) 以获得边际似然 L(ρ)。我有两个条件:其中一个,f(θ) 是标准正态(μ=0,σ=1),我的理解是我可以选择一些横坐标点,比如 20 或 30,并使用 Gauss-Hermite正交来近似这个密度。但在另一种情况下,f(θ) 是线性变换的 beta 分布 (a=1.25,b=10),其中线性变换 B'=11.14*(B-0.11) 使得 B' 也具有(大约) μ=0,σ=1。

我对如何为 beta 分布实现正交感到很困惑,但是线性变换让我更加困惑。我的问题有三个:(1)当 θ 分布为这种线性变换的 beta 分布时,我可以使用正交的一些变化来近似 f(θ),(2)我将如何在 R 中实现它,以及(3)这是一个荒谬的时间浪费,以至于有明显更快更好的方法来完成这项任务? (我尝试编写自己的数值逼近函数,但发现我的实现仅限于 R 语言,速度太慢而无法满足。)

谢谢!

【问题讨论】:

    标签: r numerical-integration


    【解决方案1】:

    首先,我假设你可以用实际代码来表达你的 L(θ,ρ) 和 f(θ);否则你有点搞砸了。鉴于该假设,您可以使用integrate 执行必要的计算。这样的事情应该让你开始;只需插入 L 和 f 的表达式即可。

    marglik <- function(rho) {
        integrand <- function(theta, rho) L(theta, rho) * f(theta)
        # set your lower/upper integration limits as appropriate
        integrate(integrand, lower=-5, upper=5, rho=rho)
    }
    

    为此,您的被积函数必须矢量化;即,给定theta 的向量输入,它必须返回一个输出向量。如果您的代码不符合要求,您可以在被积函数上使用Vectorize,然后再将其传递给integrate

    integrand <- Vectorize(integrand, "theta")
    


    编辑:不确定您是否还询问如何为转换后的 beta 分布定义 f(θ);对于处理联合和边际可能性的人来说,这似乎相当基本。但如果你是,那么在给定 f(B) 的情况下,B' = a*B + b 的密度是

    f'(B') = f(B)/a = f((B' - b)/a) / a

    所以在你的情况下,f(theta)dbeta(theta/11.14 + 0.11, 1.25, 10) / 11.14

    【讨论】:

    • 谢谢您,这非常有用!我确实有用实际代码表示的 L(θ,ρ) 和 f(θ)。我得到了基于 L(θ,ρ) 所需的所有结果,我只是很难弄清楚如何从 L(θ,ρ) 到 L(ρ)。所以我什至不需要走正交路线;很高兴知道!我会等着看是否有人有不同的感觉,如果没有,我会将其标记为已接受的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 2016-01-22
    • 1970-01-01
    • 2018-01-20
    • 2012-07-17
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多