Ước tính tỷ lệ mà ở đó độ lệch chuẩn với một biến độc lập


11

Tôi có một thí nghiệm trong đó tôi đang thực hiện các phép đo của biến phân phối bình thường ,Y

YN(μ,σ)

Tuy nhiên, các thử nghiệm trước đây đã cung cấp một số bằng chứng cho thấy độ lệch chuẩn là hàm affine của biến độc lập , nghĩa làXσX

σ=a|X|+b

YN(μ,a|X|+b)

Tôi muốn để ước lượng các thông số và bằng cách lấy mẫu tại nhiều giá trị của . Ngoài ra, do các giới hạn thử nghiệm, tôi chỉ có thể lấy một số lượng mẫu giới hạn (khoảng 30-40) và muốn lấy mẫu ở một số giá trị vì các lý do thử nghiệm không liên quan. Với các ràng buộc này, phương pháp nào có sẵn để ước tính và ?b Y X Y X a babYXYXab

Mô tả thí nghiệm

Đây là thông tin bổ sung, nếu bạn quan tâm đến lý do tại sao tôi hỏi câu hỏi trên. Thí nghiệm của tôi đo lường nhận thức không gian thính giác và thị giác. Tôi có một thiết lập thử nghiệm trong đó tôi có thể trình bày hoặc thính giác hoặc mục tiêu thị giác từ các địa điểm khác nhau, , và các đối tượng chỉ ra vị trí nhận thức của mục tiêu, . Cả tầm nhìn * và thử giọng trở nên ít chính xác hơn với độ lệch tâm tăng (tức là tăng ), mà tôi mô hình hóa như ở trên. Cuối cùng, tôi muốn ước tính vàY | X | σ một bXY|X|σabcho cả tầm nhìn và thử giọng, vì vậy tôi biết độ chính xác của từng giác quan trên một loạt các vị trí trong không gian. Các ước tính này sẽ được sử dụng để dự đoán trọng số tương đối của các mục tiêu thị giác và thính giác khi được trình bày đồng thời (tương tự như lý thuyết về tích hợp đa phân tích được trình bày ở đây: http://www.ncbi.nlm.nih.gov/pubmed/12868643 ).

* Tôi biết rằng mô hình này không chính xác về tầm nhìn khi so sánh không gian với không gian ngoài da, nhưng các phép đo của tôi chỉ bị giới hạn ở không gian ngoài trời, trong đó đây là một xấp xỉ khá.


2
Vấn đề thú vị. Có khả năng các giải pháp tốt nhất sẽ tính đến lý do bạn thực hiện thử nghiệm này. Mục tiêu cuối cùng của bạn là gì? Sự dự đoán? Ước tính , và / hoặc ? Bạn càng có thể cho chúng tôi biết về mục đích, câu trả lời có thể tốt hơn. một σμaσ
whuber

Vì SD không thể âm, nên không chắc là hàm tuyến tính của X. Đề xuất của bạn, a | X |, yêu cầu hình chữ V hẹp hơn hoặc rộng hơn với tối thiểu X = 0, có vẻ như là một khả năng khá bất thường đối với tôi . Bạn có chắc chắn điều này đúng?
gung - Phục hồi Monica

Điểm hay @gung, tôi đã quá mức cho vấn đề của mình. Nó muốn được thực tế hơn để nói rằng là một chức năng của affine | X | . Tôi sẽ chỉnh sửa câu hỏi của tôi. σ|X|
Adam Bosen

@whuber Lý do muốn điều này có một chút liên quan, nhưng tôi sẽ suy nghĩ về cách giải thích thử nghiệm và thêm một số chi tiết cho câu hỏi của tôi sớm.
Adam Bosen

1
Bạn có lý do chính đáng không, a-prori, để tin rằng X = 0 đại diện cho SD tối thiểu, và rằng f (| X |) là đơn điệu?
gung - Phục hồi Monica

Câu trả lời:


2

Trong trường hợp như của bạn, nơi bạn có một mô hình thế hệ tương đối đơn giản nhưng "không chuẩn" mà bạn muốn ước tính các tham số cho, suy nghĩ đầu tiên của tôi sẽ là sử dụng chương trình suy luận Bayes như Stan . Mô tả bạn đã đưa ra sẽ dịch rất rõ ràng sang mô hình Stan.

Một số ví dụ mã R, sử dụng RStan (giao diện R cho 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)

Bạn sẽ nhận được đầu ra trông giống như thế này (mặc dù số ngẫu nhiên của bạn có thể sẽ khác với tôi):

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μ


Ồ, tôi thích điều này! Tôi đã không nghe nói về Stan trước đây, cảm ơn đã tham khảo. Ban đầu tôi đã hy vọng cho một giải pháp phân tích, nhưng do thiếu phản ứng mà tôi nghi ngờ có tồn tại. Tôi có xu hướng tin rằng câu trả lời của bạn là cách tiếp cận tốt nhất cho vấn đề này.
Adam Bosen

Nó sẽ không hoàn toàn gây sốc cho tôi nếu một giải pháp phân tích tồn tại, nhưng tôi chắc chắn sẽ có một chút ngạc nhiên. Điểm mạnh của việc sử dụng một cái gì đó như Stan là rất dễ dàng thực hiện các thay đổi cho mô hình của bạn - một giải pháp phân tích có thể sẽ bị ràng buộc rất mạnh đối với mô hình như đã đưa ra.
Martin O'Leary

2

Bạn không thể mong đợi các công thức đóng, nhưng bạn vẫn có thể viết ra hàm khả năng và tối đa hóa nó bằng số. Mô hình của bạn là Sau đó, hàm loglikabilities (ngoài một thuật ngữ không phụ thuộc vào tham số) trở thành và điều đó dễ lập trình và đưa ra một trình tối ưu hóa số.l ( μ , một , b ) = - Σ ln ( một | x i | + b ) - 1

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

Trong R, chúng ta có thể làm

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

Sau đó mô phỏng một số dữ liệu:

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

Sau đó thực hiện chức năng loglikabilities:

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

Sau đó tối ưu hóa nó:

> 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.