chapter15.1-2 时间序列1--时间序列分解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了chapter15.1-2 时间序列1--时间序列分解相关的知识,希望对你有一定的参考价值。

参考技术A

对时序数据的研究包括两个基本问题:

在R中,一个数值型向量或数据框中的一列可通过 ts() 函数存储为时序对象

时间序列数据【存在季节性因素,如月度数据、季度数据等】可以被分解为趋势因子、季节性因子和随机因子

可以通过相加模型,也可以通过相乘模型来分解数据

对于乘法模型,可以取对数,将其转化为加性模型

那么如何将时间序列进行拆分,分解成这三部分呢?对于趋势和季节的分解,下面介绍移动平均和季节因子

时序数据集中通常有很显著的随机或误差成分。为了辨明数据中的规律,我们总是希望能够撇开这些波动,画出一条平滑曲线。画出平滑曲线的最简单办法是 简单移动平均 。比如每个数据点都可用这一点和其前后q个点的平均值来表示,这就是居中移动平均 centered moving average

St是时间点t的平滑值, k=2q+1 是每次用来平均的观测值的个数,一般我们会将其设为一个 奇数 。居中移动平均法的代价是,每个时序集中我们会损失最后的q个观测值,平均值消除了数据中的一些随机性

使用R语言 forecast 包中的 ma() 函数来对Nile时序数据进行平滑处理

从图像来看,随着k的增大,图像变得越来越平滑。因此我们需要找到最能画出数据中规律的k,避免过平滑或者欠平滑。这里并没有什么特别的科学理论来指导k的选取,我们只是需要先尝试多个不同的k,再决定一个最好的k

除此之外,还可以使用 加权移动平均 来进行平滑化

加权移动平均法的一大优势是它可以让趋势周期项的估计更平滑。观测值不是直接完全进入或离开计算,它们的权重缓步增加,然后缓步下降,让曲线更加平滑

季节指数的计算

将时序分解为趋势项、季节项和随机项的常用方法是用LOESS光滑做季节性分解。这可以通 过R中的 stl() 函数

stl函数只能处理相加模型,如果要处理相乘模型,可以使用log进行转换

[1] https://www.youtube.com/watch?v=2mM8BUqWAZ4

[2] https://zhuanlan.zhihu.com/p/21877990

[3] https://www.jianshu.com/p/e6d286132690

[4] https://nwfsc-timeseries.github.io/atsa-labs/sec-boxjenkins-stationarity.html

[6] Kabacoff, Robert. R 语言实战 . Ren min you dian chu ban she, 2016.

Linux_Unix系统编程Chapter10 时间

chapter10 时间
1:真实时间:度量这一时间的起点有二:(1)某个标准点;(2)进程生命周期内的某个固定时点(通常为程序启动)
2:进程时间:一个进程所使用的CPU时间总量,适用于对程序,算法性能的检查或优化。
10.1 日历时间(calendar Time)
日历时间存储于类型为time_t的变量中。
系统调用gettimeofday(),可于tv指向的缓冲区中返回日历时间

#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
参数tv指向的结构:
struct timeval
{
time_t tv_sec; // 从00:00:00 1 Jan 1970 UTC
suseconds_t tv_usec; //微妙
}

time()系统调用返回来自Epoch以来的秒数(和函数gettimeofday()所返回的tv参数中tv_sec字段的数值相同).
#include <time.h>
time_t time(time_t *timep);

10.2 时间转换函数

10.2.1 将time_t 转换为可打印格式
#include <time.h>
char *ctime(const time_t *timep);
返回一个26字节的字符串,格式:Wed Jun 8 14:22:34 2011

10.2.2 time_t和分解时间之间的转换
函数gmtime()和localtime()可将一time_t值转换为一个所谓的分解时间。分解时间被置于一个经由静态分配的结构中,其地址则作为函数结果返回。
#include<time.h>
struct tm *gmtime(const time_t *timep);
struct tm *localtime(const time_t *timep);

函数mktime()将一个本地时区的分解时间翻译为time_t值,并将其作为函数结果返回。
#include <time.h>
time_t mktime(struct tm *timeptr);

10.2.3分解时间和打印格式之间的转换
从分解时间转换为打印格式
#include <time.h>
char *asctime(const struct tm *timeptr);

当把一个分解时间转化成打印格式是,函数strftime()可以提供更为精确的控制。令timeptr指向分解时间,strftime()会将以null结尾,由日期和时间组成的相应字符串置于outstr所指向的缓冲区中。
#include <time.h>
size_t strftime(char *outstr, size_t maxsize, const char *format, const struct tm *timeptr);

将打印格式时间转换为分解时间
函数strptime()是strftime的逆向函数

10.3 时区
时区定义
/usr/share/zoncinfo
系统的本地时间由时区文件/etc/localtime定义,通常链接到/usr/share/zoneinfo下的一个文件。
为程序指定时区:

10.4 地区(Locale)
为程序设定地区
#include <locale.h>
char *setlocale(int category, const char *locale);

10.5 更新系统时钟
settimeofday()和adjtime().
#define _BSD_SOURCE
#include <sys/time.h>
int settimeofday(const struct timeval *tv, const struct timezon *tz);

10.6 软件时钟

10.7 进程时间
进程时间是进程创建后使用的CPU时间数量。
系统调用times(),检索进程时间信息,并把结果通过buf指向的结构体返回。
#include <sys/times.h>
clock_t times(struct tms *buf);

函数clock()提供了一个简单的接口用于取得进程时间。它返回一个值描述了调用进程使用的总的CPU时间(包括用户和系统)
#include <time.h>
clock_t clock(void);


















































以上是关于chapter15.1-2 时间序列1--时间序列分解的主要内容,如果未能解决你的问题,请参考以下文章

[1-6] 把时间当做朋友(李笑来)Chapter 6 更多思考 摘录

[1-4] 把时间当做朋友(李笑来)Chapter 4 开拓我们的心智 摘录

[1-5] 把时间当做朋友(李笑来)Chapter 5 小心所谓成功学 摘录

Chapter 1:Introduction

Chapter 1. 庞加莱群单粒子态和时间空间反演

把时间当做朋友(李笑来)Chapter 1 心智的力量 摘录