R 通过计算均方预测误差评估预测模型
我试图通过计算均方预测误差来比较两种不同的预测模型 这是数据集的链接R 通过计算均方预测误差评估预测模型,r,time-series,cross-validation,prediction,R,Time Series,Cross Validation,Prediction,我试图通过计算均方预测误差来比较两种不同的预测模型 这是数据集的链接 使用2000-2006年的数据作为培训数据集,使用2007-2008年的数据作为测试数据集 在R中使用decompose()和stl()函数将时间序列分解为趋势、季节和误差分量 在R中使用lm()函数将线性模型拟合到趋势组件。然后预测2007-2008年的月收入。通过图形和计算样本均方预测误差(MSPE),将两种方法下的预测与测试数据集进行比较 讨论了两种不同分解方法误差项的随机性质 这是我的R代码: Data <-re
Data <-read.table("earnings.csv",header = T,sep=",")
tsData <- ts(Data$X,start = 2000, frequency = 12)
plot(tsData,xlab= "Month",ylab = "Earnings")
tsData = log(tsData)
trainingSet = window(tsData,start=2000,end=c(2006,12))
testSet = window(tsData,start=2007,end=c(2008,12))
decompTS =decompose(trainingSet)
stltraining = stl(trainingSet,s.window = "periodic")
lm1 = lm(trainingSet~decompTS$trend)
lm1
lm2 = lm(trainingSet~stltraining$time.series[,2])
lm2
decompTest=(decompose(testSet))$trend
pred1=lm1$coefficients*decompTest
pred2=predict(lm2,decompTest)
plot(pred1)
plot(pred2)
mspe1=mean((testSet-pred1)^2)
Data虽然不太确定您的方法在理论上是否可靠,但尝试用您的代码解决问题。主要问题是从ts
对象转换并返回,同时删除预测结果中的NA值
Data <-read.table("earnings.csv",header = T,sep=",")
tsData <- ts(Data$X,start = 2000, frequency = 12)
plot(tsData,xlab= "Month",ylab = "Earnings")
tsData = log(tsData)
trainingSet = window(tsData,start=2000,end=c(2006,12))
testSet = window(tsData,start=2007,end=c(2008,12))
decompTS =decompose(trainingSet)
stltraining = stl(trainingSet,s.window = "periodic")
x <- as.numeric(decompTS$trend)
y <- as.numeric(trainingSet) # convert the data from ts to numeric before lm
lm1 = lm(y~x)
lm1
#Call:
#(Intercept) x
# -0.01082 1.00679
x <- stltraining$time.series[,2]
lm2 = lm(y~x)
lm2
#(Intercept) x
# 0.0022 0.9984
decompTest=as.numeric((decompose(testSet))$trend)
pred1=predict(lm1,data.frame(x=decompTest)) #lm1$coefficients*decompTest
pred2=predict(lm2,data.frame(x=decompTest))
pred1TS = window(ts(pred1,start = 2007, frequency = 12),start=2007,end=c(2008,12)) # convert back to ts, for plotting
pred2TS = window(ts(pred2,start = 2007, frequency = 12),start=2007,end=c(2008,12))
library(xts)
plot(as.xts(testSet), main='TestSet')
lines(as.xts(pred1TS), col='red', pch=19, lwd=2)
lines(as.xts(pred2TS), col='green', pch=19, lwd=2)
有关主题的建议,请参阅。您的问题是查找代码的错误。当您提供对数据集的访问时,这似乎是堆栈溢出的主题,我投票支持迁移。请注意,您的#4不是一个编程问题,即使在这里,它也算是自学。
mspe1=mean((as.numeric(testSet)-pred1)^2, na.rm=TRUE)
# [1] 0.01865166
mspe2=mean((as.numeric(testSet)-pred2)^2, na.rm=TRUE)
# [1] 0.018508