R बनाम SciPy में लॉग-सामान्य वितरण फिटिंग


10

मैंने डेटा के सेट के साथ R का उपयोग करके एक लॉगऑनॉर्मल मॉडल फिट किया है। परिणामी पैरामीटर निम्न थे:

meanlog = 4.2991610 
sdlog = 0.5511349

मैं इस मॉडल को स्पीपी में स्थानांतरित करना चाहता हूं, जिसका मैंने पहले कभी उपयोग नहीं किया है। Scipy का उपयोग करते हुए, मैं 1 और 3.1626716539637488e + 90 का आकार और स्केल प्राप्त करने में सक्षम था - बहुत अलग संख्या। मैंने मीनलॉग और sdlog के ऍक्स्प का उपयोग करने की भी कोशिश की है लेकिन विचित्र ग्राफ प्राप्त करना जारी है।

मैंने हर डॉक को पढ़ा है जो मैं डरा सकता हूं और अभी भी इस उलझन में हूं कि इस उदाहरण में आकार और पैमाने के मापदंडों का क्या मतलब है। क्या यह सिर्फ फंक्शन को कोड करने के लिए समझ में आएगा? यह त्रुटियों के लिए प्रवण लगता है, हालांकि मैं डराने के लिए नया हूं।

SCIPY Lognormal (BLUE) बनाम R Lognormal (RED): Scipy Lognormal (BLUE) बनाम R Lognormal (RED)

किसी भी विचार को किस दिशा में ले जाना है? डेटा आर मॉडल के साथ बहुत अच्छी तरह से फिट है, इसलिए यदि यह पायथन में कुछ और जैसा दिखता है, तो बेझिझक साझा करें।

धन्यवाद!

अपडेट करें:

मैं Scipy 0.11 चला रहा हूं

यहाँ डेटा का एक सबसेट है। 81.53627 के औसत के साथ वास्तविक नमूना 38k + है:

सबसेट:

x
[60, 170, 137, 138, 81, 140, 78, 46, 1, 168, 138, 148, 145, 145, 35, 82, 126, 66, 147, 88, 106, 80, 54, 83, 13, १०२, ५४, १३३, ३४]
सुन्नम (x)
९९ .०85१४२14५2१४२69५६ ९

वैकल्पिक रूप से:

मैं pdf को कैप्चर करने के लिए एक फंक्शन पर काम कर रहा हूँ:

def lognoral(x, mu, sigma):
    a = 1 / (x * sigma * numpy.sqrt(2 * numpy.pi) )
    b = - (numpy.log(x) - mu) ^ 2 / (2 * sigma ^ 2)
    p = a * numpy.exp(b)
    return p

हालाँकि, यह मुझे निम्नलिखित संख्या देता है (मैंने sdlog और meanlog मिश्रित का अर्थ प्राप्त करने के मामले में कई कोशिश की):

>>> lognormal(54,4.2991610, 0.5511349)
0.6994656085799437
 >>> lognormal(54,numpy.exp(4.2991610), 0.5511349)
0.9846125119455129
>>> lognormal(54,numpy.exp(4.2991610), numpy.exp(0.5511349))
0.9302407837304372

कोई विचार?

अपडेट करें:

"UPQuark" के सुझाव के साथ फिर से पढ़ना:

आकार, स्थान, पैमाना (1.0, 50.03445923295007, 19.074457156766517)

ग्राफ का आकार बहुत समान है, हालांकि, चोटी 21 के आसपास हो रही है।


इस सवाल और जवाब में मदद मिल सकती है: stackoverflow.com/questions/8747761/…
j Julman

धन्यवाद, मैंने पाया कि लॉगऑनॉर्मल के साथ "फिटिंग" सीखी। हालांकि, मेरा सवाल यह है कि मुझे इस तरह के अलग-अलग वितरण क्यों मिलेंगे?
लिलियन मिलग्रोस कैरास्किलो

क्या आप SciPy 0.9 का उपयोग कर रहे हैं? इसके अलावा, क्या आप अपना डेटा, या एक सबसेट पोस्ट कर सकते हैं?
२१:

अपडेट किया गया! यह 0.11 स्काइप है। तो मैंने जो कीड़े के बारे में पढ़ा है वह प्रासंगिक नहीं होना चाहिए;)
लिलियन मिलग्रोस कैरास्किलो

जवाबों:


11

मैं स्रोत कोड के माध्यम से अपना रास्ता लड़ता हूं, जो डरावने लॉगऑनॉर्मल रूटीन की निम्न व्याख्या पर पहुंचने के लिए है।

xlocscaleLognormal(σ)

σ

स्कैपी मापदंडों और आर पैरामीटर के बीच समानता इस प्रकार है:

लोक - कोई समतुल्य नहीं, यह आपके डेटा से घटाया जाता है ताकि 0 डेटा की सीमा के लिए अनंत हो जाए।

expμμ

आकार - चर के लॉग का मानक विचलन।

मैंने कहा lognorm.pdf(x, 0.55, 0, numpy.exp(4.29))कि जहां तर्क क्रमशः (x, आकार, स्थान, स्केल) हैं और निम्नलिखित मान उत्पन्न किए हैं:

एक्स पीडीएफ

10 0.000106 है

20 0.002275

30 0.006552

40 0.009979

50 0.114557

60 0.113479

70 0.103327

80 0.008941 है

90 0.007494

100 0.006155

जो आपके आर वक्र के साथ बहुत अच्छी तरह से मेल खाते हैं।


धन्यवाद, @JBowman, यह बिल्कुल वही स्पष्टीकरण है जिसकी मुझे ज़रूरत थी और आउटपुट बिल्कुल मेरे वितरण का है।
लिलियन मिलग्रोस कैरास्किलो

8

SciPy में सभी वितरण के लिए SciPy में लॉगऑनॉर्मल वितरण सामान्य ढांचे में फिट बैठता है । उन सभी के पास एक स्केल और स्थान कीवर्ड है (जो कि 0 और 1 के लिए डिफ़ॉल्ट है यदि स्पष्ट रूप से प्रदान नहीं किया गया है)। यह वितरण के आंकड़ों के स्पष्ट निहितार्थ के साथ सभी वितरणों को उनके सामान्यीकृत विनिर्देश से स्थानांतरित और स्केल करने की अनुमति देता है। वितरण में आम तौर पर एक या अधिक "आकार" पैरामीटर होते हैं (हालांकि कुछ, सामान्य वितरण की तरह, किसी भी अतिरिक्त पैरामीटर की आवश्यकता नहीं होती है)।

जबकि यह सामान्य दृष्टिकोण अच्छी तरह से सभी वितरणों को एकजुट करता है, लॉगऑनॉर्मल के लिए यह कुछ भ्रम पैदा कर सकता है क्योंकि जिस तरह से अन्य पैकेज मापदंडों को परिभाषित करते हैं। फिर भी, अगर आप (अंतर्निहित वितरण का मतलब) और sdlog (अंतर्निहित वितरण का मानक विचलन) का मतलब है, तो किसी भी असामान्य वितरण का मिलान करना बहुत आसान है।

सबसे पहले, सुनिश्चित करें कि आपने स्थान पैरामीटर को 0. पर सेट किया है, फिर आकार पैरामीटर को sdlog के मान पर सेट करें। अंत में, math.exp (मतलब) के लिए स्केल पैरामीटर सेट करें। इस प्रकार, rv = scipy.stats.lognorm (0.5511349, स्केल = math.exp (4.2991610)) एक वितरण ऑब्जेक्ट बनाएगा जिसका पीडीएफ बिल्कुल आपके R- जनित वक्र से मेल खाता है। एक्स के रूप में = numpy.linspace (0,180,1000); प्लॉट (x, rv.pdf (x)) सत्यापित करेगा।

मूल रूप से, SciPy lognormal वितरण मानक lognormal वितरण का एक सामान्यीकरण है जो स्थान पैरामीटर को 0 पर सेट करते समय मानक से बिल्कुल मेल खाता है।

जब .fit विधि के साथ डेटा फिटिंग किया जाता है, तो आप कीवर्ड, f0..fn, floc, और fshape का उपयोग किसी भी आकार, स्थान और / या स्केल मापदंडों को तय करने के लिए भी कर सकते हैं और केवल अन्य चर पर फिट होते हैं। लॉगऑनॉर्मल डिस्ट्रीब्यूशन के लिए यह बहुत उपयोगी है क्योंकि आमतौर पर आपको पता होता है कि लोकेशन पैरामीटर 0. तय किया जाना चाहिए। इस प्रकार, scipy.stats.lognorm.fit (डेटासेट, फ़्लोक = 0) हमेशा लोकेशन पैरामीटर को 0 के रूप में लौटाएगा और केवल अन्य भिन्न होगा आकार और पैमाने मापदंडों।


3

Scipy lognormal फिट आकार, स्थान और स्केल देता है। मैंने नमूना मूल्य डेटा की एक सरणी पर केवल निम्नलिखित भाग किया:

shape, loc, scale = st.lognorm.fit(d_in["price"])

यह मुझे उचित अनुमान 1.0, 0.09, 0.86 देता है, और जब आप इसे साजिश करते हैं, तो आपको सभी तीन मापदंडों को ध्यान में रखना चाहिए।

आकार पैरामीटर अंतर्निहित सामान्य वितरण का मानक विचलन है, और पैमाने सामान्य के माध्य का घातांक है।

उम्मीद है की यह मदद करेगा।


जवाब देने के लिए धन्यवाद! एक बार जब मेरे पास ये मान (लोकेशन, स्केल, शेप) होते हैं, तो मैं प्रत्येक एक्स के लिए पीडीएफ (एक्स) को खोजने की कोशिश करता हूं जिसकी मुझे परवाह है (यहां यह मान 0 से 180 के बीच है, अनन्य)। scipy.stats.lognorm.pdf (i, loc, scale, shape) हालांकि, इनको प्लॉट करने से मुझे ऊपर प्लॉट मिलता है।
लिलियन मिलग्रोस कैरास्किलो

ठीक है मैंने आपको केवल आकार और पैमाने का उल्लेख करते देखा है, इसीलिए मैंने उल्लेख किया है कि फिट () से डिफ़ॉल्ट रूप से लौटे तीन पैरामीटर हैं। आपने यह भी कहा कि आप इस बारे में उलझन में हैं कि आकार और पैमाने के मापदंडों का क्या मतलब है, और मैंने उसे संबोधित करने की कोशिश की। मैंने आपके मामले में लॉगऑनॉर्मल फिट रिटर्न बेतुका मान नहीं लिया है, हालांकि, स्थान पैरामीटर क्या है?
upquark

बस उस सवाल का जवाब देने के लिए अद्यतन किया। इस बारे में सोचने के लिए धन्यवाद।
लिलियन मिलग्रोस कैरास्किलो

Scipy.stats.logn.pdf (i, लोकल, स्केल, शेप) के बजाय scipy.stats.lognorm.pdf (x, shape, loc, scale) को कॉल करें।
२१:१२

धन्यवाद, upquark, मैंने ऐसा ही परिणाम के साथ किया है। ग्राफ का पूरा आकार आर में दिए गए अपेक्षित परिणामों से बहुत अलग है। वास्तव में आर की तुलना में पूरी तरह से अलग वितरण की तरह दिखता है।
लिलियन मिलाग्रोस कैरास्किलो

1

लॉगनी के लिए स्किप में वितरण की तरह लगता है कि आर के समान नहीं है, या आम तौर पर, उसी वितरण के समान नहीं है जिससे मैं परिचित हूं। जॉन डी कुक ने इस पर छुआ है: http://www.johndcook.com/blog/2010/02/03/statutic-distributions-in-scipy/ http://www.johndcook.com/distributions_scipy.html

हालाँकि, पायथन में लॉगऑनॉर्मल डेंसिटी फ़ंक्शन का उपयोग करने के तरीके के बारे में मुझे कुछ भी निर्णायक नहीं मिला है। अगर कोई भी इसे जोड़ना चाहता है, तो कृपया स्वतंत्र महसूस करें।

मेरा अब तक का समाधान 0 से 180 (अनन्य) पर मूल्यांकन की गई lognormal pdf का उपयोग करना है, और अजगर स्क्रिप्ट में एक शब्दकोश के रूप में उपयोग किया जाता है।

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