#' @title Analisis descriptivo a serie de tiempo
#' @description Esta funcion realiza el analisis descriptivo a una serie de tiempo, mostrando: Grafico de la serie, Tendencia, Media, Cuartiles, Prueba de normalidad, Prueba ruido blanco y Grafico distribucion de los datos.
#' @param data Serie de tiempo, debe ser ingresada como vector. Se recomienda usar as.vector() para ingresar la serie.
#' @param nombre_serie Nombre de la serie de tiempo. Si se deja vacio entonces se llamara "Serie". Se ingresa como cadena de caracteres.
#' @param titulo_grafico Titulo del grafico principal de la serie. Si se deja vacio entonces se toma el mismo nombre de la serie. Se ingresa como cadena de caracteres.
#' @return Graficos y resultados
#' @export descriptiva_serie
#' @import dplyr plotly sarima
#' @examples
#' descriptiva_serie(data = as.vector(iris$Sepal.Length),
#' nombre_serie = 'Largo del Sepalo',
#' titulo_grafico = 'Longitud Sepalo')
descriptiva_serie <- function(data, nombre_serie = 'Serie',
titulo_grafico = nombre_serie){
datos <- data.frame(secuencia = seq(1, length(data), by = 1),
data)
li_reg <- lm(datos[,2] ~ datos[,1])
fig <- plot_ly(x = datos[,1], y = datos[,2], name = 'Serie',
type = 'scatter', mode = 'lines') %>%
add_trace(y = li_reg$fitted.values, name = 'Tendencia',
mode = 'lines') %>%
layout(title = titulo_grafico,
xaxis = list(title = 'Secuencia'),
yaxis = list(title = nombre_serie)) %>%
layout(hovermode = 'compare')
print(fig)
print(paste0('Medidas de tendencia central para ', colnames(datos)[2], ' son:'))
print(summary(datos[,2]))
print('Prueba de normalidad, valor-p prueba de Shapiro Wilk:')
normalidad <- shapiro.test(datos[,2])
print(normalidad$p.value)
if(normalidad$p.value >= 0.05){print('Se supone normalidad')}
if(normalidad$p.value < 0.05){print('Se evidencia no normalidad')}
# grafico de densidad
plot(density(datos[, 2], adjust = 1),
main = paste0('Densidad ', nombre_serie))
# prueba aletoriedad - RUIDO BLANCO
x <- datos[, 2]
x.acf <- autocorrelations(x)
x.iid <- whiteNoiseTest(x.acf, h0 = "iid", nlags = seq(1, nrow(datos), by = 1), x = x,
method = "LiMcLeod")
test_white <- data.frame(x.iid$test)
test_white <- na.omit(test_white)
if(sum(test_white$pvalue > 0.05) == nrow(test_white)){
print('Definitivamente es ruido blanco')
}
if((sum(test_white$pvalue > 0.05) < nrow(test_white)) &
(sum(test_white$pvalue > 0.05) >= nrow(test_white) / 2)){
print('Puede ser ruido blanco')
}
if((sum(test_white$pvalue > 0.05) < nrow(test_white) / 2) &
(sum(test_white$pvalue > 0.05) > 0)){
print('Puede no ser ruido blanco')
}
if(sum(test_white$pvalue > 0.05) == 0){
print('Definitivamente NO es ruido blanco')
}
}
# antes de oxigenizar rm(list = ls())
# ejecutar roxygen2::roxygenise(), eliminando namespace y los .Rd en man
# previamente
# para instalarlo en github, hacerlo con github desktop, subir la carpeta
# del paquete como repositorio
# install_github("fpino95/descriptiva1") para instalarlo desde github
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.