|
- weight<-function(x,p,k,times,mse=0.05){
- biaozhun<-function(x,p){ ##标准化函数
- n<-length(x)
- a=b=rep(NA,n)
- y=matrix(data=NA,nrow=n,ncol=p+1)
- for(t in (p+1):n){
- a[t]=sum(x[(t-1):(t-p)]^2)
- b[t]=(a[t])^(1/2)
- for(j in 0:p){
- y[t,j+1]=x[t-j]/b[t]
- }
- }
- out<-data.frame(x,a,b,y)
- return(out)
- }
- y=biaozhun(x,2)[4:6] ##提取标准化后值
- mse1<-function(x,y){ ##计算mse函数
- e=NA;
- e=x-y
- mse=mean(e^2,na.rm=TRUE)
- return(mse)
- }
- a=rep(1/p,p) ##总函数参数初始化
- if (k=='NA' ){k=ceiling(1/sum(sort(-y[,1])[1:p]^2))}
- MSE=5
- n=proc1=0
- mm=list()
- proc=e=matrix(NA,nrow=nrow(y))
- while(MSE >= mse){
- for(t in (p+1):nrow(y)){
- proc[t]=sum(a[1:p]*y[t,2:(p+1)])
- e[t]=y[t,1]-proc[t]
- for(j in 1:p){
- a[j]=a[j]+2*k*e[t]*y[t,j+1]
- }
- }
- n=n+1
- MSE=mse1(y[,1],proc)
- mm[[n]]=data.frame(y,proc,e,rep(MSE,nrow(y)))
- names(mm)=paste(rep("第",n),1:n,rep("次迭代",n))
- }
- proc1=sum(a[1:p]*x[length(x):(length(x)-p+1)])
- m=list(mm,a,k,n,proc1)
- names(m)=c('迭代摘要','fai参数值','k值','迭代次数','下期预测值')
- return(m)
- }
复制代码 使用示例:- x<-c(3.21,2.65,4.12,4.30,4.72,4.19,3.85,2.52,3.91,3.36)
- weight(x,2,k=0.5,mse=0.03)
复制代码 |
|