Está en la página 1de 3

#Siempre cambiar directorio

#Recordar que los paquetes que est�n entre par�ntesis luego de "library"
#Deben ser instalados para que puedan funcionar

#Los Modelos de tendencia a utilizar son lineal, cuadr�tico y c�bico.


#Se aplicar�n los criterios AIC y BIC para escoger el m�s adecuado.
#Descripci�n de la serie de datos:
#Los datos se obtuvieron de la p�gina: https://www.eia.gov/
#Se tienen 70 datos tomados con frecuencia mensual
#desde diciembre de 2011 hasta septiembre de 2017

library(forecast)
D=read.table("solar.txt",header=FALSE)
D

#Convertir los datos en un objeto ts


y=ts(D, frequency=12,start=c(2011,12),end=c(2017,09))
y

#Graficar agregando t�tulo: Generaci�n Energ�a solar USA [Miles de MWh]


ts.plot(y,main="Generaci�n Energ�a Solar USA [Miles de MWh]")

#Ajustar modelos: lineal, cuadr�tico y c�bico, mediante regresi�n lineal


#utilizando la funci�n lm()

#Lo primero es generar datos del conjunto de entrenamiento (yi) y de prueba (yf)
T=length(y)
T
#Usamos los primeros datos para el ajuste y
#los �ltimos 12 datos para el pron�stico

yi=y[1:(T-12)]
yf=y[(T-12+1):T]

#Verificaci�n cantidad de datos


length(yi)
length(yf)

#Gr�fica de los dos conjuntos de datos


ts.plot(yi, main="Datos Energ�a Solar para verificar ajuste")
ts.plot(yf, main="Datos Energ�a Solar para verificar pron�stico")

#Ajustar modelos

#generar secuncia de datos para el ajuste


t=seq(1:(T-12))
t2=t^2
t3=t^3

#Estimaci�n por m�nimos cuadrados ordinarios (MCO)


m.lineal=lm(yi ~ t)
m.cuadratico=lm(yi ~ t + t2)
m.cubico=lm(yi ~ t + t2 + t3)
#Verificaci�n de ajuste del modelo:
#Se verifica si el ajuste es significativo (prueba F)
#y si los Betas son significativos (prueba T) [Nota: los astericos ayudan]
summary(m.lineal)
summary(m.cuadratico)
summary(m.cubico)

#Se sacan los indicadores de ajuste AIC y BIC


#Busco el modelo con menor AIC
AIC(m.lineal)
AIC(m.cuadratico)
AIC(m.cubico)

#Criterio BIC: busco el de menor BIC


BIC(m.lineal)
BIC(m.cuadratico)
BIC(m.cubico))

#Identificaci�n gr�fica del ajuste


#Ajustes lineal, cuadr�tico y c�bico:

ajustelineal=m.lineal$fitted.values
ajustecuadratico= m.cuadratico$fitted.values
ajustecubico=m.cubico$fitted.values

#Gr�fica con todos los ajustes juntos

plot(t,yi,type='l')
lines(t,ajustelineal, lty=3, col='red', lwd=3)
lines(t,ajustecuadratico, lty=5, col='blue', lwd=3)
lines(t,ajustecubico, lty=7, col='purple', lwd=3)
legend("topleft", c("Observado","M. Lineal", "M. Cuadr�tico", "M. C�bico"), lty=
c(1,3,5,7), bg='white')

#PRONOSTICAR CON TENDENCIA

#Definimos los tiempos del pron�stico

tt=seq((T-12+1),T,1)
tt2=tt^2
tt3=tt^3

#Pron�stico lineal

prlineal=predict(m.lineal,data.frame(t=tt))
prlineal

prcuadratico=predict(m.cuadratico,data.frame( t= tt ,t2 = tt2))


prcuadratico

prcubico=predict(m.cubico,data.frame(t=tt,t2=tt2,t3=tt3))
prcubico

# Comparaci�n gr�fica

plot(tt,yf,type='b')
lines(tt,prlineal,col='red', lwd=3)
lines(tt,prcuadratico,col='blue', lwd=3)
lines(tt,prcubico,col='purple', lwd=3)
legend("bottomright", c("Observado","Pron. Lineal", "Pron. Cuadr�tico", "Pron.
C�bico"), lty= c(1,3,5,7), bg='white')

# C�lculo del MAPE


accuracy(prlineal,yf)
accuracy(prcuadratico,yf)
accuracy(prcubico,yf)

También podría gustarte