es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Generar una matriz de correlación con columnas específicas y solo con valores significativos en corrplot.

Tengo una base de datos en forma de data.frame con 14 columnas. He dividido estas columnas en dos grupos: [,1:6] y [,7:14].

df<-read.csv("http://renatabrandt.github.io/EBC2015/data/varechem.csv", row.names=1)

df

Me gustaría calcular la correlación entre estos dos grupos de columnas. Para ello, he utilizado este comando y ha funcionado muy bien:

# Quiero correlacionar las columnas [1:6] con [7:14] solamente.
correlation_df<-cor(df[,1:6],
                    df[,7:14], method="spearman", use="pairwise.complete.obs")

# Graficar la correlación de columnas específicas
corrplot(correlation_df,
         method="color", addCoef.col = "black")

enter image description here

Sin embargo, además de calcular la correlación, me gustaría que el gráfico muestre solo las correlaciones significativas (p-valor < 0.05). Intenté el siguiente código pero no funcionó porque la vista estaba equivocada.

# Puedo obtener la matriz de niveles de significancia
correlation_df_sig<-cor.mtest(df, conf.level = 0.95, method = "spearman")
correlation_df_sig

Genero una matriz de correlación solo con los valores significativos.

plot2<-corrplot(correlation_df,
         p.mat = correlation_df_sig$p,
         insig='blank',
         addCoef.col = "black")
plot2

enter image description here

¿Qué puedo hacer para solucionar esta vista?

NOTA:
Intenté generar una matriz completa sin considerar los grupos [,1:6] y [,7:14], pero también salió mal. Además, no quiero calcular la correlación entre columnas del mismo grupo. Ej: columna 1 con columna 2, columna 1 con columna 3…

plot1<-corrplot(cor(df, method = 'spearman', use = "pairwise.complete.obs"),
         method = 'color', 
         addCoef.col = 'black',
         p.mat = correlation_df_sig$p,
         insig='blank',
         diag = FALSE,
         number.cex = 0.5,
         type='upper'
         )
plot1

enter image description here

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para arreglar la vista de la gráfica de correlación y mostrar solo las correlaciones significativas, puede ajustar el argumento addCoef.col de la función corrplot(). Este argumento especifica el color de los coeficientes de correlación mostrados en la gráfica. Por defecto, todos los coeficientes se muestran en negro, sin importar su significancia.

    Para mostrar solo las correlaciones significativas, puede establecer addCoef.col = "black" para correlaciones significativas y addCoef.col = "white" para correlaciones no significativas. Esto ocultará efectivamente las correlaciones no significativas de la gráfica.

    Aquí está el código actualizado:

    # obtener la matriz de nivel de significancia
    correlation_df_sig <- cor.mtest(df, conf.level = 0.95, method = "spearman")
    
    # generar la gráfica de correlación solo con valores significativos
    corrplot(correlation_df,
             p.mat = correlation_df_sig$p,
             insig = "blank",
             addCoef.col = ifelse(correlation_df_sig$p < 0.05, "black", "white"))
    

    Este código utiliza la función ifelse() para establecer el argumento addCoef.col como “black” o “white” dependiendo de si el valor p correspondiente en correlation_df_sig$p es menor a 0.05 (significativo) o no.

    Esto debería resultar en una gráfica de correlación que muestra solo las correlaciones significativas en negro.

Comments are closed.