标签: statsmodels

在Python中使用statsmodels进行ADF测试

我试图statsmodels在Python中运行Augmented Dickey-Fuller测试,但我似乎错过了一些东西.

这是我正在尝试的代码:

import numpy as np
import statsmodels.tsa.stattools as ts

x = np.array([1,2,3,4,3,4,2,3])
result = ts.adfuller(x)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\Akavall\Desktop\Python\Stats_models\stats_models_test.py", line 12, in <module>
    result = ts.adfuller(x)
  File "C:\Python27\lib\site-packages\statsmodels-0.4.1-py2.7-win32.egg\statsmodels\tsa\stattools.py", line 201, in adfuller
    xdall = lagmat(xdiff[:,None], maxlag, trim='both', original='in')
  File "C:\Python27\lib\site-packages\statsmodels-0.4.1-py2.7-win32.egg\statsmodels\tsa\tsatools.py", line 305, in lagmat
    raise ValueError("maxlag should be < nobs")
ValueError: maxlag should be < nobs
Run Code Online (Sandbox Code Playgroud)

我的Numpy版本:1.6.1我的statsmodels版本:0.4.1我正在使用Windows.

我在这里查看文档,但无法弄清楚我做错了什么.我错过了什么?

提前致谢.

python statistics numpy statsmodels

5
推荐指数
1
解决办法
2万
查看次数

为什么Python中的t-test(scipy,statsmodels)会给出与R,Stata或Excel不同的结果?

(问题已解决; x,y和s1,s2的大小不同)

在R:

x <- c(373,398,245,272,238,241,134,410,158,125,198,252,577,272,208,260)
y <- c(411,471,320,364,311,390,163,424,228,144,246,371,680,384,279,303)
t.test(x,y)
t = -1.6229, df = 29.727, p-value = 0.1152
Run Code Online (Sandbox Code Playgroud)

在STATA和Excel中获得相同的数字

t.test(x,y,alternative="less")
t = -1.6229, df = 29.727, p-value = 0.05758
Run Code Online (Sandbox Code Playgroud)

无论我尝试哪种选项,我都无法使用statsmodels.stats.weightstats.ttest_ind或scipy.stats.ttest_ind复制相同的结果.

statsmodels.stats.weightstats.ttest_ind(s1,s2,alternative="two-sided",usevar="unequal")
(-1.8912081781378358, 0.066740317997990656, 35.666557473974343)

scipy.stats.ttest_ind(s1,s2,equal_var=False)
(array(-1.8912081781378338), 0.066740317997990892)

scipy.stats.ttest_ind(s1,s2,equal_var=True)
(array(-1.8912081781378338), 0.066664507499812745)
Run Code Online (Sandbox Code Playgroud)

必须有成千上万的人使用Python来计算t检验.我们都得到不正确的结果吗?(我通常依赖Python,但这次我用STATA检查了我的结果).

python scipy statsmodels

5
推荐指数
2
解决办法
6752
查看次数

我们如何在scipy.stats.anderson_ksamp中传递两个数据集?有人可以举例说明吗?

Anderson函数仅询问一个参数,该参数应为一维数组。所以我想知道如何通过两个不同的数组进行比较吗?谢谢

python statistics scipy chi-squared statsmodels

5
推荐指数
1
解决办法
1878
查看次数

Statsmodels镶嵌图ValueError:无法将float NaN转换为整数

我有一个简单的pandas DataFrame,我想为此创建一个马赛克图.这是我的代码:

import pandas as pd
from statsmodels.graphics.mosaicplot import mosaic 

mydata = pd.DataFrame({'id2': {64: 'Angelica', 
                               65: 'DXW_UID', 66: 'casuid01', 
                               67: 'casuid01', 68: 'EC93_uid', 
                               69: 'EC93_uid', 70: 'EC93_uid', 
                               60: 'DXW_UID',  61: 'AtmosFox', 
                               62: 'DXW_UID', 63: 'DXW_UID'}, 
                       'id1': {64: 'TGP', 
                               65: 'Retention01', 66: 'default',
                               67: 'default', 68: 'Musa_EC_9_3', 
                               69: 'Musa_EC_9_3', 70: 'Musa_EC_9_3', 
                               60: 'default', 61: 'default', 
                               62: 'default', 63: 'default'}})

mydata
            id1       id2
60      default   DXW_UID
61      default  AtmosFox
62      default   DXW_UID
63      default   DXW_UID
64          TGP  Angelica
65  Retention01   DXW_UID
66 …
Run Code Online (Sandbox Code Playgroud)

matplotlib pandas statsmodels mosaic-plot

5
推荐指数
1
解决办法
2065
查看次数

交互的区别:和StatsModels OLS回归中的公式的术语

嗨,我正在学习Statsmodel,无法找出StatsModels OLS回归中公式与*(交互术语)之间的区别.你能不能给我一个提示来解决这个问题?

谢谢!

文档:http: //statsmodels.sourceforge.net/devel/example_formulas.html

python statistics regression statsmodels

5
推荐指数
2
解决办法
3463
查看次数

如何忽略statsmodels最大似然收敛警告?

我试图通过使用循环找到最佳参数顺序:

d = 1    
for p in range(3):
    for q in range(3):
        try:
           order = (p, 0, q)
           params = (p, d, q)
           arima_mod = ARIMA(ts.dropna(), order).fit(method = 'css-mle', disp = 0)
                arima_mod_aics[params] = arima_mod.aic
            except:
                pass
Run Code Online (Sandbox Code Playgroud)

我收到了这样的信息:

/usr/local/lib/python2.7/dist-packages/statsmodels-0.6.1-py2.7-linux-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)

我想忽略这个警告,我该怎么办?有什么建议吗?

提前致谢.

python-2.7 statsmodels

5
推荐指数
2
解决办法
7580
查看次数

当我尝试拟合线性混合效应模型时,为什么statsmodels会引发IndedxError?

给定代码:

import statsmodels.api as sm
import statsmodels.formula.api as smf

df.reset_index(drop=True, inplace=True)
display(df.describe())
md = smf.mixedlm("c ~ iscorr", df, groups=df.subnum)
mdf = md.fit()
Run Code Online (Sandbox Code Playgroud)

dfpandas.DataFrame,我得到以下错误出来smf.mixedlm

IndexError                                Traceback (most recent call last)
<ipython-input-34-5373fe9b774a> in <module>()
      4 df.reset_index(drop=True, inplace=True)
      5 display(df.describe())
----> 6 md = smf.mixedlm("c ~ iscorr", df, groups=df.subnum)
      7 # mdf = md.fit()

/home/lthibault/.pyenv/versions/3.5.0/lib/python3.5/site-packages/statsmodels/regression/mixed_linear_model.py in from_formula(cls, formula, data, re_formula, subset, *args, **kwargs)
    651                                                subset=None,
    652                                                exog_re=exog_re,
--> 653                                                *args, **kwargs)
    654 
    655         # expand re names …
Run Code Online (Sandbox Code Playgroud)

python pandas statsmodels

5
推荐指数
1
解决办法
525
查看次数

获得ValueError:endog和exog的索引不对齐

当我使用FOR循环运行迭代来构建多个模型时,我遇到了上述错误.前两个具有相似数据集的模型构建良好.在构建第三个模型时,我收到此错误.抛出错误的代码是当我使用python的Statsmodel包调用sm.logit()时:

y = y_mort.convert_objects(convert_numeric=True)

#Building Logistic model_LSVC
print("Shape of y:", y.shape, " &&Shape of X_selected_lsvc:", X.shape)
print("y values:",y.head())
logit = sm.Logit(y,X,missing='drop') 
Run Code Online (Sandbox Code Playgroud)

出现的错误:

Shape of y: (9018,)  &&Shape of X_selected_lsvc: (9018, 59)
y values: 0    0
1    1
2    0
3    0
4    0
Name: mort, dtype: int64
ValueError                                Traceback (most recent call last)
<ipython-input-8-fec746e2ee99> in <module>()
    160     print("Shape of y:", y.shape, " &&Shape of X_selected_lsvc:", X.shape)
    161     print("y values:",y.head())
--> 162     logit = sm.Logit(y,X,missing='drop')
    163     # fit the model
    164 …
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas statsmodels

5
推荐指数
2
解决办法
9756
查看次数

使用不带DatetimeIndex但频率已知的statsmodels.seasonal_decompose()

我有一个要在Python中分解的时间序列信号,因此我转向statsmodels.seasonal_decompose()。我的数据频率为48(半小时)。我遇到了与该发问者相同的错误,其中的解决方案是将Int索引更改为DatetimeIndex。但是我不知道数据的实际日期/时间。

这个github线程中,其中一个statsmodels贡献者说

“在0.8中,您应该能够将freq指定为关键字参数以覆盖索引。”

但这对我而言并非如此。这是说明我的问题的最小代码示例:

import statsmodels.api as sm
dta = pd.Series([x%3 for x in range(100)])
decomposed = sm.tsa.seasonal_decompose(dta, freq=3)

AttributeError: 'RangeIndex' object has no attribute 'inferred_freq'
Run Code Online (Sandbox Code Playgroud)

版本信息:

import statsmodels
print(statsmodels.__version__)
0.8.0
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以分解具有指定频率但没有DatetimeIndex的statsmodels中的时间序列?

如果没有,是否有在Python中执行此操作的首选方法?我签出了Seasonal软件包,但是它的github列出了每月0次下载,一个贡献者以及9个月前的最后一次提交,因此我不确定我想在我的项目中依靠它。

python time-series statsmodels

5
推荐指数
1
解决办法
5218
查看次数

Statsmodels ARMA训练数据与测试数据进行预测

我正在尝试测试ARMA模型,并通过此处提供的示例进行工作:

http://www.statsmodels.org/dev/examples/notebooks/generated/tsa_arma_0.html

我无法告诉您是否存在直接的方法来在训练数据集上训练模型然后在测试数据集上对其进行测试。在我看来,您必须使模型适合整个数据集。然后,您可以进行样本内预测,该预测使用与训练模型时相同的数据集。或者,您可以进行样本外预测,但这必须从训练数据集的末尾开始。相反,我想做的是将模型拟合到训练数据集上,然后在不属于训练数据集的完全不同的数据集上运行模型,并获得一系列提前1步的预测。

为了说明这个问题,这里是上面链接的缩写代码。您会看到模型拟合了1700-2008年的数据,然后预测了1990-2012年。我的问题是1990-2008年已经是用于拟合模型的数据的一部分,所以我认为我正在预测和训练相同的数据。我希望能够获得一系列没有前瞻性偏差的第一步预测。

import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

dta = sm.datasets.sunspots.load_pandas().data
dta.index = pandas.Index(sm.tsa.datetools.dates_from_range('1700', '2008'))
dta = dta.drop('YEAR',1)

arma_mod30 = sm.tsa.ARMA(dta, (3, 0)).fit(disp=False)
predict_sunspots = arma_mod30.predict('1990', '2012', dynamic=True)

fig, ax = plt.subplots(figsize=(12, 8))
ax = dta.ix['1950':].plot(ax=ax)
fig = arma_mod30.plot_predict('1990', '2012', dynamic=True, ax=ax, plot_insample=False)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

python statsmodels autoregressive-models

5
推荐指数
1
解决办法
776
查看次数