这是我的numpy数组:
z
[[ 3.90311860e-322 1.83939721e-001]
[ 0.00000000e+000 1.83939721e-001]
[ 0.00000000e+000 9.96473555e-001]
[ 0.00000000e+000 1.83939721e-001]
[ 0.00000000e+000 1.03585447e+000]
[ 0.00000000e+000 1.83939721e-001]
[ 0.00000000e+000 1.83939721e-001]
[ 0.00000000e+000 9.41400244e-001]
[ 0.00000000e+000 1.01817846e+000]
[ 0.00000000e+000 1.83939721e-001]]
weights
[[ -1.76457791 -24.11966074]
[ -2.69231436 -24.11966074]
[-24.11966074 -2.0106293 ]
[ -1.99135789 -24.11966074]
[-24.11966074 -1.89735781]
[ -2.01441034 -24.11966074]
[ -2.37736986 -24.11966074]
[-24.11966074 -2.19061707]
[-24.11966074 -1.94675704]
[ -1.5983523 -24.11966074]]
X
[[ 0. 2.5 100. ]
[ 2. 5. 80. ]
[ 31. 50. -11. ]
[ -0.5 2. 90. …Run Code Online (Sandbox Code Playgroud) 我使用非常nicht 的代码对象arma_order_select_ic来找到最低的信息标准来选择 p- 和 q 值。
我不确定我是否做得对,或者代码是否只是偶然发现了一些错误......
在:
y = indexed_df
res = arma_order_select_ic(y, max_ar=7, max_ma=7, ic=['aic', 'bic', 'hqic'], trend='c', fit_kw=dict(method='css'))
print res
print ('AIC-order: {}' .format(res.aic_min_order))
print ('BIC-order: {}' .format(res.bic_min_order))
print ('HQIC-order: {}' .format(res.hqic_min_order))
Run Code Online (Sandbox Code Playgroud)
出去:
/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/base/model.py:466: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
Run Code Online (Sandbox Code Playgroud)
另外:它打印出三个矩阵样式列表(每个 IC 一个矩阵)和最终推荐:
AIC-order: (7, 5)
BIC-order: (7, 0)
HQIC-order: (7, 0)
Run Code Online (Sandbox Code Playgroud)
所以,整件事似乎都奏效了。
问题是,每次计算都会打印警告,大约需要 30-60 秒,即它非常慢!
我检查了相关的源代码(statsmodels/base/model.py)以及如何跳过打印 CovergenceWarning:
#TODO: hardcode scale?
if isinstance(retvals, dict):
mlefit.mle_retvals = retvals
if warn_convergence …Run Code Online (Sandbox Code Playgroud) 我使用 Statsmodels 生成了一个 OLS 线性回归模型,以基于大约 10 个自变量来预测因变量。自变量都是分类的。
我有兴趣仔细研究其中一个自变量的系数的显着性。有 4 个类别,因此有 3 个系数——每个系数都非常显着。我还想看看趋势在所有 3 个类别中的重要性。根据我的(有限的)理解,这通常是使用 Wald 检验并将所有系数与 0 进行比较来完成的。
这是如何使用 Statsmodels 完成的?我看到 OLS 函数有一个 Wald 测试方法。使用此方法时,您似乎必须传入所有系数的值。
我的方法如下......
首先,这里是所有的系数:
np.array(lm.params) = array([ 0.21538725, 0.05675108, 0.05020252, 0.08112228, 0.00074715,
0.03886747, 0.00981819, 0.19907263, 0.13962354, 0.0491201 ,
-0.00531318, 0.00242845, -0.0097336 , -0.00143791, -0.01939182,
-0.02676771, 0.01649944, 0.01240742, -0.00245309, 0.00757727,
0.00655152, -0.02895381, -0.02027537, 0.02621716, 0.00783884,
0.05065323, 0.04264466, -0.13068456, -0.15694931, -0.25518566,
-0.0308599 , -0.00558183, 0.02990139, 0.02433505, -0.01582824,
-0.00027538, 0.03170669, 0.01130944, 0.02631403])
Run Code Online (Sandbox Code Playgroud)
我只对参数 2-4 感兴趣(这是 3 个感兴趣的系数)。
coeffs = np.zeros_like(lm.params) …Run Code Online (Sandbox Code Playgroud) 我想使用第三列来加权熊猫交叉表中的结果。
例如,以下内容:
import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'bar'],
'B': [1, 1, 0, 0, 0],
'weight': [2, 3, 4, 5, 6]})
print(pd.crosstab(df.A, df.B))
Run Code Online (Sandbox Code Playgroud)
结果是:
B 0 1
A
bar 2 1
foo 1 1
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
B 0 1
A
bar 11 3
foo 4 2
Run Code Online (Sandbox Code Playgroud) scikit-learn 可以用于去除使用多元线性回归时高度相关的特征吗?
关于@behzad.nouri 发布的在 statsmodels 中捕获高度多重共线性的答案,我有一些问题可以避免我的困惑。
于是,他检验了自变量的5列或特征之间的高度多重共线性;每列有 100 行或数据。他得到 w[0] 接近于零。那么我可以说应该删除第一列或第一个自变量以避免非常高的多重共线性吗?
是否有一个 python 包(statsmodels/scipy/pandas/etc...)具有用于在 python 中估计具有自回归误差的线性回归模型的系数的功能,例如下面的 SAS 实现?http://support.sas.com/documentation/cdl/en/etsug/63348/HTML/default/viewer.htm#etsug_autoreg_sect003.htm
我正在运行一个ols模型,我需要知道所有系数,所以我可以在我的分析中使用它们.如何以与科学计数法不同的格式显示/保存系数?
model = sm.ols(formula="sales ~ product_category + quantity_bought + quantity_ordered + quantity_returned + season", data=final_email).fit()
print model.summary()
OLS Regression Results
==============================================================================
Dep. Variable: sales R-squared: 0.974
Model: OLS Adj. R-squared: 0.938
Method: Least Squares F-statistic: 27.26
Date: Tue, 18 Apr 2017 Prob (F-statistic): 5.39e-13
Time: 11:43:36 Log-Likelihood: -806.04
No. Observations: 60 AIC: 1682.
Df Residuals: 25 BIC: 1755.
Df Model: 34
Covariance Type: nonrobust
======================================================================================
coef std err t P>|t| [95.0% Conf. Int.]
--------------------------------------------------------------------------------------
Intercept -2.79e+05 2.883e+05 -0.987 0.333 -8.92e+05 …Run Code Online (Sandbox Code Playgroud) 在这里我问了如何在线性模型中计算 AIC。如果我用LinearRegression()方法替换方法linear_model.OLS以获得 AIC,那么如何计算 OLS 线性模型的斜率和截距?
import statsmodels.formula.api as smf
regr = smf.OLS(y, X, hasconst=True).fit()
Run Code Online (Sandbox Code Playgroud) 我想使用 Statsmodels 在 Python 中进行逻辑回归。
X 和 y 各有 750 行,y 是二元结果,X 中是 10 个特征(包括截距)。
这是 X 的前 12 行(最后一列是截距):
lngdp_ lnpop sxp sxp2 gy1 frac etdo4590 geogia \
0 7.367709 16.293980 0.190 0.036100 -1.682 132.0 1 0.916
1 7.509883 16.436258 0.193 0.037249 2.843 132.0 1 0.916
2 7.759187 16.589224 0.269 0.072361 4.986 132.0 1 0.916
3 7.922261 16.742384 0.368 0.135424 3.261 132.0 1 0.916
4 8.002359 16.901037 0.170 0.028900 1.602 132.0 1 0.916
5 7.929126 17.034786 0.179 0.032041 -1.465 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Python 中的 statsmodels MixedLM 包估计混合线性模型。拟合模型后,我现在想进行预测,但正在努力理解“预测”方法。
statsmodels 文档 ( http://www.statsmodels.org/dev/generated/statsmodels.regression.mixed_linear_model.MixedLM.predict.html ) 表明 predict 方法采用包含已估计模型参数的数组。我怎样才能检索这个数组?
y = raw_data['dependent_var']
X = raw_data[['var1', 'var2', 'var3']]
groups = raw_data['person_id']
model = sm.MixedLM(endog=y, exog=X, groups=groups)
result = model.fit()
Run Code Online (Sandbox Code Playgroud) python ×10
statsmodels ×10
pandas ×2
scikit-learn ×2
scipy ×2
statistics ×2
arrays ×1
crosstab ×1
forecasting ×1
format ×1
mixed-models ×1
numpy ×1
panel-data ×1
python-3.x ×1
regression ×1
time-series ×1