我是静力学分析的新手,正在研究使用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的结果。