Suu*_*hgi 6 python statistics regression confidence-interval
我有一个问题,我现在打了好几天.
如何计算拟合的(95%)置信区间?
将曲线拟合到数据是每个物理学家的日常工作 - 所以我认为这应该在某个地方实现 - 但我找不到这方面的实现,我也不知道如何以数学方式做到这一点.
我发现的唯一一件事就是线性最小二乘seaborn做得很好.
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd
x = np.linspace(0,10)
y = 3*np.random.randn(50) + x
data = {'x':x, 'y':y}
frame = pd.DataFrame(data, columns=['x', 'y'])
sns.lmplot('x', 'y', frame, ci=95)
plt.savefig("confidence_band.pdf")
Run Code Online (Sandbox Code Playgroud)

但这只是线性最小二乘法.当我想要拟合例如饱和度曲线时
,我搞砸了.
当然,我可以从最小二乘法的标准误差计算t分布,scipy.optimize.curve_fit但这不是我正在寻找的.
谢谢你的帮助!!
您可以使用StatsModels模块轻松实现此目的.
以下是您的问题的答案:
import numpy as np
from matplotlib import pyplot as plt
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import summary_table
x = np.linspace(0,10)
y = 3*np.random.randn(50) + x
X = sm.add_constant(x)
res = sm.OLS(y, X).fit()
st, data, ss2 = summary_table(res, alpha=0.05)
fittedvalues = data[:,2]
predict_mean_se = data[:,3]
predict_mean_ci_low, predict_mean_ci_upp = data[:,4:6].T
predict_ci_low, predict_ci_upp = data[:,6:8].T
fig, ax = plt.subplots(figsize=(8,6))
ax.plot(x, y, 'o', label="data")
ax.plot(X, fittedvalues, 'r-', label='OLS')
ax.plot(X, predict_ci_low, 'b--')
ax.plot(X, predict_ci_upp, 'b--')
ax.plot(X, predict_mean_ci_low, 'g--')
ax.plot(X, predict_mean_ci_upp, 'g--')
ax.legend(loc='best');
plt.show()
Run Code Online (Sandbox Code Playgroud)
