如何在Python中为数据分配T分布?

时间:2019-05-09 13:47:09

标签: python-3.x distribution kurtosis

我有一些x和y数据。绘制它们后,我得到一条类似高斯的线,但是我的如下图所示。我需要使分布适合这些数据,并通过这样做找出最能描述我的数据的方程式(分布的方程式)。稍后将使用该方程式作为模型来对其他数据进行预测。

我已经尝试过多项式和高斯分布(使用scikit Learn),但是它们似乎与数据不匹配(所示图片是通过使用具有scipy.optimize.curve_fit的高斯分布生成的,高斯显示为蓝星)。因此,我想我需要一个具有峰度/偏度参数的分布(如T分布)。为了产生这种分布并将其与我的数据一起绘制(当然会生成所需的方程式),我应该使用哪个软件包?该怎么做?

# Start a figure
-------------------------------------
f4 = plt.figure(4)


# State my data
-------------------------------------
x= np.arange(-13,11,1)
y = np.array([0,  2.59869336,  5.75879688,  8.54358764, 
14.25760514,20.39651375, 27.9283261 , 36.9502691 , 48.38957049, 
58.82419231, 69.28029367, 75.25587555, 79.01393489, 81.0284778 , 
79.39907802, 77.33067788, 73.25226941, 61.38545922, 53.49487923, 
41.49257598, 30.86641951, 22.14502495, 14.37682857,  8.39762302])

# Gaussian curve fitting
---------------------------------------

def _1gaussian(x, amp1,cen1,sigma1):
    return amp1*(1/(sigma1*(np.sqrt(2*np.pi))))*(np.exp(-((x- 
           cen1)**2)/((2*sigma1)**2)))
popt_gauss, pcov_gauss = scipy.optimize.curve_fit(_1gaussian, x, y, p0= 
[100, 0, np.std(x)**2])
perr_gauss = np.sqrt(np.diag(pcov_gauss))

# Plot the results
----------------------------------------
plot1 = plt.plot(x,np.multiply(y,100/np.nanmax(y)), '.-',linewidth=2.0, 
color='maroon') # This here is done because I need to normalize my data 
to 100

plt.plot(x,_1gaussian(x,*popt_gauss),'b*:',label='fit')
plt.xlim(-14,14)
leg1 = plt.legend(['Mean'],prop={'size': 15})
plt.xlabel('Temperature(C)', fontsize = 20)
for legobj in leg1.legendHandles:
    legobj.set_linewidth(3.0)
plt.ylabel('Utility score', fontsize = 20)
plt.title('Temperature utility score', fontsize = 15)

我期望的结果是选择与我的数据紧密匹配的分布。

enter image description here

0 个答案:

没有答案