2011-05-27 50 views
60

我试图在已生成的散点图上生成线性回归,但是我的数据是以列表格式显示的,并且使用polyfit的所有示例都需要使用arangearange虽然不接受列表。我已经搜索了如何将列表转换为数组,并且什么都看不清楚。我错过了什么吗?使用matplotlib/numpy进行线性回归

接下来,我如何最好地使用我的整数列表作为polyfit的输入?

这里是我下面的polyfit例如:

from pylab import * 

x = arange(data) 
y = arange(data) 

m,b = polyfit(x, y, 1) 

plot(x, y, 'yo', x, m*x+b, '--k') 
show() 

回答

120
arange

生成列表(当然,numpy的阵列);请输入help(np.arange)了解详情。你不需要在现有的列表上调用它。

>>> x = [1,2,3,4] 
>>> y = [3,5,7,9] 
>>> 
>>> m,b = np.polyfit(x, y, 1) 
>>> m 
2.0000000000000009 
>>> b 
0.99999999999999833 

我要补充一点,我倾向于使用poly1d这里,而不是写出来的“M * X + b”和高阶等价物,所以我对你的代码的版本将是这个样子:

import numpy as np 
import matplotlib.pyplot as plt 

x = [1,2,3,4] 
y = [3,5,7,10] # 10, not 9, so the fit isn't perfect 

fit = np.polyfit(x,y,1) 
fit_fn = np.poly1d(fit) 
# fit_fn is now a function which takes in x and returns an estimate for y 

plt.plot(x,y, 'yo', x, fit_fn(x), '--k') 
plt.xlim(0, 5) 
plt.ylim(0, 12) 
1

另一种快速和肮脏的答案是,你可以使用你的列表转换为一个数组:

import numpy as np 
arr = np.asarray(listname) 
22

此代码:

from scipy.stats import linregress 

linregress(x,y) #x and y are arrays or lists. 

给出了具有以下的列表:

斜率:浮动
斜率的回归直线的
截距:浮动
截距回归线
r值:浮
相关系数
p值:float
对于假设检验,其零假设双面p值是斜率为零
标准错误:浮动
估计

Source

标准误差