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


11

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

YN(μ,σ)

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

σ=a|X|+b

YN(μ,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

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)

그런 다음 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.