La función shapiro_density() se aplica a una dataframe,
selecciona solamente las variables numéricas, les aplica el test de
normalidad de Shapiro-Wilk y crea una matriz con los gráficos de
densidad y el p-valor de cada test.
La función depende de dos parámetros, data que es el
dataframe que queremos analizar y ncols que es número de
columnas de la matriz de gráficos de densidad. Por defecto
ncols = 2.
Sin demasiado esfuerzo el lector podría modificar esta función para que realice otro test y muestre otro tipo de gráfico.
# Definición de la función
shapiro_density <- function(data, ncols = 2) {
# Selecciona las numéricas, sus valores y sus nombres
num_vars <- sapply(data, is.numeric)
num_data <- data[, num_vars, drop = FALSE]
num_var_names <- names(num_data)
num_vars_count <- length(num_var_names)
# Configura la interfaz gráfica con el ncols elegido
par(mfrow = c(ceiling(num_vars_count/ncols), ncols))
# Bucle para cada variable
for (i in 1:num_vars_count) {
var_name <- num_var_names[i]
var_data <- num_data[[var_name]]
# Realiza el test, extrae el pvalor y calcula la f.d.densidad
shapiro_result <- shapiro.test(var_data)
p_value <- format(shapiro_result$p.value, digits = 3)
density <- density(var_data)
# Pinta la densidad añadiendo como texto el pvalor
plot(density, main = var_name, xlab = var_name, zero.line = FALSE)
text(x = mean(var_data) * 1, y = min(density$y) * 1,
labels = paste("Shapiro-Wilk test p-value =", p_value),
col = "blue", cex = 0.85)
}
# Restaura la interfaz gráfica a una columna
par(mfrow = c(1,1))
}Ejemplo: Con la función
shapiro_density() mostramos varios ejemplos, primero
aplicada a los datos iris y luego a los datos
LifeCycleSavings eligiendo el número de columnas
ncols de la matriz de gráficos.
# Por defecto gráficos en 2 columnas
shapiro_density(data = iris)# Elegimos 2 columnas
shapiro_density(data = LifeCycleSavings, ncols = 2)# Elegimos 3 columnas
shapiro_density(data = LifeCycleSavings, ncols = 3)