我有两个数据阵列,如高度和重量:
import numpy as np, matplotlib.pyplot as plt
heights = np.array([50,52,53,54,58,60,62,64,66,67,68,70,72,74,76,55,50,45,65])
weights = np.array([25,50,55,75,80,85,50,65,85,55,45,45,50,75,95,65,50,40,45])
plt.plot(heights,weights,'bo')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想制作类似于此的情节:
http://www.sas.com/en_us/software/analytics/stat.html#m=screenshot6
任何想法都表示赞赏.
我有一个问题,我现在打了好几天.
如何计算拟合的(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但这不是我正在寻找的.
谢谢你的帮助!!
我有两个变量的相关图,x轴上的预测变量(温度)和y轴上的响应变量(密度)。我最适合的最小二乘回归线是二阶多项式。我还要绘制置信度和预测间隔。此答案中描述的方法似乎很完美。但是,我的数据集(n = 2340)对许多(x,y)对都有重复的条目。我得到的情节看起来像这样:

这是我的相关代码(从上面的链接答案中略作修改):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.sandbox.regression.predstd import wls_prediction_std
import statsmodels.formula.api as smf
from statsmodels.stats.outliers_influence import summary_table
d = {'temp': x, 'dens': y}
df = pd.DataFrame(data=d)
x = df.temp
y = df.dens
plt.figure(figsize=(6 * 1.618, 6))
plt.scatter(x,y, s=10, alpha=0.3)
plt.xlabel('temp')
plt.ylabel('density')
# points linearly spaced for predictor variable
x1 = pd.DataFrame({'temp': np.linspace(df.temp.min(), df.temp.max(), 100)})
# 2nd order polynomial
poly_2 = smf.ols(formula='dens ~ 1 + temp + I(temp …Run Code Online (Sandbox Code Playgroud) 这更多是一个统计问题,因为代码运行良好,但我正在学习 python 中的回归建模。我在下面使用 statsmodel 编写了一些代码来创建一个简单的线性回归模型:
import statsmodels.api as sm
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ng = pd.read_csv('C:/Users/ben/ngDataBaseline.csv', thousands=',', index_col='Date', parse_dates=True)
X = ng['HDD']
y = ng['Therm']
# Note the difference in argument order
model = sm.OLS(y, X).fit()
# Print out the statistics
model.summary()
Run Code Online (Sandbox Code Playgroud)
我得到如下屏幕截图所示的输出。我正在尝试判断拟合优度,并且我知道 R^2 很高,但是是否可以使用 statsmodel 找到预测的均方根误差 (RMSE)?
我还试图研究是否可以用置信区间估计抽样分布。如果我正确解释截距 HDD 5.9309 的表格,标准误差为 0.220,p 值低 0.000,并且我认为 97.5% 的置信区间 HDD 的值(或者是我的因变量 Therm?)将在 5.489 和6.373?? 或者我认为可以用百分比表示为 ~ +- 0.072%
python ×3
regression ×2
statistics ×2
statsmodels ×2
matplotlib ×1
numpy ×1
pandas ×1
scipy ×1
seaborn ×1