我试图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.
提前致谢.
(问题已解决; 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检查了我的结果).
Anderson函数仅询问一个参数,该参数应为一维数组。所以我想知道如何通过两个不同的数组进行比较吗?谢谢
我有一个简单的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) 嗨,我正在学习Statsmodel,无法找出StatsModels OLS回归中公式与*(交互术语)之间的区别.你能不能给我一个提示来解决这个问题?
谢谢!
文档:http: //statsmodels.sourceforge.net/devel/example_formulas.html
我试图通过使用循环找到最佳参数顺序:
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)
我想忽略这个警告,我该怎么办?有什么建议吗?
提前致谢.
给定代码:
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)
当df是pandas.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) 当我使用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中分解的时间序列信号,因此我转向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个月前的最后一次提交,因此我不确定我想在我的项目中依靠它。
我正在尝试测试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)
statsmodels ×10
python ×7
pandas ×3
statistics ×3
scipy ×2
chi-squared ×1
matplotlib ×1
mosaic-plot ×1
numpy ×1
python-2.7 ×1
python-3.x ×1
regression ×1
time-series ×1