【发布时间】:2018-09-26 17:14:24
【问题描述】:
我已经建立了一个线性回归模型来检查来自这个dataset 的两个变量(chemical_1 和chemical_2)之间的关系。
根据结果,intercept = 16.83488364225717。
我刚刚开始发现数据科学的数学基础知识,我目前对截距的理解是,它是回归线与 y-axis(和 x=0)相交的值。所以现在我对使用 Seaborn 构建的结果感到困惑。
为什么它显示在 10 和 12 之间穿过 y-axis 的回归线,而不是截距 (16.83488364225717) 和 x=0 的实际值?我应该怎么做才能解决这个问题?
这是我的代码:
from scipy import stats
X = df['chemical_1']
Y = df['chemical_2']
slope, intercept, r_value, p_value, slope_std_error = stats.linregress(X,Y)
print ("slope = " + str(slope))
print ("intercept = " + str(intercept))
print ("r_squared = " + str(r_value**2))
print ("r_value = " + str(r_value))
print ("p_value = " +str(p_value))
slope = -0.9345759557752411
intercept = 16.83488364225717
r_squared = 0.04205938806347038
r_value = -0.20508385617466426
p_value = 0.00784469031490164
predict_y = slope * X + intercept
fig, ax = plt.subplots()
sns.set(color_codes=True)
sns.set(rc={'figure.figsize':(10, 10)})
ax = sns.regplot(x=X, y=Y, line_kws={'label':'$y=%3.7s*x+%3.7s$'%(slope, intercept)});
sns.regplot(x=X, y=Y, fit_reg=False, ax=ax);
sns.regplot(x=X, y=predict_y,scatter=False, ax=ax);
ax.set_ylabel('chemical_2')
ax.legend()
plt.show()
UPD:当我使用 Simon 提出的解决方案时 - 扩展轴的限制,截距仍然没有显示,情节看起来像这样:
当我使用 set_ylim(0,20) 时,绘图上的数据看起来很紧凑。实际上,我设置的任何轴参数(默认值除外)都会导致数据和图上的置信区间看起来被压缩。
【问题讨论】:
-
如果查看 x 轴,您会看到 x 轴从 6 下方开始,而不是 0。截距是函数在 x=0 处与 y 轴相交的位置,不是 x=6.8
-
@YngveMoe 是否可以将其可视化,以便
x-axis从 0 开始,截距在 16.83488364225717 处与y-axis交叉?
标签: python plot regression linear-regression seaborn