二进制时间序列

机器算法验证 时间序列 二进制数据
2022-02-28 17:15:39

我有一个二进制时间序列:我们在 90 天内有 2160 个数据(0=没有发生,1=发生),持续一小时。

在此处输入图像描述

我想在这 90 天之后预测下一个 1 天会在哪里发生,并将此规定延长到下一个月。

3个回答

一种方法可能是假设伯努利序列可以通过使用 Probit 变换的潜在正态随机变量来描述。那是您实现的其中这样,您可以在变量上放置您喜欢的任何时间序列(例如 ARIMA)结构,然后使用标准时间序列技术来预测未来的观察结果(例如 Holt-Winters)。应该可以在 Stan 或 JAGS 中编写类似的代码,但鉴于伯努利过程为您提供的潜在状态的“玻璃黑暗”视图,您可能不会得到很好的预测。XtBernoulli(pt)ptΦ1(Yt)YN(μ,Σ)Y

最简单的模型是线性回归。您可以使用 ggplot 绘制数据:

#for reproducing
set.seed(200)
#simple example. Assume your data is simple binomial variable with probability 0.3
data <- data.frame(time = 1:200, val=sample(c(0,1), size = 200, replace = T, prob = c(0.3, 0.7)))

#plot using ggplot and add linear regression and confidence interval
ggplot(data, aes(x = time, y=val)) + geom_smooth(method=lm) +geom_point()

#Now we can try to create linear regression
y = data$time
    x = data$val
fitData <- lm(x ~ y)
predict(fitData, newdata = data.frame(y=201:224), interval="confidence")

这是最简单的模型,还有其他非线性模型可能更适合您的数据。另外,请记住,您可能必须使用日期日志才能更好地适应。关于多项式回归等非线性回归,您可以在此处阅读很多内容

现在,它需要额外的分析,但必须确定您的事件是否独立。有可能存在某种您可能无法考虑的混杂变量。您可能想在此处查看贝叶斯线性回归(假设您获得的维度不仅仅是时间和是/否值)

事故数据?我首先假设有每小时的季节性和每天的季节性。在不知道事故类型的情况下,您可能可以查看周一至周五的每小时汇总,并分别处理周六和周日的每小时,因此您有 3 个小时池,24 小时(周一至周五)、24 小时(周六)和24 日(星期日)。

进一步减少数据可能是可能的,但假设不是,只需取平均值。例如,周日下午 3 点的平均值可能是 0.3(发生事故的几率为 30%)。下午 4 点的平均值可能是 0.2,依此类推。

下午 3 点或 4 点不发生事故的概率为 (1-.3)(1-.2) = .56,因此在这两个小时内发生事故的概率为 0.44,以此类推。

这似乎是一个很好的、简单的起点。