2014-10-06 92 views
1

我有一系列的實驗數據的值Xÿ這是用於生產的分佈圖,該散點圖看起來非常相似伽瑪分佈,我讀過論文,說這個實驗數據可以用gamma分佈表示/建模。Python的gamma.fit返回值,似乎沒有給予正確分佈在Excel

所以我寫的Python代碼如下一下,找到了伽瑪分佈常數:

import csv 
import random 
import scipy as sp 
import scipy.stats as ss 

from collections import defaultdict 
columns = defaultdict(list) 
with open('case_1_RTD.csv') as f: 
    reader=csv.reader(f) 
    reader.next() 
    for row in reader: 
     for(i,v) in enumerate(row): 
      columns[i].append(v) 
X=(columns[0]) 
Y=(columns[1]) 

data=[float(i) for i in Y] 

alpha= [] 
beta=[] 
loc=[] 

alpha,loc,beta=ss.gamma.fit(data, floc=0) 
print (alpha,loc,beta) 

然後我用的輸出從這個生成Excel中的伽瑪分佈和比較這新的Gamma分佈數據原始X,Y數據。數據值的集合根本就不是。

在Excel中我使用的功能

=Gamma.Dist(X,alpha,beta,False) #I have tried switching alpha and beta around but no luck 

,我不使用X數據在Python代碼中設置的事實是有點不安,但是從我在SciPy的文檔,我已閱讀無法看到在哪裏使用它。這是否與python中的loc變量有關? (從我讀它並不)

X,Y數據集包含3718個值最小的枝條Ÿ價值被1.11E-297可這會造成一個問題?

預先感謝任何幫助或指導

+0

你的代碼適合'Y'直方圖的伽瑪分佈。 'X'和'Y'的值是什麼意思? – Aniko 2014-10-07 15:51:57

+0

它們代表流體流動的停留時間分佈(RTD),Y是退出年齡,X是時間,它們都是非空間的。 – MechE 2014-10-10 07:46:41

回答

0

你似乎在尋找到模型$ Y $爲$ X $,$ Y = F(X)$的非線性函數,而不是試圖估計$ Y $的分佈。顯然,從理論上考慮,$ f $是一個非負函數,曲線下面積爲1,指數衰減尾部(Wikipedia article on residence time distribution),因此您需要使用概率密度函數,特別是Gamma distribution pdf。

這不是一個分佈擬合問題,而是一個非線性迴歸問題。我不知道如何在Python中做到這一點,但快速搜索這些關鍵字帶來了promising link