标签: autoregressive-models

如何在R中拟合自回归泊松混合模型(计数时间序列)?

我的任务是评估各种环境变量如何影响年度人口波动.为此,我需要为时间序列计数拟合泊松自回归模型:

在此输入图像描述

其中N I,J是在现场观察到的个体数i在一年j,x_{i,j}在现场环境变量i在一年j-这是输入数据,其余均为参数:\mu_{i,j}在网站的个人的预期数量i在一年j,和\gamma_{j}是随机的效果每年.

可以在R中安装这样的模型吗?我想避免在贝叶斯框架中拟合它,因为计算需要很长时间(我必须处理5000个这样的模型)我试图将模型转换为GLM,但是一旦我不得不添加随机效果(gamma)它就没有了更长的时间.

r time-series glm autoregressive-models

14
推荐指数
2
解决办法
4382
查看次数

在 ARIMA 或 VAR 模型中选择特定滞后

我在这里这里看到了这个问题,但不幸的是答案并不令人满意。在 中的p参数VAR或 中的order参数中输入滞后arima,R 将包括处于和低于该规定值的所有滞后。

但是,如果您只想要特定的滞后怎么办?例如,如果我只想要 VAR 中的滞后 1、2 和 4,该怎么办?输入 P=4 inVAR会给我滞后 1,2,3 和 4,但我想排除第三个滞后。

在第一个链接中,用户通过说明他可以使用季节性参数来包括滞后 1,2 和 4 来提供答案,因为他的数据是季度性的,但这仅适用于特殊情况,不是通用解决方案。

statistics r time-series autoregressive-models

6
推荐指数
1
解决办法
6075
查看次数

ar(1) 非零均值模拟

我似乎找不到正确的方法来模拟平均值不为零的 AR(1) 时间序列。我需要 53 个数据点,rho = .8,平均值 = 300。

但是,arima.sim(list(order=c(1,0,0), ar=.8), n=53, mean=300, sd=21) 给了我 1500 年代的值。例如:

1480.099 1480.518 1501.794 1509.464 1499.965 1489.545 1482.367 1505.103(以此类推)

我也试过, arima.sim(n=52, model=list(ar=c(.8)), start.innov=300, n.start=1) 但它只是像这样倒计时:

238.81775870 190.19203239 151.91292491 122.09682547 96.27074057 [6] 77.17105923 63.15148491 50.04211711 39.68465916 32.46837830 24.78357345 21.27437183 15.93486092 13.40199333 10.99762449 8.70208879 5.62264196 3.15086491 2.13809323 1.30009732

我试过arima.sim(list(order=c(1,0,0), ar=.8), n=53,sd=21) + 300这似乎给出了正确的答案。例如:

280.6420 247.3219 292.4309 289.8923 261.5347 279.6198 290.6622 295.0501 264.4233 273.8532 261.9590 278.0217 300.6825 291.4469 291.5964 293.5710 285.0330 274.5732 285.2396 298.0211 …

r time-series autoregressive-models

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

在 Python 中使用 statsmodels 的自回归模型

我正在尝试开始在 statsmodels 中使用 AR 模型。但是,我似乎做错了什么。考虑以下失败的示例:

from statsmodels.tsa.ar_model import AR
import numpy as np

signal = np.ones(20)
ar_mod = AR(signal)
ar_res = ar_mod.fit(4)

ar_res.predict(4, 60)
Run Code Online (Sandbox Code Playgroud)

我认为这应该继续由 1 组成的(微不足道的)时间序列。但是,在这种情况下,它似乎返回的参数不足。len(ar_res.params)等于 4,而它应该是 5。在下面的例子中它工作:

signal = np.ones(20)
signal[range(0, 20, 2)] = -1
ar_mod = AR(signal)
ar_res = ar_mod.fit(4)

ar_res.predict(4, 60)
Run Code Online (Sandbox Code Playgroud)

我感觉这可能是一个错误,但我不确定,因为我没有使用该软件包的经验。也许有更多经验的人可以帮助我...

编辑:我已经在这里报告了这个问题。

python statsmodels autoregressive-models

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

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
查看次数

ARMA.predict的预测间隔

时间序列(print arma_mod.summary())的ARMA预测摘要显示了一些有关置信区间的数字。可以在显示预测值的图中将这些数字用作预测间隔吗?

ax = indexed_df.ix[:].plot(figsize=(12,8))
ax = predict_price.plot(ax=ax, style='rx', label='Dynamic Prediction');
ax.legend(); 
Run Code Online (Sandbox Code Playgroud)

我猜代码:

from statsmodels.sandbox.regression.predstd import wls_prediction_std
prstd, iv_l, iv_u = wls_prediction_std(results)
Run Code Online (Sandbox Code Playgroud)

在这里找到:模型预测的置信区间

...不适用于OLS,而不适用于ARMA预测。我还检查了github,但没有发现任何可能与时间序列预测有关的新内容。

(我想做出预测需要一定的预测间隔,特别是在样本超标的情况下。)

帮助表示赞赏。

python time-series confidence-interval forecasting autoregressive-models

4
推荐指数
1
解决办法
3569
查看次数

如何使用keras生成具有多个输入的序列数据?

我正在为 keras 中的序列到序列问题编写 VAE。解码器是一个自回归模型,因此我有两个不同的输入,一个用于编码器,另一个用于解码器(移位 1,但这不是问题)。我还想做数据增强,所以我决定使用 fit_generator() 方法,但在返回两个输入时遇到一些问题。

我尝试返回两个输入向量的列表,如下所示

class DataGenerator(Sequence):
    def __init__(....

    def __getitem__(self, index):
        data = create_data()
        return  [data, data]
Run Code Online (Sandbox Code Playgroud)

或者像这样的字典

return {"encoder_input_name" : "data, decoder_input_name" : data } 
Run Code Online (Sandbox Code Playgroud)

其中 data 是形状为 (batch_size, max_sequence_len, input_dimention) 的 numpy 张量。

我不能只使用相同的输入层,因为稍后两个输入会有点不同,正如我所说,解码器输入将被具有不同第一个元素和其他原因的一个移动。

当我返回列表 [data, data] 或出现此错误时:

ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), but instead got the following list …
Run Code Online (Sandbox Code Playgroud)

python generator autoregressive-models keras tensorflow

4
推荐指数
1
解决办法
3080
查看次数

如何使用停用词列表提前停止自回归模型?

我正在使用 GPT-Neo 模型来transformers生成文本。因为我使用的提示以 开头'{',所以我想在'}'生成配对后停止该句子。我发现源代码中有一个StoppingCriteria方法,但没有进一步说明如何使用它。有人找到了提前停止模型生成的方法吗?谢谢!

这是我尝试过的:

from transformers import StoppingCriteria, AutoModelForCausalLM, AutoTokenizer
model_name = 'gpt2'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, pad_token_id=tokenizer.eos_token_id, torch_dtype=dtype).eval()

class KeywordsStoppingCriteria(StoppingCriteria):
    def __init__(self, keywords_ids:list):
        self.keywords = keywords_ids

    def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool:
        if input_ids in self.keywords:
            return True
        return False

stop_words = ['}', ' }', '\n']
stop_ids = [tokenizer.encode(w) for w in stop_words]
stop_ids.append(tokenizer.eos_token_id)
stop_criteria = KeywordsStoppingCriteria(stop_ids)

model.generate(
    text_inputs='some text:{', 
    StoppingCriteria=stop_criteria
)

Run Code Online (Sandbox Code Playgroud)

python autoregressive-models huggingface-transformers gpt-2

4
推荐指数
1
解决办法
2938
查看次数

SARIMAX 模拟可能的路径

我正在尝试创建随机过程的可能路径的模拟,该过程不锚定到任何特定点。例如,将SARIMAX模型拟合到天气温度数据,然后使用该模型来模拟温度。

这里我使用页面中的标准演示statsmodels作为一个更简单的示例:

import numpy as np
import pandas as pd
from scipy.stats import norm
import statsmodels.api as sm
import matplotlib.pyplot as plt
from datetime import datetime
import requests
from io import BytesIO
Run Code Online (Sandbox Code Playgroud)

拟合模型:

wpi1 = requests.get('https://www.stata-press.com/data/r12/wpi1.dta').content
data = pd.read_stata(BytesIO(wpi1))
data.index = data.t
# Set the frequency
data.index.freq="QS-OCT"

# Fit the model
mod = sm.tsa.statespace.SARIMAX(data['wpi'], trend='c', order=(1,1,1))
res = mod.fit(disp=False)
print(res.summary())
Run Code Online (Sandbox Code Playgroud)

创建模拟:

res.simulate(len(data),  repetitions=10).plot();
Run Code Online (Sandbox Code Playgroud)

这是历史:

在此输入图像描述

这是模拟:

在此输入图像描述

模拟曲线分布广泛且彼此分离,因此这是没有意义的。最初的历史进程并没有那么大的差异。我理解错了什么?如何进行正确的模拟?

python stochastic-process statsmodels autoregressive-models arima

3
推荐指数
1
解决办法
453
查看次数

将sample_weights与fit_generator()一起使用

在自回归连续问题中,当零位占据过多位置时,可以将情况视为零膨胀问题(即ZIB)。换句话说,不是要拟合f(x),我们要拟合g(x)*f(x)where f(x)是我们要近似的函数,即y,并且g(x)是一个根据值是零还是非零而输出介于0和1之间的值的函数。

目前,我有两个模型。一个给我的g(x)模型,另一个给我的模型g(x)*f(x)

第一个模型给了我一组权重。这是我需要您帮助的地方。我可以将sample_weights参数与一起使用model.fit()。当我处理大量数据时,则需要使用model.fit_generator()。但是,fit_generator()没有论点sample_weights

sample_weights内部解决方案fit_generator()吗?否则,g(x)*f(x)如果我已经有训练有素的模型,我该如何适应g(x)

machine-learning time-series generator autoregressive-models keras

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

自动选择自回归模型 statsmodels 的滞后

自回归 AR(p) 模型statsmodels v0.10.1中无需选择滞后数。如果您选择不指定滞后数,模型将为您选择最适合自动运行模型的滞后数。在新版本中,该模型现在称为AutoReg,并且似乎滞后现在是强制性的。有没有办法让这个模型在新版本中选择最适合你的滞后数?0.11.1

python time-series statsmodels autoregressive-models

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