Оцените скорость, с которой стандартное отклонение масштабируется независимой переменной


11

У меня есть эксперимент, в котором я провожу измерения нормально распределенной переменной Y ,

YN(μ,σ)

Однако предыдущие эксперименты предоставили некоторые доказательства того, что стандартное отклонение σ является аффинной функцией независимой переменной X , т.е.

σ=a|X|+b

YN(μ,a|X|+b)

Я хотел бы оценить параметры и б путем выборки Y на множество значений X . Кроме того, из-за ограничений эксперимента я могу взять только ограниченное (примерно 30-40) количество образцов Y и предпочел бы брать образцы при нескольких значениях X по несвязанным экспериментальным причинам. Учитывая эти ограничения, какие методы доступны для оценки a и b ?abYXYXab

Описание эксперимента

Это дополнительная информация, если вам интересно, почему я задаю вышеуказанный вопрос. Мой эксперимент измеряет слуховое и визуальное пространственное восприятие. У меня есть настройки эксперимента , в котором можно представить либо слуховые или визуальные цели из разных мест, , и предметы указывают на воспринимаемое расположение мишени, Y . И зрение *, и прослушивание становятся менее точными с увеличением эксцентриситета (т. Е. Увеличением | X | ), которое я моделирую как σ выше. В конечном счете, я хотел бы оценить а и бXY|X|σabкак для зрения, так и для прослушивания, поэтому я знаю точность каждого ощущения в разных местах пространства. Эти оценки будут использоваться для прогнозирования относительного веса визуальных и слуховых целей, когда они представлены одновременно (аналогично теории мультисенсорной интеграции, представленной здесь: http://www.ncbi.nlm.nih.gov/pubmed/12868643 ).

* Я знаю, что эта модель неточна для зрения при сравнении фовеального и внефовеального пространства, но мои измерения ограничены исключительно внефовеальным пространством, где это приличное приближение.


2
μaσ

Поскольку SD не может быть отрицательным, вряд ли это будет линейная функция от X. Ваше предположение, a | X |, требует более узкой или более широкой V-образной формы с минимумом при X = 0, что кажется мне довольно неестественной возможностью , Вы уверены, что это правильно?
gung - Восстановить Монику

σ|X|

@whuber Причина, по которой это нужно, немного сложна, но я подумаю, как объяснить эксперимент, и вскоре добавлю еще несколько деталей к моему вопросу.
Адам Бозен

1
Есть ли у вас веские основания априори полагать, что X = 0 представляет минимальное SD, и что f (| X |) является монотонным?
gung - Восстановить Монику

Ответы:


2

В случае, подобном вашему, когда у вас есть относительно простая, но «нестандартная» порождающая модель, для которой вы хотите оценить параметры, моей первой мыслью будет использование программы байесовского вывода, такой как Stan . Описание, которое вы дали, очень точно переведет модель Стэна.

Пример кода R с использованием RStan (интерфейс R для Stan).

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).

abμ


О, мне это нравится! Я раньше не слышал о Стэне, спасибо за ссылку. Сначала я надеялся на аналитическое решение, но, учитывая отсутствие ответов, я сомневаюсь, что оно существует. Я склонен полагать, что ваш ответ - лучший подход к этой проблеме.
Адам Бозен

Меня бы не потрясло, если бы существовало аналитическое решение, но я бы, конечно, был немного удивлен. Сила использования чего-то вроде Стэна состоит в том, что очень легко вносить изменения в вашу модель - аналитическое решение, вероятно, будет очень сильно ограничено данной моделью.
Мартин О'Лири

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.