2011-06-26 6 views
5

एक वितरण के साथ वास्तविक मान की संख्याओं (x) की एक डाटासेट फिट करने के लिए, इस प्रकार या तो gamma या Student's t वितरण के रूप में हम मास का उपयोग कर सकते हैं:आर: वितरण के संयोजन के साथ एक बड़े डेटासेट कैसे फिट करें?

fitdistr(x, "gamma") 

या

fitdistr(x2, "t") 

क्या होगा अगर मेरा मानना ​​है कि मेरे डेटासेट को गामा और टी वितरण के योग से फिट होना चाहिए?

P(X) = Gamma(x) + t(x) 

क्या मैं आर में अधिकतम लिकेलहुड फिटिंग का उपयोग करके संभाव्यता वितरण के मिश्रण के मानकों के अनुरूप हो सकता हूं?

+2

मुझे लगता है तुम्हारा मतलब (अन्य पोस्टर भी मान लिया है के रूप में) है कि अपने वितरण एक * गामा और टी (यानी की * मिश्रण प्रत्येक व्यक्ति बात यह है कि यह है: यहाँ तीन वितरण का एक मिश्रण का एक उदाहरण है या तो गामा या टी वितरण से खींचा गया)। दूसरा विकल्प, जो थोड़ा सा ट्रिकियर है, वह है (जैसा कि मुझे लगता है कि अगर मैं सचमुच आपका प्रश्न पढ़ता हूं) कि व्यक्तिगत मूल्य गामा और टी चर के बराबर हैं, यानी वितरण वितरण गामा और टी का एक संकल्प है। कृपया स्पष्ट करें। यदि यह उत्तरार्द्ध है तो मैं 'distr' पैकेज का उपयोग कर समाधान का सुझाव दे सकता हूं ... –

+0

दो साल बाद और मूल पोस्टर नहीं, लेकिन मुझे 'distr' का उपयोग करके दृढ़ संकल्प के लिए आपके प्रस्तावित समाधान में बहुत दिलचस्पी होगी पैकेज। – msp

उत्तर

3

कुछ पैरामीटर के लिए विश्लेषणात्मक maximum-likelihood estimators हैं, जैसे normal distribution का अर्थ या exponential distribution की दर। अन्य मानकों के लिए, कोई विश्लेषणात्मक अनुमानक नहीं है, लेकिन आप उचित पैरामीटर अनुमान खोजने के लिए numerical analysis का उपयोग कर सकते हैं।

fitdistr() आर में कार्य optim() फ़ंक्शन को कॉल करके लॉग-संभावना फ़ंक्शन के संख्यात्मक अनुकूलन का उपयोग करता है। यदि आपको लगता है कि आपका डेटा गामा और टी वितरण का मिश्रण है, तो बस एक ऐसा मिश्रण बनाएं जो इस तरह के मिश्रण का वर्णन करता हो। फिर, ऑप्टिमाइज़ेशन के लिए उन पैरामीटर मानों को ऑप्टिमाइज़() पर पास करें।

library(MASS) 

vals = rnorm(n = 10000, mean = 0, sd = 1) 
print(summary(x_vals)) 

ll_func = function(params) { 
    log_probs = log(dnorm(x = vals, mean = params[1], sd = params[2])) 
    tot = sum(log_probs) 
    return(-1 * tot) 
}  

params = c(0.5, 10) 

print(ll_func(params)) 
res = optim(params, ll_func) 
print(res$par) 

आर में इस कार्यक्रम चल रहा है इस उत्पादन का उत्पादन:: यहाँ एक वितरण फिटिंग के लिए इस दृष्टिकोण का उपयोग कर एक उदाहरण है

[1] "mean: 0.0223766157516646" 
[1] "sd: 0.991566611447471" 

कि काफी मतलब की प्रारंभिक मान के काफी करीब है = 0 और एसडी = 1

भूलें कि दो वितरणों के मिश्रण के साथ, आपके पास एक अतिरिक्त पैरामीटर है जो वितरण के बीच सापेक्ष वजन निर्दिष्ट करता है। साथ ही, कई पैरामीटर को एक बार में फ़िट करने के बारे में सावधान रहें। बहुत सारे मुफ्त पैरामीटर के साथ आपको overfitting के बारे में चिंता करने की आवश्यकता है।

संबंधित मुद्दे