首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用季节性周期对时间序列中的缺失值进行插值

用季节性周期对时间序列中的缺失值进行插值
EN

Stack Overflow用户
提问于 2011-02-11 00:12:27
回答 4查看 12.1K关注 0票数 14

我有一个时间序列,我想智能地插入缺失值。特定时间的值受到多天趋势的影响,以及它在每日周期中的位置。

以下是myzoo中缺少第十个观察值的示例

代码语言:javascript
运行
AI代码解释
复制
start <- as.POSIXct("2010-01-01") 
freq <- as.difftime(6, units = "hours") 
dayvals <- (1:4)*10 
timevals <- c(3, 1, 2, 4) 
index <- seq(from = start, by = freq, length.out = 16)
obs <- (rep(dayvals, each = 4) + rep(timevals, times = 4))
myzoo <- zoo(obs, index)
myzoo[10] <- NA

如果我必须实现这一点,我会使用附近几天的某种加权平均收盘时间,或者将当天的值添加到适合更大趋势的函数线,但我希望已经存在一些适用于这种情况的包或函数?

编辑:稍微修改了代码,以澄清我的问题。有一些na.*方法可以从最近的邻居处进行插值,但在这种情况下,它们不会识别缺失值位于当天的最低值的时间。也许解决方案是将数据重塑为宽格式,然后进行插值,但我不想完全忽略同一天的邻接值。值得注意的是,diff(myzoo, lag = 4)返回一个10的向量。解决方案可能在于reshapena.splinediff.inv的某种组合,但我就是想不出来。

以下是三种不起作用的方法:

EDIT2。使用以下代码生成的图像。

代码语言:javascript
运行
AI代码解释
复制
myzoo <- zoo(obs, index)
myzoo[10] <- NA # knock out the missing point
plot(myzoo, type="o", pch=16) # plot solid line
points(na.approx(myzoo)[10], col = "red")
points(na.locf(myzoo)[10], col = "blue")
points(na.spline(myzoo)[10], col = "green")
myzoo[10] <- 31 # replace the missing point
lines(myzoo, type = "o", lty=3, pch=16) # dashed line over the gap
legend(x = "topleft", 
       legend = c("na.spline", "na.locf", "na.approx"), 
       col=c("green","blue","red"), pch = 1)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-11 11:45:23

试试这个:

代码语言:javascript
运行
AI代码解释
复制
x <- ts(myzoo,f=4)
fit <- ts(rowSums(tsSmooth(StructTS(x))[,-2]))
tsp(fit) <- tsp(x)
plot(x)
lines(fit,col=2)

其思想是使用时间序列的基本结构模型,该模型使用卡尔曼滤波器精细地处理缺失值。然后使用卡尔曼平滑法估计时间序列中的每个点,包括任何省略的点。

为了使用StructTS,我不得不将你的zoo对象转换为频率为4的ts对象。您可能希望再次将拟合值更改回zoo。

票数 17
EN

Stack Overflow用户

发布于 2011-02-11 02:52:27

在这种情况下,我认为您需要在ARIMA模型中进行季节性校正。这里没有足够的日期来适应季节模型,但这应该可以让你开始。

代码语言:javascript
运行
AI代码解释
复制
library(zoo)
start <- as.POSIXct("2010-01-01") 
freq <- as.difftime(6, units = "hours") 
dayvals <- (1:4)*10 
timevals <- c(3, 1, 2, 4) 
index <- seq(from = start, by = freq, length.out = 16)
obs <- (rep(dayvals, each = 4) + rep(timevals, times = 4))
myzoo <- myzoo.orig <- zoo(obs, index)
myzoo[10] <- NA

myzoo.fixed <- na.locf(myzoo)

myarima.resid <- arima(myzoo.fixed, order = c(3, 0, 3), seasonal = list(order = c(0, 0, 0), period = 4))$residuals
myzoo.reallyfixed <- myzoo.fixed
myzoo.reallyfixed[10] <- myzoo.fixed[10] + myarima.resid[10]

plot(myzoo.reallyfixed)
points(myzoo.orig)

在我的测试中,ARMA(3,3)非常接近,但这只是运气。对于较长的时间序列,您应该能够校准季节性校正,以提供良好的预测。对信号和季节校正的潜在机制有一个很好的先验,以获得更好的样本性能,这将是有帮助的。

票数 2
EN

Stack Overflow用户

发布于 2016-03-22 00:57:23

forecast::na.interp是一个很好的方法。从documentation

对非季节性序列使用线性插值,并使用季节性序列的周期性stl分解来替换缺失值。

代码语言:javascript
运行
AI代码解释
复制
library(forecast)
fit <- na.interp(myzoo)
fit[10]  # 32.5, vs. 31.0 actual and 32.0 from Rob Hyndman's answer

This paper针对实时序列评估了几种插值方法,并发现na.interp既准确又高效:

本文测试的R实现中的

、预测包中的na.interp和zoo包中的na.StructTS显示了最佳的总体结果。

na.interp函数也不会比最快的方法na.approx慢太多,因此在计算时间方面,loess分解似乎不是很苛刻。

同样值得注意的是,Rob Hyndman编写了forecast包,并在提供了对此问题的答案后包含了na.interpna.interp很可能是对这种方法的改进,尽管它在这种情况下表现较差(可能是因为在StructTS中指定了句点,na.interp会找出答案)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4964255

复制
相关文章
flask 使用sendgrid发送邮件(flask 33)
import sendgrid from sendgrid.helpers.mail import Email as SGEmail, Content, Mail as SGMail from flask_mail import Mail, Message from flask_wtf import FlaskForm from wtforms import StringField, TextAreaField, SubmitField from wtforms.validators import DataRequired, Email from flask import Flask, flash, redirect, url_for, render_template, request
用户5760343
2019/08/13
8470
Linux下使用Shell为SendGrid Email API 发送邮件
将代码存为shell文件,将上一个文件的echo输出改成执行此文件即可自动推送到邮箱。
子润先生
2021/06/14
1.1K0
使用 PHP发送电子邮件
PHP 运行邮件函数需要一个已安装且正在运行的邮件系统(如:sendmail、postfix、qmail等)。所用的程序通过在 php.ini 文件中的配置设置进行定义。
小颖club
2022/04/11
2.6K0
python利用flask_mail、sendgrid发送邮件[通俗易懂]
在学习Flask,看的书籍是《Flask Web开发实战 入门、进阶与原理解析》。在学习发送电子邮件这一章节时,遇到一些问题,便写下这一篇文章,记录一下,也希望遇到同样问题的人能够花较少时间在解决问题上。
全栈程序员站长
2022/11/17
1.8K0
python利用flask_mail、sendgrid发送邮件[通俗易懂]
PHP 使用 phpmailer 发送电子邮件
phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
OwenZhang
2021/12/08
2.2K0
PHP 使用 phpmailer 发送电子邮件
使用Python发送自定义电子邮件
电子邮件仍然是事实。 尽管存在各种弊端,但它仍然是向大多数人发送信息的最佳方法,特别是允许邮件排队等待收件人的自动方式。
用户7886150
2021/01/28
2.9K0
发送电子邮件
在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的,而这些任务应该都是由程序自动完成的。
用户8442333
2021/05/20
2.4K0
.NET Core 使用MailKit发送电子邮件
发送邮件通知的功能在各种系统里都很常见。我的博客也能在有新评论、新回复,或者文章被其他网站引用时向管理员发送邮件。那么在.NET Core里,如何实现发送电子邮件呢?
Edi Wang
2019/07/08
6.1K0
.NET Core 使用MailKit发送电子邮件
SpringBoot发送邮件+使用html模板发送邮件
这两天在公司做商城系统有一个业务用到了发送邮件功能 springboot 有spring-boot-starter-mail
@依然范特西
2022/12/12
3K0
使用Postfix,Dovecot和MySQL发送电子邮件
在本指南中,您将学习如何在Debian或Ubuntu上使用Postfix,Dovecot和MySQL设置安全的虚拟用户邮件服务器。我们将解释如何创建新的用户邮箱以及如何在配置的域中发送或接收电子邮件。
Techeek
2018/09/18
3.9K0
使用Postfix,Dovecot和MySQL发送电子邮件
Spring发送电子邮件
Spring基于javax.mail封装了一套用于发送电子邮件的API,位于org.springframework.mail包下,下面将介绍下发送普通文本邮件和基于thymeleaf模版的邮件。
布禾
2020/10/29
1.8K0
Spring发送电子邮件
Jenkins使用之邮件模板配置
Jenkins默认提供了一个邮件通知,能在构建失败、构建不稳定等状态后发送邮件。但是它本身有很多局限性,比如它的邮件通知无法提供详细的邮件内容、无法定义发送邮件的格式、无法定义灵活的邮件接收配置等。为解决这些问题,我们将使用 Email Extension 插件。该插件可以自定义邮件通知,如在发送邮件时自定义发送给谁以及具体内容等。本文主要对jenkins的邮件模板配置及通知进行介绍。
用户5521279
2020/03/19
4.5K0
Jenkins使用之邮件模板配置
SpringBoot使用FreeMarker模板发送邮件
由于本文属于付费文章,获取全文,可点击文末【阅读原文】,即可到达【秋码记录】https://qiucode.cn/article/96 1、添加相关依赖 1.1、使用Maven,在pom.xml添加如下依赖: <!-- 邮件所需依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!--
游离于山间之上的Java爱好者
2022/12/19
1.4K0
SpringBoot使用FreeMarker模板发送邮件
PHP 使用 phpmailer 发送电子邮件 以及封装方法
phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
Inkedus
2020/04/16
3.4K0
PHP 使用 phpmailer 发送电子邮件 以及封装方法
Spring Boot发送电子邮件
通过使用Spring Boot RESTful Web服务,可以发送包含Gmail传输层安全性的电子邮件。在本章中,详细了解如何使用此功能。
黑洞代码
2021/10/14
1.4K0
Elasticsearch索引模板与动态mapping模板(四)
前面我们介绍了mapping相关的属性,细心的朋友可能会发现,在我们最开始使用ES的时候,可能还不太了解mapping,也没有添加过mapping为什么我们还是能够正常的添加文档。
问道白发
2019/12/15
5.1K0
Elasticsearch索引模板与动态mapping模板(四)
PHP发送电子邮件代码
注意:PHP 需要一个已安装且正在运行的邮件系统,以便使邮件函数可用。所用的程序通过在 php.ini 文件中的配置设置进行定义。
用户1503405
2021/09/27
1.8K0
如何在FreeBSD 10.1上使用Sendmail通过外部SMTP服务发送电子邮件
设置新的Web服务器时最常见的需求之一是发送电子邮件。最安全,最简单的方法是将服务器连接到SendGrid或Amazon SES等邮件服务。使用外部服务将帮助您避免陷阱,例如您的服务器IP被反垃圾邮件服务列入黑名单。
温浪
2018/10/19
3.2K0
点击加载更多

相似问题

使用sendgrid节点模块,如何发送SendGrid模板引擎电子邮件?

23

使用csv的数据与Sendgrid一起发送电子邮件

19

发送没有模板的Sendgrid电子邮件

17

如何在python中使用sendgrid和动态模板、BCC地址发送电子邮件?

110

Sendgrid:用模板发送电子邮件

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档