使用 R INLA 超参数 to.theta 和 from.theta 函数
Using R INLA hyperparameter to.theta and from.theta functions
R-INLA
模型超参数具有 to.theta
和 from.theta
函数,似乎用于在不同参数化之间进行转换。使用这些转换函数会很方便,但是如何使用呢?
示例 ar1
来自 ar1
文档 (http://www.math.ntnu.no/inla/r-inla.org/doc/latent/ar1.pdf):
The parameter rho is represented as theta_2 = log((1 + rho)/(1 - rho))
再往下 hyper
,theta2
我们有 to.theta 'function(x) log((1+x)/(1-x))'
。如果我们可以使用它在 rho 和 theta_2.
之间进行转换,那就太好了
让我们尝试使用一个例子
library(INLA)
# Example from ar1 documentation (http://www.math.ntnu.no/inla/r-inla.org/doc/latent/ar1.pdf)
#simulate data
n = 100
rho = 0.8
prec = 10
## note that the marginal precision would be
marg.prec = prec * (1-rho^2)
E=sample(c(5,4,10,12),size=n,replace=T)
eta = as.vector(arima.sim(list(order = c(1,0,0), ar = rho), n = n,sd=sqrt(1/prec)))
y=rpois(n,E*exp(eta))
data = list(y=y, z=1:n, E=E)
## fit the model
formula = y~f(z,model="ar1")
result = inla(formula,family="poisson", data = data, E=E)
运行良好。
我们可以这样使用 to.theta
吗?
formula.to.theta = y~f(z,model="ar1",
hyper = list(rho = list(initial = to.theta(0.25))))
result = inla(formula.to.theta,family="poisson", data = data, E=E)
# Error in to.theta(0.25) : could not find function "to.theta"
所以我们不能那样使用它。是否有另一种指定 formula.to.theta
可行的方法?
很确定您问题的答案是 "no"。文档说,并不是说包中有这些名称的函数,而是 hyper
超参数元素将具有文档中给定的那些名称的函数。没有理由认为在 formula.
之后粘贴这些名称会产生有意义的功能。以下是如何在特定调用 f
函数的环境中检查 from.theta
的值:
library(INLA)
eval( f(z, model = "ar1") )$hyper$theta3$from.theta
===== result ========
function (x)
x
<environment: 0x7fdda6214040>
attr(,"inla.read.only")
[1] TRUE
f( , "ar1") 的结果实际上有三个 theta
,每个都有一个 to 和 from 函数。您可能正在尝试更改没有 attr(,"inla.read.only")
值 TRUE
.
的 hyper$thetax$param
值
执行此操作可能会为您提供更多信息:
eval( f(z, model = "ar1") )$hyper
R-INLA
模型超参数具有 to.theta
和 from.theta
函数,似乎用于在不同参数化之间进行转换。使用这些转换函数会很方便,但是如何使用呢?
示例 ar1
来自 ar1
文档 (http://www.math.ntnu.no/inla/r-inla.org/doc/latent/ar1.pdf):
The parameter rho is represented as theta_2 = log((1 + rho)/(1 - rho))
再往下 hyper
,theta2
我们有 to.theta 'function(x) log((1+x)/(1-x))'
。如果我们可以使用它在 rho 和 theta_2.
让我们尝试使用一个例子
library(INLA)
# Example from ar1 documentation (http://www.math.ntnu.no/inla/r-inla.org/doc/latent/ar1.pdf)
#simulate data
n = 100
rho = 0.8
prec = 10
## note that the marginal precision would be
marg.prec = prec * (1-rho^2)
E=sample(c(5,4,10,12),size=n,replace=T)
eta = as.vector(arima.sim(list(order = c(1,0,0), ar = rho), n = n,sd=sqrt(1/prec)))
y=rpois(n,E*exp(eta))
data = list(y=y, z=1:n, E=E)
## fit the model
formula = y~f(z,model="ar1")
result = inla(formula,family="poisson", data = data, E=E)
运行良好。
我们可以这样使用 to.theta
吗?
formula.to.theta = y~f(z,model="ar1",
hyper = list(rho = list(initial = to.theta(0.25))))
result = inla(formula.to.theta,family="poisson", data = data, E=E)
# Error in to.theta(0.25) : could not find function "to.theta"
所以我们不能那样使用它。是否有另一种指定 formula.to.theta
可行的方法?
很确定您问题的答案是 "no"。文档说,并不是说包中有这些名称的函数,而是 hyper
超参数元素将具有文档中给定的那些名称的函数。没有理由认为在 formula.
之后粘贴这些名称会产生有意义的功能。以下是如何在特定调用 f
函数的环境中检查 from.theta
的值:
library(INLA)
eval( f(z, model = "ar1") )$hyper$theta3$from.theta
===== result ========
function (x)
x
<environment: 0x7fdda6214040>
attr(,"inla.read.only")
[1] TRUE
f( , "ar1") 的结果实际上有三个 theta
,每个都有一个 to 和 from 函数。您可能正在尝试更改没有 attr(,"inla.read.only")
值 TRUE
.
hyper$thetax$param
值
执行此操作可能会为您提供更多信息:
eval( f(z, model = "ar1") )$hyper