正交以近似R中转换的β分布

时间:2013-06-04 12:35:39

标签: r numerical-integration

我正在使用R来运行模拟,其中我使用似然比检验来比较两个嵌套项目响应模型。一个版本的LRT使用联合似然函数L(θ,ρ),另一个版本使用边际似然函数L(ρ)。我想将L(θ,ρ)积分在f(θ)上以获得边际似然L(ρ)。我有两个条件:在一个中,f(θ)是标准正态(μ= 0,σ= 1),并且我的理解是,我可以只挑一些横坐标点的,比如说20或30,并使用高斯 - 埃尔米特正交以近似该密度。但在其它条件中,f(θ)是一个线性变换β分布(A = 1.25,B = 10),其中,所述线性变换B '= 11.14 *(B-0.11)是这样的,B' 也具有(约) μ= 0,σ= 1。

我对如何实现β分布的正交感到困惑,但线性变换让我更加困惑。我的问题有三个方面:(1)可予使用正交的一些变化时θ被分配,因为这线性变换β分布来近似F(θ),(2)如何将我中的R实现这一点,和(3)是这样的一个荒谬的浪费时间,以便有一个明显更快更好的方法来完成这项任务? (我尝试编写自己的数值逼近函数,但发现我的实现,仅限于R语言,只是太慢而不够。)

谢谢!

1 个答案:

答案 0 :(得分: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之前对{1}}使用integrate

integrand <- Vectorize(integrand, "theta")

<小时/> 编辑:不确定你是否也在询问如何为变换后的β分布定义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