90-预测分析-R语言实现-时间序列1

90-预测分析-R语言实现-时间序列1,第1张

时间序列(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的延迟中存在的任何相关性影响的情况下所产生的相关性。

越哥,我来答啦,分给我吧O(∩_∩)O哈哈~/* 1 E →TE′

2 E′ →+TE`

3 E′ →ε

4 T → FT′

5 T′ → * FT′

6 T′ →ε

7 F →(E)

8 F →id

FIRST(E) = FIRST(T) = FIRST(F) = { ( , id }

FIRST(E′) = {+, ε}

FRIST(T′) = {*, ε}FOLLOW(E) = FOLLOW(E′) = { ), $}

FOLLOW(T) = FOLLOW (T′) = { +, ), $}

FOLLOW(F) = {+, *, ), $} */#include <stdio.h>

#include <tchar.h>

#include <string.h>int main(int argc, char* argv[])

{

char syn[15] //语法栈

int top //栈顶指针

char lookahead //当前单词

char exp[50]//表达式区

int m =0 //表达式指针

char s[4][5]={"id","+","*","("配胡} //表中有空白的符号

char string[3]={'E','T','F'} //表中有同步记号的昌唤的非终结符

int ll1[7][6]={

{1,0,0,1,9,9}, //LL(1)分析表,9表示同步记号,第6行是#,第7行是)

{0,2,0,0,3,3},

{4,9,0,4,9,9},

{0,6,5,0,6,6},

{8,9,9,7,9,9},

{12,12,12,12,12,10},

{13,13,13,13,11,13}}

int i,j //表耐卖凯行和列

int code //表项

printf("******************语法分析器********************\n")

printf("please input your expression:\n")

scanf("%s",exp)

top=1

lookahead=exp[m++]

syn[0]='#'

syn[1]='E'

while(1)

{

switch(syn[top])//行

{

case 'E':i=0break

case 'e':i=1break

case 'T':i=2break

case 't':i=3break

case 'F':i=4break

case '#':i=5break

case ')':i=6break

}

switch(lookahead) //列

{

case 'i':j=0break

case '+':j=1break

case '*':j=2break

case '(':j=3break

case ')':j=4break

case '#':j=5break

}

code=ll1[i][j]

if(code==10)

{ printf("语法分析结束\n")

break}

else

{

switch(code)

{

case 0:

{

printf("出错,用户多输入了%s,跳过%s\n",s[j],s[j])

if(j==0)

{lookahead=exp[m++]<br>lookahead=exp[m++]}

else

lookahead=exp[m++]

break

}

case 1:{printf("E →TE′\n")syn[top]='e'syn[top+1]='T'top++break}

case 2:{printf("E′ →+TE`\n")syn[top+1]='T'top++lookahead=exp[m++]break}

case 3:{printf("E′ →ε\n")syn[top]='\0'top--break}

case 4:{printf("T → FT′\n")syn[top]='t'syn[top+1]='F'top++break}

case 5:{printf("T′ → * FT′\n")syn[top+1]='F'top++lookahead=exp[m++]break}

case 6:{printf("T′ →ε\n")syn[top]='\0'top--break}

case 7:{printf("F →(E)\n")syn[top]=')'syn[top+1]='E'top++lookahead=exp[m++]break}

case 8:{printf("F →id\n")syn[top]='\0'top--lookahead=exp[m++]lookahead=exp[m++]break}

case 9:{printf("d栈,d出非终结符%c,用户少输入了一个id\n",string[i/2])syn[top]='\0'top--break}

case 11:{syn[top]='\0'top--lookahead=exp[m++]break}

case 13:{printf("d栈,d出终结符 ) ,用户少输入了一个右括号\n")syn[top]='\0'top--break}

}

}

}

return 0

}

预测任务:利用建筑物的各种特性,例如表面积和屋顶面积,预测建筑物的能源效率,悄困其中效率以供暖负荷和制冷负荷来表示。

数据集不存在举册缺失值。

orientation和glazareadist分别表示建筑朝向和玻璃面积分布情况,应该为因子正运宏型变量。

为了让神经网络能够处理这些因子变量,需要先将它们转换为虚拟变量。

在训练神经网络时,为防止饱和现象(因为当优化过程的误差函数的梯度绝对值变得非常小时,非线性神经元激活函数有非常大或非常小的输入,会导致优化过程认为已经达到收敛而终止),需要先对数据进行比例缩放,这样做同时有助于收敛。

将数据维度比例缩放到单位区间[-1, 1]。

输出变量只选一个,heatload。(暂不清楚caret包能否同时训练两个因变量的模型,以及如何设置参数)

输出变量有两个,heatload 和 coolload。10个隐藏层,激活函数选择logistic,误差函数选择sse,它对应的是误差平方和。linear.output = TRUE表示输出层的神经元不应用logistic激活函数,因为这是一个回归任务,需要得到线性的输出,否则输出就会被约束到[0, 1]之间。

预测值与实际值之间的相关性相当高。

预测值与实际值之间的相关性非常高,说明模型的性能接近完美。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8250833.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存