Statsmodels OLS使用什么等式来创建示例拟合线

时间:2017-08-22 22:07:17

标签: python-3.x linear-regression statsmodels

我是静力学分析的新手,正在研究使用statsmodels。作为我研究的一部分,我遇到了以下examples集。

部分" OLS非线性曲线,但参数中的衬里"让我感到困惑。示例如下:

np.random.seed(9876789)
nsample = 50
sig = 0.5
x = np.linspace(0, 20, nsample)
X = np.column_stack((x, np.sin(x), (x-5)**2, np.ones(nsample)))
beta = [0.5, 0.5, -0.02, 5.]

y_true = np.dot(X, beta)
y = y_true + sig * np.random.normal(size = nsample)

res = sm.OLS(y, X).fit()
print(res.summary())

这显示以下摘要结果:

OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.933
Model:                            OLS   Adj. R-squared:                  0.928
Method:                 Least Squares   F-statistic:                     211.8
Date:                Tue, 28 Feb 2017   Prob (F-statistic):           6.30e-27
Time:                        21:33:30   Log-Likelihood:                -34.438
No. Observations:                  50   AIC:                             76.88
Df Residuals:                      46   BIC:                             84.52
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
x1             0.4687      0.026     17.751      0.000       0.416       0.522
x2             0.4836      0.104      4.659      0.000       0.275       0.693
x3            -0.0174      0.002     -7.507      0.000      -0.022      -0.013
const          5.2058      0.171     30.405      0.000       4.861       5.550
==============================================================================
Omnibus:                        0.655   Durbin-Watson:                   2.896
Prob(Omnibus):                  0.721   Jarque-Bera (JB):                0.360
Skew:                           0.207   Prob(JB):                        0.835
Kurtosis:                       3.026   Cond. No.                         221.
==============================================================================

当你绘制所有这些时,你得到: Plot of Data, Fit and True Line

令我感到困惑的是,我无法弄清楚拟合如何来自汇总表中显示的系数。我的理解是,线性拟合的这些系数应该与X1 * x^3 + X2 * X^2 + X3 * X + Const格式的方程对应,但这不会导致看到的曲线。我的下一个想法是,它可能是根据X矩阵中的值推断出方程式,因此类似于X1 * x + X2 * sin(x) + X3 * (x-5)^2 + Const。这也行不通。

似乎工作的是多项式拟合,其度数大约为10.我发现使用np.polyfit(x, y, 10)。 (其系数与OLS的系数不相似,另外还有6个)

所以我的问题是OLS用什么方程来产生预测值?系数如何与它相关?如果没有指定方程式(假设它使用的东西不同于正常的多项式方程式),它如何确定使用什么或最适合什么?

一个注意事项,我已经发现我可以通过np.vander()改变用于不同矩阵的x值来强制它做我期望的事情

X = np.vander(X, 4)

这会产生符合我的预期和np.polyfit的结果。

0 个答案:

没有答案