आर

2013-07-12 9 views
10

के साथ गामा वितरण फिटिंग में कठिनाई मैं पारिस्थितिकीय घनत्व (यानी बायोमास प्रति क्षेत्र) डेटा के लिए उपयुक्त गामा वितरण के मानकों का अनुमान लगाने का प्रयास कर रहा हूं। मैं आर में एमएएसएस पैकेज से फिटdistr() कमांड का उपयोग कर रहा हूं (संस्करण 3.0.0: x86_64-w64-mingw32/x64 (64-बिट))। यह वितरण पैरामीटर के लिए अधिकतम संभावना अनुमान कमांड है।आर

डेटा की वैक्टर काफी बड़े हैं, लेकिन आंकड़ों का सारांश इस प्रकार हैं:

Min. = 0; 1st Qu. = 87.67; Median = 199.5; Mean = 1255; Variance = 2.79E+07; 3rd Qu. = 385.6; Max. = 33880

कोड मैं MLE प्रक्रिया को चलाने के लिए उपयोग कर रहा हूँ है:

gdist <- fitdistr(data, dgamma, 
        start=list(shape=1, scale=1/(mean(data))),lower=c(1,0.1)) 

आर मुझे दे रहा है निम्नलिखित त्रुटि:

Error in optim(x = c(6.46791148085828, 4060.54750836902, 99.6201565968665, : non-finite finite-difference value [1]

अन्य जिन्होंने इस प्रकार के मुद्दे का अनुभव किया है और स्टैकोव में बदल गए हैं लगता है कि मदद के लिए erflow को उनके कोड में "निचला =" तर्क जोड़ने और/या शून्य को हटाने में समाधान मिला है। मुझे लगता है कि अगर मैं शून्य अवलोकन को हटा देता हूं तो आर फिट के लिए पैरामीटर प्रदान करेगा, लेकिन मैं इस धारणा के तहत था कि गामा वितरण में= x> inf (फोर्ब्स एट अल। 2011. सांख्यिकीय वितरण) शामिल है?

क्या मुझे गामा वितरण की सीमा के बारे में गलत इंप्रेशन मिला है? या क्या एमएलई के संबंध में मुझे कुछ अन्य समस्याएं याद आ रही हैं (जिसमें मैं एक नौसिखिया हूं)।

उत्तर

22

क्षणों में हम

mean <- 1255 
var <- 2.79e7 
shape = mean^2/var ## 0.056 
scale = var/mean  ## 22231 

अब इस वितरण से कुछ डेटा उत्पन्न है (मतलब = आकार * पैमाने और विचरण = आकार * पैमाने^2 मिलान) की विधि द्वारा एक मोटे अनुमान हो रही है:

set.seed(101) 
x = rgamma(1e4,shape,scale=scale) 
summary(x) 
##  Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
##  0.00  0.00  0.06 1258.00  98.26 110600.00 

MASS::fitdistr(x,"gamma") ## error 

मुझे दृढ़ता से संदेह है कि समस्या यह है कि अंतर्निहित optim कॉल मानता है कि पैरामीटर (आकार और स्केल, या आकार और दर) लगभग समान परिमाण के हैं, जो वे नहीं हैं।

(m <- MASS::fitdistr(x/2e4,"gamma")) ## works fine 
##  shape   rate  
## 0.0570282411 0.9067274280 
## (0.0005855527) (0.0390939393) 

fitdistr एक दर पैरामीटर के बजाय पैमाने पैरामीटर देता है:: आप इस के चारों ओर अपने डेटा स्केलिंग द्वारा प्राप्त कर सकते हैं वापस आकार पैरामीटर आप चाहते हैं, की विपरीत और फिर से पैमाने को पाने के लिए ...

1/coef(m)["rate"]*2e4 ## 22057 

वैसे, तथ्य यह है कि अनुरूपित डेटा की मात्रा आपके डेटा से बहुत अच्छी तरह से मेल नहीं खाती है (उदाहरण के लिए x = 0.06 का औसत जो आपके डेटा में 199 का औसत है) सुझाव देता है कि आपका डेटा गामा फिट नहीं हो सकता है वह अच्छा - उदाहरण के लिए क्वांटाइल से अधिक मतलब और भिन्नता को प्रभावित करने वाले कुछ आउटलाइज़र हो सकते हैं?

पुनश्च ऊपर मैं नहीं बल्कि dgamma का उपयोग करने से fitdistr में निर्मित 'गामा' आकलनकर्ता प्रयोग किया है: (क्षणों की विधि के आधार पर मान शुरू करने, और 2e4 द्वारा डेटा स्केलिंग के साथ, यह काम करता है, हालांकि यह एक चेतावनी देता है के बारे में NaNs produced जब तक हम lower

m2 <- MASS::fitdistr(x/2e4,dgamma, 
     start=list(shape=0.05,scale=1), lower=c(0.01,0.01)) 
+4

+1 उल्लेख करें) मैं किसी भी आकार पैरामीटर <1. यह सच है, गामा वितरण के लिए अनुमति नहीं है पर शक होगा, लेकिन IME इस तरह के एक मूल्य, विशेष रूप से एक भारी पैमाने के साथ एक साथ, इसका मतलब है डेटा शायद गामा के लिए बहुत भारी पूंछ है। एक सामान्यीकृत पारेटो या चरम-मूल्य वितरण की तरह कुछ बेहतर फिट हो सकता है। –