时间序列分析是一种动态数据处理的统计方法,基于随机过程理论和数理统计学方法,用于研究随机数据序列所遵从的统计规律,以解决实际问题。它广泛应用于经济、商业、社会问题研究中,是研究统计指标动态特征和周期特征及相关关系的重要方法。
时间序列分析的基本概念
时间序列是指按照时间顺序记录下来的观测数据序列。例如,每个季度的国内生产总值、每个月的居民消费价格涨幅等。时间序列分析的目的是描述时间序列过去的变化特征,发现其运行规律,从而预计未来的走势。
时间序列分析的主要方法
时间序列分析可以分为传统方法和现代方法:
传统方法:将时间序列分为长期趋势、季节变动、循环变动和不规则变动,通过加法模型或乘法模型来分析这些因素对时间序列变动的影响。
现代方法:将时间序列视为一个随机过程,通过分析其平稳性、季节性和随机性来研究序列变化的一般规律。平稳时间序列的统计特性不随时间推移发生变化,而非平稳序列则包含趋势、季节性和随机性。
时间序列分析的应用领域
时间序列分析广泛应用于各种领域,包括:
经济预测:用于预测经济增长、通货膨胀等经济指标的变化趋势。
商业分析:用于市场趋势预测、销售预测等。
社会问题研究:用于人口统计、疾病传播等社会问题的研究。
时间序列分析是定量预测方法之一。它包括一般统计分析(如自相关分析,谱分析等),统计模型的建立与推断,以及关于时间序列的最优预测、控制与滤波等内容。经典的统计分析都假定数据序列具有独立性,而时间序列分析则侧重研究数据序列的互相依赖关系。后者实际上是对离散指标的随机过程的统计分析,所以又可看作是随机过程统计的一个组成部分。例如,记录了某地区第一个月,第二个月,…,第N个月的降雨量,利用时间序列分析方法,可以对未来各月的雨量进行预报。
基本思想:根据系统的有限长度的运行记录(观察数据),建立能够比较精确地反映序列中所包含的动态依存关系的数学模型,并借以对系统的未来进行预报。
基本原理:一是承认事物发展的延续性。应用过去数据,就能推测事物的发展趋势。二是考虑到事物发展的随机性。任何事物发展都可能受偶然因素影响,为此要利用统计分析中加权平均法对历史数据进行处理。
特点:简单易行,便于掌握,但准确性差,一般只适用于短期预测。
时间序列依据其特征,有以下几种表现形式,并产生与之相适应的分析方法:
1.长期趋势变化:受某种基本因素的影响,数据依时间变化时表现为一种确定倾向,它按某种规则稳步地增长或下降。使用的分析方法有:移动平均法、指数平滑法、模型拟和法等。
2.季节性周期变化:受季节更替等因素影响,序列依一固定周期规则性的变化,又称商业循环。采用的方法:季节指数。
3.循环变化:周期不固定的波动变化。
4.随机性变化:由许多不确定因素引起的序列变化。
时间序列分析主要有确定性变化分析和随机性变化分析。其中,确定性变化分析包括趋势变化分析、周期变化分析、循环变化分析。随机性变化分析:有AR、MA、ARMA模型等。
在R中进行时间序列分析,通常使用ts()函数将时间序列对象转换为平稳时间序列,然后应用如 auto.arima() 和 forecast() 等函数进行动态模型分析和预测。
今天我们以一组12年*12月的时间序列数据为例,展示一下常见的时间序列数据整理类型以及简单时间序列图的绘制方法。
# 长型数据,其中包含年份(year)和月份(month)以及相应的值(incident)
library(readxl) #加载包
tsdata <- read_excel("C:/Users/hyy/Desktop/时间序列绘图数据.xlsx")
tsdata
#将数据转换为时间序列并绘图
ptsdata <- ts(tsdata)
plot(ptsdata) #绘图所有变量
#选择incident绘图并规定横轴竖轴名称
plot(ptsdata[,3],xlab="month",ylab="incident",
main = "Time Series Plot",sub = "医学统计数据分析工作室")
# 将年份和月份转换为日期
tsdata$date <- as.Date(paste0(tsdata$year, "-", tsdata$month, "-01"))
# 使用ggplot2绘制时间序列图
library(ggplot2)
ggplot(tsdata, aes(x = date, y = incident)) +
geom_line() +
geom_point() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(x = "time", y = "incident", title = "Time Series Plot")
#优化绘图
ggplot(tsdata, aes(x = date, y = incident)) +
geom_line(color="blue") +
geom_point() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_x_date(date_labels="%Y",
date_breaks="year",
expand=c(0,0)) +
scale_y_continuous(expand = c(0,0))+
labs(x = "year", y = "incident", title = "Time Series Plot",subtitle = "医学统计数据分析工作室")
#构建虚拟横型数据
tsdata2 <- ts(data=sample(100:450,144),
start=2012,frequency=12)
tsdata2
plot(tsdata2,xlab="year",ylab="incident",
main = "Time Series Plot",
sub = "医学统计数据分析工作室")
#读取Excel数据进行时间序列绘图
library(readxl) #加载包
data <- read_excel("C:/Users/hyy/Desktop/绘图数据.xlsx")
data
如果直接对读取数据进行绘图,
plot(data)
则会出现各个变量间相关性的散点图,我们得尝试对读取数据进行转换。
我们重新读取绘图数据:
tsdata3 <- read_excel("C:/Users/hyy/Desktop/绘图数据.xlsx", col_names = TRUE )
tsdata3
#我们提取各个月份的数据,转换为一维向量
tsdata3 <- c(tsdata3$Jan,tsdata3$Feb,tsdata3$Mar,
tsdata3$Apr,tsdata3$May,tsdata3$Jun,
tsdata3$Jul,tsdata3$Aug,tsdata3$Sep,
tsdata3$Oct,tsdata3$Nov,tsdata3$Dec)
tsdata3
#再次按照12月/年的频率,对一维向量进行拆分组合:
tsdata3<- ts(tsdata3,frequency=12,start=c(2012,1))
tsdata3
#对读取的数据进行绘图,并增加标题修改坐标轴标题:
plot(tsdata3)
plot(tsdata3,xlab="month",ylab="incident",
main = "Time Series Plot",sub = "医学统计数据分析工作室")
ts()函数介绍:
通过一向量或者矩阵创建一个一元的或多元的时间序列a(time series),为ts型对象。
调用格式:
ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts eps = getOption('ts.eps"), class, names)
说明:
data :一个向量或者矩阵
start :第一个观测值的时间,为一个数字或者是一个由两个整数构成的向量
end :最后一个观测值的时间,指定方法和start相同。
frequency: 单位时间内观测值的频数(频率)
deltat:两个观测值间的时间间隔,frequency和deltat必须并且只能给定其中一个
ts.eps:序列之间的误差限,如果序列之间的频率差异小于ts.eps,则认为这些序列的频率相等
class:对象的类型。一元序列的缺省值是“ts”,多元序列的缺省值是c(“mts”“ts”)
names: 一个字符型向量,给出多元序列中每个一元序列的名称,缺省data中每列数据的名称或者Series 1、Series 2 ... ...
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!