python - Linregress 输出似乎不正确
问题描述
我在我的数据框上绘制了一个散点图,如下所示:
带代码
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)
为什么会这样?这些输出值是否需要重新调整?
解决方案
的签名scipy.stats.mstats.linregress
是linregress(x,y)
您的第二次订购,linregress(average, Result)
与您的图表绘制方式一致。在该图上,截距 7138 似乎并非不合理——您是否对您显示的 x 轴限制不会下降到 0(截距实际发生的位置)这一事实感到困惑?
在任何情况下,您的数据看起来并不像它们遵循线性定律,因此斜率(或来自完全错误指定的模型的任何参数)实际上不会告诉您太多。x 和 y 值都严格为正吗?有没有什么特别的原因导致 x 在逻辑上永远不会低于 25?数据点当然似乎与垂直渐近线堆积在一起。如果是这样,我可能会从 x 中减去 25,然后将线性模型拟合到记录的数据。换句话说,用 and 做你的和你plot
的。编辑:既然你说 x 是温度,那么 x 不能低于 25 是没有逻辑的原因(例如,想要推断低于 25 是有意义的——甚至低于 0)。因此不要减去 25,也不要记录 x。只需登录 y。linregress
x=numpy.log(average-25)
y=numpy.log(Result)
在您的评论中,您谈到重新调整斜率,最终怀疑您认为这会给您一个相关系数。这些是不同的东西。相关系数是关于线周围点的分布以及斜率。如果您想要的是相关性,请使用该关键字查找相关工具。
推荐阅读
- ckeditor - Ckedior 未在源中设置 LTR 文本方向
- angular - Angular 5延迟加载模块在刷新时不起作用
- javascript - 在附加 url 参数之前删除查询字符串
- amazon-web-services - AWS S3 LISTING 很慢
- javascript - Object.Reduce 不返回正确的值
- python - TensorFlow 入门页面 - 打印前 5 行
- hadoop - 如何从配置单元查询中获取链接数据?
- vba - 比较并获得最佳日期和相关字段
- java - 随时接受更多 Observables 的 RxJava -2 Observables?
- webpack - 如何使用 webpack 预编译车把模板?