एक स्वतंत्र चर के साथ मानक विचलन पैमाने पर दर का अनुमान लगाएं


11

मेरे पास एक प्रयोग है जिसमें मैं सामान्य रूप से वितरित चर का माप ले रहा हूं ,Y

YN(μ,σ)

हालाँकि, पिछले प्रयोगों ने कुछ सबूत दिए हैं कि मानक विचलन एक स्वतंत्र चर का एक परिणीति कार्य है , अर्थातएक्सσX

σ=a|X|+b

YN(μ,a|X|+b)

मैं पैरामीटर अनुमान लगाने के लिए चाहते हैं और नमूने के द्वारा के एक से अधिक मान पर । इसके अतिरिक्त, प्रयोग सीमाओं के कारण मैं केवल के नमूनों की सीमित (लगभग 30-40) संख्या ले सकता हूं , और असंबंधित प्रयोगात्मक कारणों के लिए कई मूल्यों पर नमूना लेना पसंद करूंगा । इन बाधाओं को देखते हुए, और का अनुमान लगाने के लिए कौन से तरीके उपलब्ध हैं ?बी वाई एक्स वाई एक्स बीabYXYXab

प्रयोग विवरण

यह अतिरिक्त जानकारी है, यदि आप रुचि रखते हैं कि मैं उपरोक्त प्रश्न क्यों पूछ रहा हूं। मेरा प्रयोग श्रवण और दृश्य स्थानिक धारणा को मापता है। मेरे पास एक प्रयोग सेटअप है जिसमें मैं अलग-अलग स्थानों से या तो श्रवण या दृश्य लक्ष्य प्रस्तुत कर सकता हूं, , और विषय लक्ष्य के कथित स्थान को इंगित करते हैं, । दोनों दृष्टि * और ऑडिशन सनक बढ़ती (यानी बढ़ाने के साथ कम सटीक प्राप्त ) के रूप में है, जो मैं मॉडल ऊपर। अंत में, मैं और का अनुमान लगाना चाहता हूंवाई | एक्स | σ एक XY|X|σabदृष्टि और ऑडिशन दोनों के लिए, इसलिए मैं अंतरिक्ष में कई स्थानों पर प्रत्येक अर्थ की शुद्धता जानता हूं। इन अनुमानों का उपयोग दृश्य और श्रवण लक्ष्यों के सापेक्ष भार का अनुमान लगाने के लिए किया जाएगा, जब समवर्ती रूप से प्रस्तुत किया जाएगा (यहां प्रस्तुत मल्टीसेंसरी एकीकरण के सिद्धांत के समान: http://www.ncbi.nlm.nih.gov/pubmed/12868803 )।

* मुझे पता है कि यह मॉडल दृष्टि की अशुद्धि के लिए है जब फोबियाल की तुलना एक्स्ट्राफोवियल स्पेस से की जाती है, लेकिन मेरे माप केवल एक्स्ट्राफोवियल स्पेस के लिए विवश हैं, जहां यह एक अच्छा अनुमान है।


2
दिलचस्प समस्या है। यह संभव है कि सबसे अच्छा समाधान उन कारणों को ध्यान में रखेगा जो आप इस प्रयोग को कर रहे हैं। आपके अंतिम उद्देश्य क्या हैं? भविष्यवाणी? का आकलन , , और / या ? जितना अधिक आप हमें उद्देश्य के बारे में बता सकते हैं, उतने बेहतर उत्तर हो सकते हैं। एक σμaσ
whuber

चूँकि SD ऋणात्मक नहीं हो सकता है, यह X का रैखिक कार्य होने की संभावना नहीं है। आपका सुझाव, (a। X।), एक संकरा या व्यापक V आकार w / x = 0 पर न्यूनतम आवश्यक है, जो मेरे लिए एक अप्राकृतिक संभावना प्रतीत होती है। । क्या आपको यकीन है कि यह सही है?
गूँग -

अच्छा बिंदु @gung, मैं अपनी समस्या का अनुचित निरीक्षण करूंगा। यह कहना अधिक यथार्थवादी होगा कि का एक शुभ कार्य है। मैं अपने प्रश्न का संपादन करूंगा। | एक्स |σ|X|
एडम बॉन

@whuber इसे चाहने का कारण थोड़ा उलझा हुआ है, लेकिन मैं इस बारे में सोचूंगा कि प्रयोग को कैसे समझा जाए और जल्द ही मेरे सवाल में कुछ और विवरण जोड़ दूं।
एडम बॉन

1
क्या आपके पास अच्छा कारण है, एक प्राथमिक-प्राथमिकता, यह मानने के लिए कि X = 0 न्यूनतम SD का प्रतिनिधित्व करता है, और यह f (? X |) एकरस है।
गंग -

जवाबों:


2

आपके जैसे मामले में, जहां आपके पास अपेक्षाकृत सरल, लेकिन "गैर-मानक" जेनेरिक मॉडल है, जिसके लिए आप मापदंडों का अनुमान लगाना चाहते हैं, मेरा पहला विचार स्टेन जैसे बायेसियन इंविज़न प्रोग्राम का उपयोग करना होगा । आपके द्वारा दिया गया विवरण स्टेन मॉडल पर बहुत सफाई से अनुवाद करेगा।

कुछ उदाहरण R कोड, RStan (स्टेन के लिए 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μ


ओह, मुझे यह पसंद है! मैंने पहले स्टेन के बारे में नहीं सुना था, संदर्भ के लिए धन्यवाद। मैं शुरू में एक विश्लेषणात्मक समाधान की उम्मीद कर रहा था, लेकिन प्रतिक्रियाओं की कमी को देखते हुए मुझे संदेह है कि एक मौजूद है। मुझे विश्वास है कि आपका जवाब इस समस्या के लिए सबसे अच्छा तरीका है।
एडम बॉन

यह पूरी तरह से मुझे झटका नहीं होगा अगर एक विश्लेषणात्मक समाधान मौजूद था, लेकिन मैं निश्चित रूप से थोड़ा आश्चर्यचकित रहूंगा। स्टेन की तरह कुछ का उपयोग करने की ताकत यह है कि आपके मॉडल में परिवर्तन करना बहुत आसान है - एक विश्लेषणात्मक समाधान शायद मॉडल के लिए बहुत दृढ़ता से विवश होगा जैसा कि दिया गया है।
मार्टिन ओ'लेरी

2

आप बंद फ़ार्मुलों की अपेक्षा नहीं कर सकते हैं, लेकिन आप अभी भी संभावना फ़ंक्शन लिख सकते हैं और इसे संख्यात्मक रूप से अधिकतम कर सकते हैं। आपका मॉडल तो फिर loglikelihoodfunction (मापदंडों के आधार पर एक शब्द के अलावा नहीं) ) हो जाता है। और वह प्रोग्राम करना आसान है और एक संख्यात्मक अनुकूलक को दे।

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

आर में, हम कर सकते हैं

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.