2017-01-22 1 views
0

J'essaie de comparer deux modèles de prédiction différents en calculant l'erreur de prédiction au carré moyen.Évaluez les modèles de prédiction en calculant l'erreur moyenne de prédiction au carré

Voici le lien vers le jeu de données earnings.csv dataset

  1. utilisation 2000-2006 années de données que l'ensemble de données de formation et les données de 2007-2008 comme l'ensemble de données de test.

  2. Utilisez à la fois les fonctions decompose() et stl() dans R pour décomposer la série temporelle en composants de tendance, de saisonnalité et d'erreur.

  3. Utilisez la fonction lm() dans R pour adapter un modèle linéaire au composant de tendance. Ensuite, prédisez les gains mensuels pour l'année 2007-2008.Comparez les prédictions sous les deux méthodes avec l'ensemble de données de test, à la fois graphiquement et en calculant l'erreur de prédiction moyenne au carré de l'échantillon (MSPE).

  4. Discutez des propriétés stochastiques du terme d'erreur des deux méthodes de décomposition différentes.

Voici mon code R:

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) 

La valeur que je suis arrivé pour mspe1 est nulle. Qu'est-ce que j'ai fait de mal ici? Merci pour toute aide

+0

S'il vous plaît voir http://stats.stackexchange.com/help/on-topic pour obtenir des conseils sur ce qui est sur le sujet. Votre question consiste à trouver ce qui ne va pas avec votre code. Lorsque vous donnez accès à un ensemble de données, cela semble être le cas pour Stack Overflow et je vote pour la migration. Notez que votre numéro 4 n'est pas un problème de programmation, et même ici, cela compterait comme une auto-étude. –

Répondre

0

Bien que pas très sûr de la solidité théorique de vos approches, essayé de résoudre les problèmes avec votre code. Le principal problème est la conversion de ts objet et en arrière, en supprimant également les valeurs NA résultant de la prédiction.

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) 

enter image description here

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