2011-08-24 9 views
5
daList={62.8347, 88.5806, 74.8825, 61.1739, 66.1062, 42.4912, 62.7023, 
     39.0254, 48.3332, 48.5521, 51.5432, 69.4951, 60.0677, 48.4408, 
     59.273, 30.0093, 94.6293, 43.904, 59.6066, 58.7394, 68.6183, 83.0942, 
     73.1526, 47.7382, 75.6227, 58.7549, 59.2727, 26.7627, 89.493, 
     49.3775, 79.9154, 73.2187, 49.5929, 84.4546, 28.3952, 75.7541, 
     72.5095, 60.5712, 53.2651, 33.5062, 80.4114, 63.7094, 90.2438, 
     55.2248, 44.437, 28.1884, 4.77477, 36.8398, 70.3579, 28.1913, 
     43.9001, 23.8907, 12.7823, 22.3473, 57.6724, 49.0148} 

उपर्युक्त वास्तविक डेटा का नमूना है जिसके साथ मैं काम कर रहा हूं। मैं BinCounts उपयोग करें, लेकिन यह सिर्फ वर्णन करने के लिए नेत्रहीन हिस्टोग्राम यह करना चाहिए: मुझे लगता है कि हिस्टोग्राम के आकारगणित में BinCounts या हिस्टोग्राम के साथ FindFit

[email protected] 

enter image description here

मुझे पता है कि datapoints फिट करने के लिए फिट करने के लिए चाहते हैं खुद को पसंद:

model = 0.2659615202676218` E^(-0.2222222222222222` (x - \[Mu])^2) 
FindFit[data, model, \[Mu], x] 

जो मैं करना चाहता हूं उससे बहुत दूर है: मैं गणित में बिन-गणना/हिस्टोग्राम कैसे फिट कर सकता हूं?

उत्तर

19

आप एमएमए वी 8 है, तो आप नए DistributionFitTest

disFitObj = DistributionFitTest[daList, NormalDistribution[a, b],"HypothesisTestData"]; 

Show[ 
    SmoothHistogram[daList], 
    Plot[PDF[disFitObj["FittedDistribution"], x], {x, 0, 120}, 
     PlotStyle -> Red 
    ], 
    PlotRange -> All 
] 

enter image description here

disFitObj["FittedDistributionParameters"] 

(* ==> {a -> 55.8115, b -> 20.3259} *) 

disFitObj["FittedDistribution"] 

(* ==> NormalDistribution[55.8115, 20.3259] *) 

का उपयोग यह अन्य वितरण भी फिट कर सकते हैं कर सकते हैं।


एक अन्य उपयोगी वी 8 समारोह HistogramList जो आप Histogram की binning डेटा के साथ प्रदान करता है,। इसमें Histogram के विकल्प भी शामिल हैं।

{bins, counts} = HistogramList[daList] 

(* ==> {{0, 20, 40, 60, 80, 100}, {2, 10, 20, 17, 7}} *) 

centers = MovingAverage[bins, 2] 

(* ==> {10, 30, 50, 70, 90} *) 

model = s E^(-((x - \[Mu])^2/\[Sigma]^2)); 

pars = FindFit[{centers, counts}\[Transpose], 
        model, {{\[Mu], 50}, {s, 20}, {\[Sigma], 10}}, x] 

(* ==> {\[Mu] -> 56.7075, s -> 20.7153, \[Sigma] -> 31.3521} *) 

Show[Histogram[daList],Plot[model /. pars // Evaluate, {x, 0, 120}]] 

enter image description here

तुम भी फिटिंग के लिए NonlinearModeFit की कोशिश कर सकते। दोनों मामलों में अपने शुरुआती पैरामीटर मानों के साथ आना अच्छा होता है ताकि आप वैश्विक स्तर पर इष्टतम फिट के साथ सबसे बढ़िया अवसर प्राप्त कर सकें।


V7 में कोई HistogramList वहाँ है, लेकिन आप this का उपयोग कर एक ही सूची मिल सकता है:

हिस्टोग्राम [डेटा, bspec, एफएच] में समारोह एफ एच दो तर्कों को लागू किया जाता है: एक सूची डिब्बे {{सदस्यता [बी, 1], सदस्यता [बी, 2]}, {सदस्यता [बी, 2], सदस्यता [बी, 3]}, [एलिप्सिस]}, और संबंधित गणना की सूची {सदस्यता [ सी, 1], सदस्यता [सी, 2], [एलिप्सिस]}। फ़ंक्शन को प्रत्येक सदस्यता [सी, i] के लिए उपयोग की जाने वाली ऊंचाइयों की एक सूची वापस करनी चाहिए।

यह इस प्रकार है (from my earlier answer) का इस्तेमाल किया जा सकता है:

Reap[Histogram[daList, Automatic, (Sow[{#1, #2}]; #2) &]][[2]] 

(* ==> {{{{{0, 20}, {20, 40}, {40, 60}, {60, 80}, {80, 100}}, {2, 
    10, 20, 17, 7}}}} *) 

बेशक, आप अभी भी BinCounts उपयोग कर सकते हैं, लेकिन आप एमएमए के स्वत: binning एल्गोरिदम याद आती है।

counts = BinCounts[daList, {0, Ceiling[Max[daList], 10], 10}] 

(* ==> {1, 1, 6, 4, 11, 9, 9, 8, 5, 2} *) 

centers = Table[c + 5, {c, 0, Ceiling[Max[daList] - 10, 10], 10}] 

(* ==> {5, 15, 25, 35, 45, 55, 65, 75, 85, 95} *) 

pars = FindFit[{centers, counts}\[Transpose], 
       model, {{\[Mu], 50}, {s, 20}, {\[Sigma], 10}}, x] 

(* ==> \[Mu] -> 56.6575, s -> 10.0184, \[Sigma] -> 32.8779} *) 

Show[ 
    Histogram[daList, {0, Ceiling[Max[daList], 10], 10}], 
    Plot[model /. pars // Evaluate, {x, 0, 120}] 
] 

enter image description here

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

+0

आपको बहुत धन्यवाद, यह बहुत उपयोगी है। – 500