从 statsmodels OLS 结果中打印 'std err' 值
Print 'std err' value from statsmodels OLS results
(抱歉提问,但是 http://statsmodels.sourceforge.net/ 目前已关闭,我无法访问文档)
我正在使用 statsmodels
进行线性回归,基本上:
import statsmodels.api as sm
model = sm.OLS(y,x)
results = model.fit()
我知道我可以打印出完整的结果集:
print results.summary()
输出如下:
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.952
Model: OLS Adj. R-squared: 0.951
Method: Least Squares F-statistic: 972.9
Date: Mon, 20 Jul 2015 Prob (F-statistic): 5.55e-34
Time: 15:35:22 Log-Likelihood: -78.843
No. Observations: 50 AIC: 159.7
Df Residuals: 49 BIC: 161.6
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [95.0% Conf. Int.]
------------------------------------------------------------------------------
x1 1.0250 0.033 31.191 0.000 0.959 1.091
==============================================================================
Omnibus: 16.396 Durbin-Watson: 2.166
Prob(Omnibus): 0.000 Jarque-Bera (JB): 3.480
Skew: -0.082 Prob(JB): 0.175
Kurtosis: 1.718 Cond. No. 1.00
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
我需要一种方法来打印 仅 coef
和 std err
的值。
我可以通过以下方式访问 coef
:
print results.params
但我找不到打印出来的方法 std err
。
我该怎么做?
应用给出的答案 here I used dir() 来打印 results
对象的所有属性。
之后我搜索了包含 std err
值的那个,结果是:
print results.bse
(不确定 b
在 bse
中代表什么,但我猜 se
代表 "standard error")
以下函数可用于获得回归分析结果的概览。参数ols_model
是statsmodels.formula.api
生成的回归模型。输出是一个 pandas 数据框,保存回归系数、标准误差、p 值、观察数、AIC 和调整后的 rsquared。标准误差保存在括号中。 ***
、**
、*
分别代表0.001、0.01、0.1显着性水平:
def output_regres_result(ols_model, variable_list: list):
"""
Create a pandas dataframe saving the regression analysis result
:param ols_model: a linear model containing the regression result.
type: statsmodels.regression.linear_model.RegressionResultsWrapper
:param variable_list: a list of interested variable names
:return: a pandas dataframe saving the regression coefficient, pvalues, standard errors, aic,
number of observations, adjusted r squared
"""
coef_dict = ols_model.params.to_dict() # coefficient dictionary
pval_dict = ols_model.pvalues.to_dict() # pvalues dictionary
std_error_dict = ols_model.bse.to_dict() # standard error dictionary
num_observs = np.int(ols_model.nobs) # number of observations
aic_val = round(ols_model.aic, 2) # aic value
adj_rsqured = round(ols_model.rsquared_adj, 3) # adjusted rsqured
info_index = ['Num', 'AIC', 'Adjusted R2']
index_list = variable_list + info_index
for variable in variable_list:
assert variable in coef_dict, 'Something wrong with variable name!'
coef_vals = []
for variable in variable_list:
std_val = std_error_dict[variable]
coef_val = coef_dict[variable]
p_val = pval_dict[variable]
if p_val <= 0.01:
coef_vals.append('{}***({})'.format(round(coef_val, 4), round(std_val, 3)))
elif 0.01 < p_val <= 0.05:
coef_vals.append('{}**({})'.format(round(coef_val, 4), round(std_val, 3)))
elif 0.05 < p_val <= 0.1:
coef_vals.append('{}*({})'.format(round(coef_val, 4), round(std_val, 3)))
else:
coef_vals.append('{}({})'.format(round(coef_val, 4), round(std_val, 3)))
coef_vals.extend([num_observs, aic_val, adj_rsqured])
result_data = pd.DataFrame()
result_data['coef'] = coef_vals
result_data_reindex = result_data.set_index(pd.Index(index_list))
return result_data_reindex
估计的统计标准误差始终等于残差均方误差的平方根。可以使用公式 np.sqrt(results.mse_resid)
从结果中获得
results.bse
提供系数的标准误差,与 results.summary()
.
中列出的相同
使用results.scale**.5
获得回归的标准误差。
也与 np.sqrt(np.sum(results.resid**2)/results.df_resid)
相同,其中结果是您的拟合模型。
(抱歉提问,但是 http://statsmodels.sourceforge.net/ 目前已关闭,我无法访问文档)
我正在使用 statsmodels
进行线性回归,基本上:
import statsmodels.api as sm
model = sm.OLS(y,x)
results = model.fit()
我知道我可以打印出完整的结果集:
print results.summary()
输出如下:
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.952
Model: OLS Adj. R-squared: 0.951
Method: Least Squares F-statistic: 972.9
Date: Mon, 20 Jul 2015 Prob (F-statistic): 5.55e-34
Time: 15:35:22 Log-Likelihood: -78.843
No. Observations: 50 AIC: 159.7
Df Residuals: 49 BIC: 161.6
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [95.0% Conf. Int.]
------------------------------------------------------------------------------
x1 1.0250 0.033 31.191 0.000 0.959 1.091
==============================================================================
Omnibus: 16.396 Durbin-Watson: 2.166
Prob(Omnibus): 0.000 Jarque-Bera (JB): 3.480
Skew: -0.082 Prob(JB): 0.175
Kurtosis: 1.718 Cond. No. 1.00
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
我需要一种方法来打印 仅 coef
和 std err
的值。
我可以通过以下方式访问 coef
:
print results.params
但我找不到打印出来的方法 std err
。
我该怎么做?
应用给出的答案 here I used dir() 来打印 results
对象的所有属性。
之后我搜索了包含 std err
值的那个,结果是:
print results.bse
(不确定 b
在 bse
中代表什么,但我猜 se
代表 "standard error")
以下函数可用于获得回归分析结果的概览。参数ols_model
是statsmodels.formula.api
生成的回归模型。输出是一个 pandas 数据框,保存回归系数、标准误差、p 值、观察数、AIC 和调整后的 rsquared。标准误差保存在括号中。 ***
、**
、*
分别代表0.001、0.01、0.1显着性水平:
def output_regres_result(ols_model, variable_list: list):
"""
Create a pandas dataframe saving the regression analysis result
:param ols_model: a linear model containing the regression result.
type: statsmodels.regression.linear_model.RegressionResultsWrapper
:param variable_list: a list of interested variable names
:return: a pandas dataframe saving the regression coefficient, pvalues, standard errors, aic,
number of observations, adjusted r squared
"""
coef_dict = ols_model.params.to_dict() # coefficient dictionary
pval_dict = ols_model.pvalues.to_dict() # pvalues dictionary
std_error_dict = ols_model.bse.to_dict() # standard error dictionary
num_observs = np.int(ols_model.nobs) # number of observations
aic_val = round(ols_model.aic, 2) # aic value
adj_rsqured = round(ols_model.rsquared_adj, 3) # adjusted rsqured
info_index = ['Num', 'AIC', 'Adjusted R2']
index_list = variable_list + info_index
for variable in variable_list:
assert variable in coef_dict, 'Something wrong with variable name!'
coef_vals = []
for variable in variable_list:
std_val = std_error_dict[variable]
coef_val = coef_dict[variable]
p_val = pval_dict[variable]
if p_val <= 0.01:
coef_vals.append('{}***({})'.format(round(coef_val, 4), round(std_val, 3)))
elif 0.01 < p_val <= 0.05:
coef_vals.append('{}**({})'.format(round(coef_val, 4), round(std_val, 3)))
elif 0.05 < p_val <= 0.1:
coef_vals.append('{}*({})'.format(round(coef_val, 4), round(std_val, 3)))
else:
coef_vals.append('{}({})'.format(round(coef_val, 4), round(std_val, 3)))
coef_vals.extend([num_observs, aic_val, adj_rsqured])
result_data = pd.DataFrame()
result_data['coef'] = coef_vals
result_data_reindex = result_data.set_index(pd.Index(index_list))
return result_data_reindex
估计的统计标准误差始终等于残差均方误差的平方根。可以使用公式 np.sqrt(results.mse_resid)
results.bse
提供系数的标准误差,与 results.summary()
.
使用results.scale**.5
获得回归的标准误差。
也与 np.sqrt(np.sum(results.resid**2)/results.df_resid)
相同,其中结果是您的拟合模型。