Python中OLS的Newey-West标准错误?

我想要一个系数和与之相关的Newey-West标准误差。

我正在寻找Python库(理想情况下,但是任何可行的解决方案都可以)可以完成以下R代码的工作:

library(sandwich)

library(lmtest)

a <- matrix(c(1,3,5,7,4,5,6,4,7,8,9))

b <- matrix(c(3,5,6,2,4,6,7,8,7,8,9))

temp.lm = lm(a ~ b)

temp.summ <- summary(temp.lm)

temp.summ$coefficients <- unclass(coeftest(temp.lm, vcov. = NeweyWest))

print (temp.summ$coefficients)

结果:

             Estimate Std. Error   t value  Pr(>|t|)

(Intercept) 2.0576208 2.5230532 0.8155281 0.4358205

b 0.5594796 0.4071834 1.3740235 0.2026817

我得到系数并与之相关的标准误差。

我看到statsmodels.stats.sandwich_covariance.cov_hac模块,但是我看不到如何使其与OLS一起使用。

回答:

编辑(10/31/2015)以反映statsmodels2015年秋季的首选编码样式

statsmodels0.6.1版中,您可以执行以下操作:

import pandas as pd

import numpy as np

import statsmodels.formula.api as smf

df = pd.DataFrame({'a':[1,3,5,7,4,5,6,4,7,8,9],

'b':[3,5,6,2,4,6,7,8,7,8,9]})

reg = smf.ols('a ~ 1 + b',data=df).fit(cov_type='HAC',cov_kwds={'maxlags':1})

print reg.summary()

OLS Regression Results

==============================================================================

Dep. Variable: a R-squared: 0.281

Model: OLS Adj. R-squared: 0.201

Method: Least Squares F-statistic: 1.949

Date: Sat, 31 Oct 2015 Prob (F-statistic): 0.196

Time: 03:15:46 Log-Likelihood: -22.603

No. Observations: 11 AIC: 49.21

Df Residuals: 9 BIC: 50.00

Df Model: 1

Covariance Type: HAC

==============================================================================

coef std err z P>|z| [95.0% Conf. Int.]

------------------------------------------------------------------------------

Intercept 2.0576 2.661 0.773 0.439 -3.157 7.272

b 0.5595 0.401 1.396 0.163 -0.226 1.345

==============================================================================

Omnibus: 0.361 Durbin-Watson: 1.468

Prob(Omnibus): 0.835 Jarque-Bera (JB): 0.331

Skew: 0.321 Prob(JB): 0.847

Kurtosis: 2.442 Cond. No. 19.1

==============================================================================

Warnings:

[1] Standard Errors are heteroscedasticity and autocorrelation robust (HAC) using 1 lags and without small sample correction

或者您可以get_robustcov_results在拟合模型后使用该方法:

reg = smf.ols('a ~ 1 + b',data=df).fit()

new = reg.get_robustcov_results(cov_type='HAC',maxlags=1)

print new.summary()

OLS Regression Results

==============================================================================

Dep. Variable: a R-squared: 0.281

Model: OLS Adj. R-squared: 0.201

Method: Least Squares F-statistic: 1.949

Date: Sat, 31 Oct 2015 Prob (F-statistic): 0.196

Time: 03:15:46 Log-Likelihood: -22.603

No. Observations: 11 AIC: 49.21

Df Residuals: 9 BIC: 50.00

Df Model: 1

Covariance Type: HAC

==============================================================================

coef std err z P>|z| [95.0% Conf. Int.]

------------------------------------------------------------------------------

Intercept 2.0576 2.661 0.773 0.439 -3.157 7.272

b 0.5595 0.401 1.396 0.163 -0.226 1.345

==============================================================================

Omnibus: 0.361 Durbin-Watson: 1.468

Prob(Omnibus): 0.835 Jarque-Bera (JB): 0.331

Skew: 0.321 Prob(JB): 0.847

Kurtosis: 2.442 Cond. No. 19.1

==============================================================================

Warnings:

[1] Standard Errors are heteroscedasticity and autocorrelation robust (HAC) using 1 lags and without small sample correction

的默认statsmodels值与中等效方法的默认值略有不同R。通过将调用更改为以下内容,R可以使该方法等效于statsmodels默认方法(如上所述)vcov,

temp.summ$coefficients <- unclass(coeftest(temp.lm, 

vcov. = NeweyWest(temp.lm,lag=1,prewhite=FALSE)))

print (temp.summ$coefficients)

Estimate Std. Error t value Pr(>|t|)

(Intercept) 2.0576208 2.6605060 0.7733945 0.4591196

b 0.5594796 0.4007965 1.3959193 0.1962142

您仍然可以在熊猫(0.17)中执行Newey-West,尽管我认为该计划将在熊猫中弃用OLS:

print pd.stats.ols.OLS(df.a,df.b,nw_lags=1)

-------------------------Summary of Regression Analysis-------------------------

Formula: Y ~ <x> + <intercept>

Number of Observations: 11

Number of Degrees of Freedom: 2

R-squared: 0.2807

Adj R-squared: 0.2007

Rmse: 2.0880

F-stat (1, 9): 1.5943, p-value: 0.2384

Degrees of Freedom: model 1, resid 9

-----------------------Summary of Estimated Coefficients------------------------

Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5%

--------------------------------------------------------------------------------

x 0.5595 0.4431 1.26 0.2384 -0.3090 1.4280

intercept 2.0576 2.9413 0.70 0.5019 -3.7073 7.8226

*** The calculations are Newey-West adjusted with lags 1

---------------------------------End of Summary---------------------------------

以上是 Python中OLS的Newey-West标准错误? 的全部内容, 来源链接: utcz.com/qa/420339.html

回到顶部