我有一系列实验数据值 X 和 Y 用于生成散点图,这个散点图看起来非常类似于伽马分布,我有阅读论文说这个实验数据可以用伽马分布表示/建模。
所以我编写了以下一些python代码来查找gamma分布常量:
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
我不在python代码中使用 X 数据集的事实有点令人不安,但是从我在Scipy文档中读到的内容我看不到在哪里使用它。这与python中的loc
变量有关吗? (从我所读到的不是)
X,Y 数据集包含3718个值,最小 Y 值为1.11E-297这可能导致问题吗?
提前感谢您的任何帮助或指导
答案 0 :(得分:0)
您似乎希望将$ Y $建模为$ X $,$ Y = f(X)$的非线性函数,而不是试图估算$ Y $的分布。显然从理论上考虑,$ f $是一个非负函数,曲线下面积为1,指数衰减尾(Wikipedia article on residence time distribution),因此你想使用概率密度函数,特别是Gamma distribution PDF。
这不是分布拟合问题,而是非线性回归问题。我不知道如何在Python中执行此操作,但快速搜索这些关键字会产生promising link。