독립 변수를 사용하여 표준 편차가 조정되는 비율 추정


11

나는이 정규 분포 변수의 측정 복용하고있는 실험이 ,Y

Y∼N(μ,σ)

그러나 이전의 실험 표준 편차 몇 가지 증거 제공 한 독립 변수의 아핀 함수 , 즉XσX

σ=a|X|+b

Y∼N(μ,a|X|+b)

여러 값에서 를 샘플링 하여 매개 변수 와 를 추정하고 싶습니다 . 또한 실험 제한으로 인해 제한된 (대략 30-40) 수의 샘플 만 취할 수 있으며 관련이없는 실험적인 이유로 여러 값으로 샘플링하는 것을 선호합니다 . 이러한 제약 조건이 주어지면 와 를 추정 수있는 방법은 무엇 입니까?b Y X Y X a babYXYXab

실험 설명

위의 질문을하는 이유에 관심이 있다면 추가 정보입니다. 내 실험은 청각과 시각적 공간 인식을 측정합니다. 다른 위치 청각 또는 시각적 대상을 제시 할 수있는 실험 설정이 있으며 대상은 대상 의 인식 된 위치 나타냅니다 . 비전 *과 오디션 모두 편심이 증가함에 따라 정확도가 떨어집니다 (즉 , 증가 ) . 위의 로 모델링 합니다. 궁극적으로, 나는 와 를 추정하고 싶습니다Y | X | σ a bXY|X|σab비전과 오디션을 위해 공간의 여러 위치에서 각 감각의 정확성을 알고 있습니다. 이 추정치는 동시에 제시 될 때 시각 및 청각 목표의 상대적 가중치를 예측하는 데 사용됩니다 (여기에 제시된 다중 감각 통합 이론과 유사 함 : http://www.ncbi.nlm.nih.gov/pubmed/12868643 ).

*이 모델은 Foveal과 Fofoal 공간을 비교할 때 시력이 정확하지 않다는 것을 알고 있습니다. 그러나 측정 값은 단지 Fofoalal 공간으로 만 제한됩니다.


2
재미있는 문제. 이 실험을 수행하는 이유를 고려할 때 최상의 솔루션이 될 것입니다. 당신의 궁극적 인 목표는 무엇입니까? 예측? 추정 , 및 / 또는 ? 목적에 대해 더 많이 말할수록 답변이 더 나아질 수 있습니다. 는 σμaσ
— whuber

SD는 음수 일 수 없기 때문에 X의 선형 함수일 가능성이 낮습니다. 귀하의 제안 a | X |는 X = 0에서 최소의 좁거나 넓은 V 모양을 필요로합니다. . 이것이 맞습니까?
— gung-복직 모니카

좋은 지적 @ gung, 나는 내 문제를 부적절하게 지나치게 단순화했다. 가 의 아핀 함수 라고 말하는 것이 더 현실적입니다 . 질문을 편집하겠습니다. | X |σ|X|
— Adam Bosen 2016 년

@ whuber 이것을 원하는 이유는 약간 관련이 있지만 실험을 설명하고 내 질문에 더 자세한 내용을 추가하는 방법에 대해 생각할 것입니다.
— Adam Bosen 2016 년

1
X = 0이 최소 SD를 나타내고 f (| X |)가 단조 적이라고 믿을만한 충분한 이유가 있습니까?
— gung-복직 모니카

답변:


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μ


아, 이거 좋아! 스탠에 대해 들어 본 적이 없습니다. 참조 해 주셔서 감사합니다. 나는 처음에 분석 솔루션을 기대하고 있었지만 응답이 없기 때문에 하나의 존재가 의심됩니다. 귀하의 답변 이이 문제에 대한 최선의 접근 방법이라고 생각합니다.
— Adam Bosen

분석 솔루션이 존재하더라도 완전히 충격을주지는 않지만 조금 놀랐습니다. Stan과 같은 것을 사용하는 장점은 모델을 변경하기가 매우 쉽다는 것입니다. 분석 솔루션은 주어진 모델에 따라 매우 제한적일 수 있습니다.
— Martin O'Leary

2

닫힌 수식을 기대할 수는 없지만 가능성 함수를 적어 수치 적으로 최대화 할 수 있습니다. 귀하의 모델은 그러면 로그 우도 함수 (매개 변수에 의존하지 않는 항을 제외하고)는 그리고 프로그램하기 쉽습니다. 수치 최적화 프로그램을 제공합니다.l ( μ , a , b ) = − ∑ ln ( a | x i | + b ) − 1

Y∼N(μ,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)

그런 다음 loglikelihood 함수를 작성하십시오.

> 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.