############################################################# ejemplo 1 Par <- function(numero) { modulo <- numero %% 2 modulo # si modulo = 0, entonces numero es par # si modulo = 1, entonces numero es impar } ############################## MediasGrupos <- function(SerieTemporal, p) { longitud <- length(SerieTemporal) grupo <- array(0,c(longitud-p+1,p)) mediagrupo <- array(0,c(longitud-p+1,1)) i <- 1 k <- 1 grupo[i,1:p] <- SerieTemporal[1:p] mediagrupo[i] <- mean(grupo[i,1:p]) while (p+k <= longitud) { i <- i + 1 grupo[i,1:p] <- SerieTemporal[(1+k):(p+k)] mediagrupo[i] <- mean(grupo[i,1:p]) k <- k + 1 } #grupo mediagrupo } ############################## TendenciaMediasMoviles <- function(SerieTemporal, p, representacion=TRUE) { #represento la serie original por defecto if (representacion==TRUE) { win.graph() #postscript("SerieOriginal.eps", horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10) jpeg("SerieOriginal.jpg") plot(SerieTemporal, xlab="Tiempo", ylab="Serie Temporal", type="o") dev.off() } #calculo la serie suavizada y la centro Medias <- MediasGrupos(SerieTemporal, p) SerieSuavizada <- array(NA,c(1,length(SerieTemporal))) centrada <- Par(p) if (centrada == 1) { k <- (p+1)/2 for (i in 1:length(Medias)) { SerieSuavizada[k] <- Medias[i] k <- k + 1 } } else { Medias <- MediasGrupos(Medias, 2) k <- ((p+1)/2+0.5) for (i in 1:length(Medias)) { SerieSuavizada[k] <- Medias[i] k <- k + 1 } } #represento la serie original y suavizada de forma conjunta if (representacion==TRUE) { win.graph() #postscript("SerieOriginalSuavizada.eps", horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10) jpeg("SerieOriginalSuavizada.jpg") plot(SerieTemporal, type="n") Series <- ts(matrix(c(SerieTemporal, SerieSuavizada), length(SerieTemporal), 2)) plot(Series, plot.type="single", xlab="Tiempo", ylab="Serie Temporal Original y Suavizada", lty=1:2, col=1:2) dev.off() graphics.off() } #devuelvo la serie suavizada SerieSuavizada } ############################################################# ejemplo 2 TendenciaRegresion <- function(SerieTemporal, Tiempos, representacion=TRUE) { mediaSerieTemporal <- mean(SerieTemporal) varianzaSerieTemporal <- var(SerieTemporal) mediaTiempos <- mean(Tiempos) varianzaTiempos <- var(Tiempos) covarianza <- cov(SerieTemporal, Tiempos) pendiente <- covarianza/varianzaTiempos independiente <- mediaSerieTemporal - pendiente*mediaTiempos coeficientedeterminacion <- (covarianza^2)/(varianzaSerieTemporal*varianzaTiempos) informe <- c(mediaSerieTemporal, varianzaSerieTemporal, mediaTiempos, varianzaTiempos, covarianza, coeficientedeterminacion, independiente, pendiente) names(informe) <- c("Media Serie Temporal", "Varianza Serie Temporal", "Media Tiempos", "Varianza Tiempos", "Covarianza", "Coeficiente Determinacion", "Término Independiente", "Pendiente") #represento los puntos y la recta calculada if (representacion==TRUE) { #postscript("SerieOriginalRecta.eps", horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10) jpeg("SerieOriginalRecta.jpg") plot(Tiempos, SerieTemporal, type="o", las=2) abline(independiente, pendiente, lty=2, col=2) dev.off() } #salida informe } ############################################################# ejemplo 3 Media <- function(vector) { longitud <- length(vector) media <- 0 total <- 0 for (i in 1:longitud) { if (is.na(vector[i]) == FALSE) { media <- vector[i] + media total <- total + 1 } } media <- media/total media } ###################### EstacionalMediasMoviles <- function(SerieTemporal, p, representacion=TRUE) { SerieSuavizada <- TendenciaMediasMoviles(SerieTemporal, p, FALSE) Serie1 <- SerieTemporal/SerieSuavizada Serie2 <- matrix(Serie1, ncol=p, byrow=T) M <- array(0, c(1, p)) for (i in 1:p) { M[i] <- Media(Serie2[,i]) } MA <- mean(M) IVE <- array(0, c(1, p)) for (i in 1:p) { IVE[i] <- M[i]/MA } dimensiones <- dim(Serie2) SerieDesestacionalizada <- matrix(0, nrow=dimensiones[1], ncol=dimensiones[2]) Serie3 <- matrix(SerieTemporal, ncol=p, byrow=T) for (i in 1:p) { SerieDesestacionalizada[,i] <- Serie3[,i]/IVE[i] } # represento serie original y desestacionalizada if (representacion==TRUE) { SerieDesestacionalizada0 <- as.vector(t(SerieDesestacionalizada)) Series <- ts(matrix(c(SerieTemporal, SerieDesestacionalizada0), length(SerieTemporal), 2)) #postscript("SerieOriginalDesestacionalizada.eps", horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10) jpeg("SerieOriginalDesestacionalizada.jpg") plot(Series, plot.type="single", lty=1:2, col=1:2) dev.off() } # salida salida <- list(IVE, SerieDesestacionalizada) names(salida) <- c("Índices Variación Estacional", "Serie Desestacionalizada") salida } ############################################################# ejemplo 4 Regresion <- function(Y, X) { mediaX <- mean(X) varianzaX <- var(X) mediaY <- mean(Y) varianzaY <- var(Y) covarianza <- cov(Y,X) pendiente <- covarianza/varianzaX independiente <- mediaY - pendiente*mediaX coeficientedeterminacion <- (covarianza^2)/(varianzaX*varianzaY) informe <- c(independiente, pendiente, mediaX, varianzaX, mediaY, varianzaY, covarianza, coeficientedeterminacion) informe } #################################### EstacionalRegresion <- function(SerieTemporal, Tiempos, p, representacion=TRUE) { Serie1 <- matrix(SerieTemporal, ncol=p, byrow=T) dimensiones <- length(Tiempos) MediasAnuales <- array(0, c(1, dimensiones)) for (i in 1:dimensiones) { MediasAnuales[i] <- mean(Serie1[i,]) } b <- Regresion(as.vector(MediasAnuales), Tiempos) M <- array(0, c(1, p)) MM <- array(0, c(1, p)) for (i in 1:p) { M[i] <- mean(Serie1[,i]) resto <- b[2]*(i-1) MM[i] <- M[i] - resto/p } MA <- mean(MM) IVE <- array(0, c(1, p)) for (i in 1:p) { IVE[i] <- MM[i]/MA } dimensiones <- dim(Serie1) SerieDesestacionalizada <- matrix(0, nrow=dimensiones[1], ncol=dimensiones[2]) for (i in 1:p) { SerieDesestacionalizada[,i] <- Serie1[,i]/IVE[i] } # represento serie original y desestacionalizada if (representacion==TRUE) { SerieDesestacionalizada0 <- as.vector(t(SerieDesestacionalizada)) Series <- ts(matrix(c(SerieTemporal, SerieDesestacionalizada0), length(SerieTemporal), 2)) jpeg("SerieOriginalDesestacionalizada.jpg") plot(Series, plot.type="single", lty=1:2, col=1:2) dev.off() } # salida salida <- list(IVE, SerieDesestacionalizada) names(salida) <- c("Índices Variación Estacional", "Serie Desestacionalizada") salida }