【发布时间】:2018-02-05 04:38:25
【问题描述】:
我是回归游戏的新手,希望为满足特定条件(即平均重复值超过阈值)的数据子集绘制功能任意的非线性回归线(加上置信区间和预测区间);请参阅下面)。
data 是为跨 20 个不同值的自变量 x 生成的:x=(20-np.arange(20))**2,每个条件都有 rep_num=10 重复。数据在x 中显示出很强的非线性,如下所示:
import numpy as np
mu = [.40, .38, .39, .35, .37, .33, .34, .28, .11, .24,
.03, .07, .01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
data = np.zeros((20, rep_num))
for i in range(13):
data[i] = np.clip(np.random.normal(loc=mu[i], scale=0.1, size=rep_num), 0., 1.)
我可以制作数据的散点图;复制均值用红点表示:
import matplotlib.pyplot as plt
plt.scatter(np.log10(np.tile(x[:,None], rep_num)), data,
facecolors='none', edgecolors='k', alpha=0.25)
plt.plot(np.log10(x), data.mean(1), 'ro', alpha=0.8)
plt.plot(np.log10(x), np.repeat(0., 20), 'k--')
plt.xlim(-0.02, np.max(np.log10(x)) + 0.02)
plt.ylim(-0.01, 0.7)
我的目标是只为那些重复均值 > 0.02 的数据绘制回归线。此外,我想在回归周围添加一个 95% 的置信区间(黑色虚线),以及一个 95% 的预测区间(蓝色虚线)——理想情况下,预测区间也可以用透明的蓝色着色背景。
最终图(预测区间内没有蓝色背景)看起来像这样:
我该怎么做呢?我的在线搜索使用 seaborn、scipy 和 statsmodels 产生了非常不同的部分方法。其中一些模板函数的应用似乎无法与现有的 matplotlib 散点图一起使用。
【问题讨论】:
-
你有回归模型吗? “非线性”可能很多..
-
@rammelmuller 不,我只是想曲线拟合并显示数据的总体趋势。到目前为止,我在
scipy.optimize下测试过的最好的模型是a*np.log2(c+x)+b,但它仍然不能很好地捕捉到饱和部分。 -
啊哈.. 我想预测总体趋势将具有一些合理的确定性,因为不同随机集之间的变化似乎相当大 - 一旦二阶多项式就可以完成这项工作,有时其他一些功能会得分更好..有足够的参数你可以做任何事情..
-
我应该指定我主要想绘制最后 13 个数据点(红点)的均值的总体趋势。在这种情况下,不同随机集之间的变化是否会影响均值的置信区间?
-
我猜这取决于模型有多好。
标签: python matplotlib statistics regression seaborn