Linregress输出似乎不正确

时间:2019-11-11 00:51:29

标签: python pandas numpy scipy

我在数据框上绘制了一个散点图,如下所示:

enter image description here

使用代码

from scipy import stats   
import pandas as pd
import seaborn as sns
df = pd.read_csv('/content/drive/My Drive/df.csv', sep=',') 
subset = df[:,1:10080]   
df['mean'] = subset.mean(axis=1)

df.plot(x='mean', y='Result', kind = 'scatter')
sns.lmplot('mean', 'Result', df, order=1)

我想使用代码在图中找到回归的斜率

scipy.stats.mstats.linregress(Result,average)        

但是从输出来看,斜率幅度似乎太小:

LinregressResult(slope=-0.0001320534706614152, intercept=27.887336813241845, rvalue=-0.16776138446214162, pvalue=3.0450456899520655e-07, stderr=2.55977061451773e-05)

如果我切换了Resultaverage的位置,

scipy.stats.mstats.linregress(average,Result)        

由于intercept太大,看起来还是不合适

LinregressResult(slope=-213.12489536011773, intercept=7138.48783135982, rvalue=-0.16776138446214162, pvalue=3.0450456899520655e-07, stderr=41.31287437069993)

为什么会这样?这些输出值是否需要重新缩放?

1 个答案:

答案 0 :(得分:0)

scipy.stats.mstats.linregress的签名为linregress(x,y),因此您的第二次排序linregress(average, Result)是与绘制图形的方式一致的签名。并且在该图上,截距7138似乎并不合理-您是否对所显示的x轴极限不会下降到0(实际上会发生截距)感到困惑?

在任何情况下,您的数据看起来都不像它们遵循线性定律,因此斜率(或完全错误指定的模型中的任何参数)实际上不会告诉您什么。 x和y值都严格为正吗?并且有一个特定的原因为什么x从逻辑上永远不会低于25?数据点显然似乎正与垂直渐近线相对应。如果是这样,我可能会从x减去25,然后将线性模型拟合到记录的数据。换句话说,用plotlinregressx=numpy.log(average-25)y=numpy.log(Result)。编辑:由于您说x是温度,所以没有逻辑上的理由使x不能低于25(例如,推断低于25(甚至低于0)很有意义)。因此,请勿减去25,也不要记录x。仅记录y。

在您的评论中,您谈到了重新调整坡度的比例,最终人们怀疑您会认为这将为您提供一个相关系数。这些是不同的东西。相关系数是关于线周围点的扩展以及斜率。如果您想要关联,请使用该关键字查找相关工具。