我在数据框上绘制了一个散点图,如下所示:
使用代码
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)
如果我切换了Result
和average
的位置,
scipy.stats.mstats.linregress(average,Result)
由于intercept
太大,看起来还是不合适
LinregressResult(slope=-213.12489536011773, intercept=7138.48783135982, rvalue=-0.16776138446214162, pvalue=3.0450456899520655e-07, stderr=41.31287437069993)
为什么会这样?这些输出值是否需要重新缩放?
答案 0 :(得分:0)
scipy.stats.mstats.linregress
的签名为linregress(x,y)
,因此您的第二次排序linregress(average, Result)
是与绘制图形的方式一致的签名。并且在该图上,截距7138似乎并不合理-您是否对所显示的x轴极限不会下降到0(实际上会发生截距)感到困惑?
在任何情况下,您的数据看起来都不像它们遵循线性定律,因此斜率(或完全错误指定的模型中的任何参数)实际上不会告诉您什么。 x和y值都严格为正吗?并且有一个特定的原因为什么x从逻辑上永远不会低于25?数据点显然似乎正与垂直渐近线相对应。如果是这样,我可能会从x减去25,然后将线性模型拟合到记录的数据。换句话说,用plot
和linregress
做x=numpy.log(average-25)
和y=numpy.log(Result)
。编辑:由于您说x是温度,所以没有逻辑上的理由使x不能低于25(例如,推断低于25(甚至低于0)很有意义)。因此,请勿减去25,也不要记录x。仅记录y。
在您的评论中,您谈到了重新调整坡度的比例,最终人们怀疑您会认为这将为您提供一个相关系数。这些是不同的东西。相关系数是关于线周围点的扩展以及斜率。如果您想要关联,请使用该关键字查找相关工具。