时间序列(time series)是随机变量Y 1 、Y 2 、……Y t 的一个序列,它是由等距的时间点序列索引的。
一个时间序列的均值函数就是该时间序列在某个时间索引t上的期望值。一般情况下,某个时间序列在某个时间索引t 1 的均值并不等于该时间序列在另一个不同的时间索引t 2 的均值。
自协方差函数及自相关函数是衡量构成时间序列的随机变量在不同时间点上相互线性依赖性的两个重要函数。自相关函数通常缩略为ACF函数。ACF函数是对称的,但是无单位,其绝对值被数值1约束,即当两个时间序列索引之间的自相关度是1或-1,就代表两者之间存在完全线性依赖或相关,而当相关度是0时,就代表完全线性无关。
平稳性:实质描述的是一个时间序列的概率表现不会随着时间的流逝而改变。常用的平稳性的性质有严格平稳和弱平稳两个版本。tseries包的adf.test()函数可以检验时间序列的平稳性,返回的p值小于0.05则表示是平稳的。
白噪声是一个平稳过程,因为它的均值和方差都是常数。
随机漫步的均值是常数(不带漂移的随机漫步),但它的方差是随着时间的变化而不同的,因此它是不平稳的。
自回归模型(Autoregressive models, AR)来源于要让一个简单模型根据过去有限窗口时间里的最近值来解释某个时间序列当前值的想法。
自回归条件异方差模型:ARIMA模型的关键前提条件是,虽然序列本身是非平稳的,但是我们可以运用某个变换来获得一个平稳的序列。像这样为非平稳时间序列构建模型的方法之一是作出一个假设,假设该模型非平稳的原因是该模型的方差会以一种可预见的方式随时间变化,这样就可以把方差随时间的变化建模为一个自回归过程,这种模型被称为自回归条件异方差模型(ARCH)。加入了移动平均方差成分的ARCH模型称为广义自回归条件异方差模型(GARCH)。
任务:预测强烈地震
数据集:2000-2008年期间在希腊发生的强度大于里氏4.0级地震的时间序列。
不存在缺失值。
将经度和纬度之外的变量转换为数值型。
从图上可以看出,数据在30次左右波动,并且不存在总体向上的趋势。
通过尝试多个不同的组合来找到最优的阶数参数p,d,q,确定最优的准则是使用参数建模,能使模型的AIC值最小。
定义一个函数,它会针对某个阶数参数拟合出一个ARIMA模型,并返回模型的AIC值。如果某组参数导致模型无法收敛,就会产生错误,并且无法返回AIC,这时需要人为设置其AIC为无限大(InF)。
调用函数,选取最合适的模型。
然后找出最优的阶数参数:
得到最合适的模型为ARIMA(1, 1, 1)。再次使用最优参数训练模型。
使用forecast包预测未来值。
带颜色的条带是预测的置信区间,蓝色线表示均值,结果表示在后续的10个月里,地震的数量会有小幅增加。
检查自相关函数:
ACF绘图:虚线显示了一个95%的置信区间,特定延迟对应的ACF函数值如果处于该区间内,就不会被认为具有统计显著性(大于0)。这个ACF轮廓表明,针对本数据集,简单的AR(1)过程可能是一种合适的拟合方式。
PACF为偏自相关函数,是将时间延迟K的PACF定义为在消除了小于K的延迟中存在的任何相关性影响的情况下所产生的相关性。
R语言之—字符串处理函数nchar
取字符数量的函数
length与nchar不同,length是取向量的长度
# nchar表示字符串中的字符的个数
nchar("abcd")
[1] 4
# length表示向量中元素的个数
length("abcd")
[1] 1
length(c("hello", "world"))
[1] 2
chartr
字符替换
chartr(old="a", new="c", x="a123")
[1] "c123"
chartr(old="a", new="A", x="data")
[1] "dAtA"
paste和paste0
字符串粘合函数
paste在不指定分割符的情况下,默认分割符是空格
paste0在不指定分割符的情况下,默认分割符是空
# 默认以空格隔开
paste("Hello","world")
[1] "Hello world"
# 没有空格
paste0("Hello","world")
[1] "Helloworld"
# 指定分割符
paste("abc", "efg", "hijk", sep = "-")
[1] "abc-efg-hijk"
# 分别对向量的每一个元素进行连接
paste0("A", 1:6, sep = "")
[1] "A1" "A2" "A3" "A4" "A5" "A6"
# collapse参数:每一个元素操作之后,再把向量的每一个元素进行连接
paste0("A", 1:6, sep = "",collapse = "-")
[1] "A1-A2-A3-A4-A5-A6"
substr
字符串截取函数
substr(x = "hello", start = 1, stop = 2)
[1] "he"
strsplit
字符串的分割函数,可以指定分割符,生成一个list
strsplit("abc", split = "")
[[1]]
[1] "a" "b" "c"
如果要对一个向量使用该函数,需要注意。
# 分割向量的每一个元素,并取分割后的第一个元素
unlist(lapply(X = c("abc", "bcd", "dfafadf"), FUN = function(x) {return(strsplit(x, split = "")[[1]][1])}))
[1] "a" "b" "d"
gsub和sub
字符串替换
gsub替换匹配到的全部
sub 替换匹配到的第一个
# 将b替换为B
gsub(pattern = "b", replacement = "B", x = "baby")
[1] "BaBy"
gsub(pattern = "b", replacement = "B", x = c("abcb", "boy", "baby"))
[1] "aBcB" "Boy" "BaBy"
# 只替换第一个b
sub(pattern = "b", replacement = "B", x = "baby")
[1] "Baby"
sub(pattern = "b", replacement = "B", x = c("abcb", "baby"))
[1] "aBcb" "Baby"
grep和grepl
字符串匹配
grep函数返回的是索引值
grepl函数返回的是逻辑值
# 返回匹配到的元素的索引
grep(pattern = "boy", x = c("abcb", "boy", "baby"))
[1] 2
# 返回逻辑值
grepl(pattern = "boy", x = c("abcb", "boy", "baby"))
[1] FALSE TRUE FALSE
match &&pmatch &&charmatch
1、match
Usage
match(x, table, nomatch = NA_integer_, incomparables = NULL)
x %in% table
参数:
x: vector or NULL: the values to be matched. Long vectors are supported.
table : vector or NULL: the values to be matched against. Long vectors are not supported. (被匹配的值)
nomatch: the value to be returned in the case when no match is found. Note that it is coerced to integer. (没有match上的返回的值)
incomparables : a vector of values that cannot be matched. Any value in x matching a value in this vector is assigned the nomatch value. For historical reasons, FALSE is equivalent to NULL. (不同来匹配的值)
match函数类似与 %in%,不同的是match返回的是索引,而%in%返回的是逻辑值。