如何解决统计资料linregress倾斜并拦截错误
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats
xx = np.load('./x.npy')
yy = np.load('./y.npy')
fig,ax = plt.subplots()
fig = plt.gcf()
fig.set_size_inches(16,8)
labels = ['C1','C2']
colors = ['r','b']
for idx in range(2):
df = pd.DataFrame({'x': xx,'y': yy[idx]})
ax.set(xlim=(np.min(df.x),np.max(df.x)),ylim=(np.min(df.y),np.max(df.y)))
p = sns.regplot('x','y',df,scatter=False,order=2,ax=ax,label=labels[idx],color=colors[idx])
slope,intercept,r_value,p_value,std_err = stats.linregress(
x=p.get_lines()[0].get_xdata(),y=p.get_lines()[0].get_ydata())
formula = str(slope) + ' x\N{SUPERSCRIPT TWO} ' + str(intercept)
print('formula: ',formula)
我正在尝试计算sns.regplot拟合线的斜率和截距,它会给我:
formula: 82.53958162912909 x² 130.19916935648575
formula: 82.53958162912909 x² 130.19916935648575
其中:
-
从图中可以看出,这是错误的,对于x值为6,我们期望y值为600。
-
两条线的斜率和截距相同。我们希望会有所不同。
您可以找到x,y个文件here
解决方法
即使您已经在Line2D
和xx
中拥有数据,我也不知道为什么要从yy
对象中获取数据,但是无论如何:
在循环中计算回归时,每次迭代都传递相同的数据集(第[0]
行)。我想你是要写
slope,intercept,r_value,p_value,std_err = stats.linregress(
x=xx,y=yy[idx])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。