周期时间序列(二)实例
2017-06-16 本文已影响47人
卞卡727
商品销量变化周期计算及预测
假设某商品销量成周期性变化,分析其周期性变化特点。
思路:
- 先进行时间周期的计算
- 再以时间周期值为基础计算变化率和趋势
- 根据趋势找到周期串
- 用平均法对后面的周期进行预测
例子:
每周销售情况如下:
#每周销售情况如下
print("每周销售情况")
sale<-c(82,45,63,102,90,130,210,110,500,300,150,230,
+190,210,600,310,130,90,210,190,710,480,220,150,250,190)
print(sale)```
以两周为时间窗口计算平均值
#首先创建空向量,数值型,因为以两周为时间窗口所以长度是mysale的一半,ceiling是强制五入
`mysale=vector(mode="numeric",length=ceiling(length(sale)/2))`
#使用for循环计算相邻的每两周销售情况的平均值,作为时间窗口的值。
mysale<-vector("numeric",ceiling(length(sale)/2))
使用sep进行迭代起点为1,终点为向量长度,步长为2
for(i in seq(1,length(sale),by=2)){
- salemp=(sale[i]+sale[i+1])/2 #按下标,取下标和下标+1的值进行平均
- mysale[i/2+1]=salemp[1]} #暂时没明白内在逻辑,作用是把时间周期的值赋给mysale这个之前创建好的空向量.
mysale#到此以两周为时间单位,以两周均值为代表生成了新的序列
[1] 63.5 82.5 110.0 160.0 400.0 190.0 200.0 455.0 110.0 200.0 595.0 185.0 220.0```
有了时间窗口的值后再进行进一步分析,根据时间窗口的值计算变化率和趋势
当期相对与上期的变化率=(当期值-上期值)/上期值
#先创建变化率和趋势的空向量
myrate<-vector("numeric",ceiling(length(sale)/2)-1)#变化率
mytrend=vector(mode="numeric",length=ceiling(length(sale)/2)-1)#趋势
for(i in 2:length(mysale))#从创建好的时间窗口中的,第二个值开始提取
+{ratemp=(mysale[i]-mysale[i-1])/mysale[i-1] #(当期值-上期值)/上期值
+myrate[i-1]=ratemp#因i是从第二个值开始提取,i代表第二个元素下标,
#在对mytate这个空向量进行填充时要从第一个开始,所以用i-1
+if (ratemp>0){mytrend[i-1]=1}#if else是固定套路
#意思是如果符合第一个条件就……否则……。
+else{mytrend[i-1]=0}}#这里的含义是如果变化率(第二期相对与第一期)大于0(即增加)则趋势为1否则为0
> myrate#变化率
[1] 0.29921260 0.33333333 0.45454545 1.50000000 -0.52500000 0.05263158 1.27500000
[8] -0.75824176 0.81818182 1.97500000 -0.68907563 0.18918919
> mytrend#趋势
[1] 1 1 1 1 0 1 1 0 1 1 0 1```
#未完,待续