Оцініть швидкість, за якою важить стандартне відхилення за допомогою незалежної змінної


11

У мене є експеримент, в якому я здійснюю вимірювання нормально розподіленої змінної ,Y

YN(μ,σ)

Однак попередні експерименти дали деякі докази того, що стандартне відхиленняσ є афінною функцією незалежної змінної X , тобто

σ=a|X|+b

YN(μ,a|X|+b)

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

Опис експерименту

Це додаткова інформація, якщо вас цікавить, чому я задаю вищезазначене питання. Мій експеримент вимірює слухове та зорове просторове сприйняття. У мене є налаштування експерименту , в якому можна уявити або слухові або візуальні мети з різних місць, X , і предмети вказують на сприймається розташування мішені, Y . І бачення *, і прослуховування стають менш точними зі збільшенням ексцентриситету (тобто збільшення |X| ), яке я моделюю як σ вище. Зрештою, я хотів би оцінити a і bяк для зору, так і для прослуховування, тому я знаю точність кожного почуття в різних місцях у просторі. Ці оцінки будуть використані для прогнозування відносної вагомості зорових та слухових цілей при їх одночасному представленні (подібно до теорії мультисенсорної інтеграції, представленої тут: http://www.ncbi.nlm.nih.gov/pubmed/12868643 ).

* Я знаю, що ця модель є неточною для зору при порівнянні фовеальної та екстрафовеальної площі, але мої вимірювання обмежуються виключно екстрафовеальним простором, де це гідне наближення.


2
Цікава проблема. Можливо, найкращі рішення будуть враховувати причини, з яких ви робите цей експеримент. Які ваші кінцеві цілі? Прогноз? Оцінка , a та / або σ ? Чим більше ви можете сказати нам про мету, тим кращі відповіді можуть бути. μaσ
whuber

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

Хороший момент @gung, я неналежним чином спростив свою проблему. Більш реально було б сказати, що є афінною функцією | X | . Я відредагую своє запитання. σ|X|
Адам Босен

@whuber Причина цього хочу дещо пов’язана, але я подумаю, як пояснити експеримент і незабаром додати ще детальну інформацію до мого питання.
Адам Босен

1
Чи є у вас поважні причини, апріорі, вважати, що X = 0 являє собою мінімум SD, і що f (| X |) є монотонним?
gung - Відновіть Моніку

Відповіді:


2

У такому випадку, як ваш, де у вас є відносно проста, але "нестандартна" генеративна модель, для якої ви хотіли б оцінити параметри, моєю першою думкою було б використовувати байєсівську програму виводу, як Стен . Опис, який ви дали, дуже чітко перекладеться на модель Стен.

Деякі приклади 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.