估计具有独立变量的标准偏差缩放的速率


11

我有在我以正态分布变量的测量实验,Y

YN(μ,σ)

但是,先前的实验提供了一些证据,表明标准偏差是自变量的仿射函数,即XσX

σ=a|X|+b

YN(μ,a|X|+b)

我想估计参数和通过取样在的多个值。此外,由于实验的限制,我只能采集有限数量(大约30-40)的样本,并且出于与实验无关的原因,我更愿意以X的多个值进行采样。给定这些约束,可以使用哪些方法来估计abb Y XabYXYXab

实验说明

如果您对我为什么要问上述问题感兴趣,这是额外的信息。我的实验测量听觉和视觉空间知觉。我有一个实验设置,其中我可以显示来自不同位置X的听觉或视觉目标X,并且被摄对象指示目标Y的感知位置Y。随着偏心率的增加(即| X |增大|X|),视觉*和听觉都变得不太精确,我在上面将其建模为σ。最终,我想估计ab对于视觉和听觉来说,所以我知道在空间中一系列位置上每种感觉的精度。这些估计值将用于预测同时显示的视觉和听觉目标的相对权重(类似于此处提出的多感官融合理论:http//www.ncbi.nlm.nih.gov/pubmed/12868643)。

*我知道,当比较中央凹与中央凹空间时,该模型的视觉不准确,但是我的测量仅限于中央凹空间,这是一个不错的近似值。


2
有趣的问题。最好的解决方案可能会考虑您进行此实验的原因。您的最终目标是什么?预测?,和/或估计?您越能告诉我们目的,答案就越好。μaσ
ub

由于SD不能为负,因此它不太可能成为X 的线性函数。您的建议a | X |必须在X = 0时具有最小的V形或最小的V形,这对我来说似乎是不自然的可能性。您确定这是对的吗?
gung-恢复莫妮卡

好点@gung,我过分地简化了我的问题。说是的仿射函数可能更现实。我将编辑我的问题。σ|X|
亚当·博森

@whuber想要这样做的原因有点复杂,但是我会考虑如何解释该实验,并很快在我的问题中添加更多细节。
亚当·博森

1
您是否有充分的理由先验地相信X = 0表示最小SD,并且f(| X |)是单调的?
gung-恢复莫妮卡

Answers:


2

在像您这样的情况下,您有一个相对简单但“非标准”的生成模型,您想为其估计参数,我的第一个想法是使用贝叶斯推理程序(例如Stan)。您给出的描述将非常清晰地转换为Stan模型。

使用RStan(Stan的R接口)的一些示例R代码。

library(rstan)

model_code <- "
data {
    int<lower=0> n; // number of observations
    real y[n];
    real x[n];
}
parameters {
    real mu; // I've assumed mu is to be fit.
             // Move this to the data section if you know the value of mu.
    real<lower=0> a;
    real<lower=0> b;
}
transformed parameters {
    real sigma[n];
    for (i in 1:n) {
        sigma[i] <- a + b * fabs(x[i]);
    }
}
model {
    y ~ normal(mu, sigma);
}
"

# Let's generate some test data with known parameters

mu <- 0
a <- 2
b <- 1

n <- 30
x <- runif(n, -3, 3)
sigma <- a + b * abs(x)
y <- rnorm(n, mu, sigma)

# And now let's fit our model to those "observations"

fit <- stan(model_code=model_code,
            data=list(n=n, x=x, y=y))

print(fit, pars=c("a", "b", "mu"), digits=1)

您将获得如下所示的输出(尽管您的随机数可能与我的不同):

Inference for Stan model: model_code.
4 chains, each with iter=2000; warmup=1000; thin=1; 
post-warmup draws per chain=1000, total post-warmup draws=4000.

   mean se_mean  sd 2.5%  25% 50% 75% 97.5% n_eff Rhat
a   2.3       0 0.7  1.2  1.8 2.2 2.8   3.9  1091    1
b   0.9       0 0.5  0.1  0.6 0.9 1.2   1.9  1194    1
mu  0.1       0 0.6 -1.1 -0.3 0.1 0.5   1.4  1262    1

Samples were drawn using NUTS(diag_e) at Thu Jan 22 14:26:16 2015.
For each parameter, n_eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor on split chains (at 
convergence, Rhat=1).

该模型收敛很好(Rhat = 1),并且在所有情况下有效样本量(n_eff)都相当大,因此在技术水平上该模型的行为良好。,和的最佳估计值(在平均值栏中)也非常接近所提供的估计值。b μabμ


哦,我喜欢这个!我以前从未听说过Stan,感谢您的参考。我最初希望获得一种解析解决方案,但是由于缺乏响应,我怀疑其中是否存在。我倾向于相信您的答案是解决此问题的最佳方法。
亚当·博森

如果存在分析解决方案,这不会完全震惊我,但我一定会感到有些惊讶。使用诸如Stan之类的东西的优点在于,对模型进行更改非常容易-解析解决方案可能会非常严格地限制于给定的模型。
Martin O'Leary

2

您不能期望封闭式,但仍可以写下似然函数并将其数值最大化。您的模型为 然后,对数似然函数(除不依赖参数的项外)变为 且易于编程并提供给数值优化器。

YN(μ,a|x|+b)
l(μ,a,b)=ln(a|xi|+b)12(yiμa|xi|+b)2

在R中,我们可以做

make_lik  <-  function(x,y){
    x  <-  abs(x)
    function(par) {
        mu <- par[1];a  <-  par[2];  b <-  par[3]
        axpb <-  a*x+b
        -sum(log(axpb)) -0.5*sum( ((y-mu)/axpb)^2 )
    }
}

然后模拟一些数据:

> x <-  rep(c(2,4,6,8),10)
> x
 [1] 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4
[39] 6 8
> a <- 1
> b<-  3
> sigma <-  a*x+b
> mu  <-  10
> y  <-  rnorm(40,mu, sd=sigma)

然后使对数似然函数:

> lik <-  make_lik(x,y)
> lik(c(10,1,3))
[1] -99.53438

然后对其进行优化:

> optim(c(9.5,1.2,3.1),fn=function(par)-lik(par))
$par
[1] 9.275943 1.043019 2.392660

$value
[1] 99.12962

$counts
function gradient 
     136       NA 

$convergence
[1] 0

$message
NULL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.