我的任务是评估各种环境变量如何影响年度人口波动.为此,我需要为时间序列计数拟合泊松自回归模型:
其中N I,J是在现场观察到的个体数i
在一年j
,x_{i,j}
在现场环境变量i
在一年j
-这是输入数据,其余均为参数:\mu_{i,j}
在网站的个人的预期数量i
在一年j
,和\gamma_{j}
是随机的效果每年.
可以在R中安装这样的模型吗?我想避免在贝叶斯框架中拟合它,因为计算需要很长时间(我必须处理5000个这样的模型)我试图将模型转换为GLM,但是一旦我不得不添加随机效果(gamma)它就没有了更长的时间.
我似乎找不到正确的方法来模拟平均值不为零的 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 …
我正在尝试开始在 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)
我感觉这可能是一个错误,但我不确定,因为我没有使用该软件包的经验。也许有更多经验的人可以帮助我...
编辑:我已经在这里报告了这个问题。
我正在尝试测试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)
时间序列(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
我正在为 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) 我正在使用 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) 我正在尝试创建随机过程的可能路径的模拟,该过程不锚定到任何特定点。例如,将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
在自回归连续问题中,当零位占据过多位置时,可以将情况视为零膨胀问题(即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
在自回归 AR(p) 模型statsmodels v0.10.1
中无需选择滞后数。如果您选择不指定滞后数,模型将为您选择最适合自动运行模型的滞后数。在新版本中,该模型现在称为AutoReg,并且似乎滞后现在是强制性的。有没有办法让这个模型在新版本中选择最适合你的滞后数?0.11.1
python ×7
time-series ×6
statsmodels ×4
r ×3
generator ×2
keras ×2
arima ×1
forecasting ×1
glm ×1
gpt-2 ×1
statistics ×1
tensorflow ×1