|
统计预测与决策是统计学中重要的一门课,而在当下,用R来实现该学科的各种方法也变得重要了。以下是几个简单的方法:
##一次移动平均法- ama<-function(data,n){
- if(n<1){return(FALSE)
- }else{
- forc=rep(NA,length(data)+1)
- for(i in n:length(data)+1){
- a=i-n;b=i-1;
- forc[i]<-mean(data[a:b]);
- }
- }
- return(forc)
- }
复制代码 ##一次指数平滑法- es<-function(data,a){
- forc=rep(NA,length(data)+1)
- forc[2]=data[1]
- for(i in 2:length(data)+1){
- forc[i]=a*data[i-1]+(1-a)*forc[i-1]
- }
- return(forc)
- }
- x=c(97,95,95,92,95,95,98,97,99,95,95,96,97,98,94,95)
- es(x,0.1)
- es(x,0.3)
- es(x,0.9)
复制代码 ##线性二次移动平均法- ltma<-function(data,n,T){
- s1=rep(NA,length(data))
- s2=rep(NA,length(data))
- a=rep(NA,length(data))
- b=rep(NA,length(data)+T)
- proc=rep(NA,length(data))
- for(i in n:length(data)){
- j=i-n+1;
- s1[i]=mean(data[j:i])
- }
- for(p in (2*n-1):length(data)){
- q=p-n+1
- s2[p]=mean(s1[q:p])
- }
- a=2*s1-s2 ;
- b=2*(s1-s2)/(n-1) ;
- for(m in (2*n-1):(length(data)+T-1)){
- proc[m+T]=a[m]+b[m]*T;
- }
- return(proc)
- }
- x<-c(125,135,195,197.5,186,175,155,190,220,219,226,198,260,245)
- ltma(x,3,1)
复制代码 ##评价指标MSE平均误差平方- mse<-function(x,y){
- e=NA;
- e=x-y
- mse=mean(e^2,na.rm=TRUE)
- return(mse)
- }
- x=c(3,10,10)
- y=c(NA,20,20)
- mse(x,y)
复制代码 |
|