varias studio spearman parcial para obtener matriz graficos graficas funcion correlaciones correlacion cor como calcular r correlation

studio - Calcular correlación-cor()-solo para un subconjunto de columnas



obtener correlacion en r (3)

Tengo un marco de datos y me gustaría calcular la correlation (con Spearman, los datos son categóricos y clasificados) pero solo para un subconjunto de columnas. Intenté con todos, pero la función correlation () de R solo acepta datos numéricos (x debe ser numérica, dice el mensaje de error), incluso si se usa Spearman.

Un enfoque brutal es eliminar las columnas no numéricas del marco de datos. Esto no es tan elegante, para la velocidad todavía no quiero calcular las correlaciones entre todas las columnas.

Espero que haya una manera de decir simplemente "calcular correlaciones para las columnas x, y, z". Las referencias de columnas pueden ser por número o por nombre. Supongo que la forma flexible de proporcionarlos sería a través de un vector.

Cualquier sugerencia es apreciada.


Encontré una manera más fácil mirando el script R generado por Rattle. Se ve a continuación:

correlations <- cor(mydata[,c(1,3,5:87,89:90,94:98)], use="pairwise", method="spearman")


Para datos numéricos tienes la solución. Pero son datos categóricos, dijiste. Entonces la vida se complica un poco más ...

Bueno, primero: la cantidad de asociación entre dos variables categóricas no se mide con una correlación de rango de Spearman, sino con una prueba de Chi cuadrado, por ejemplo. Que es la lógica en realidad. Clasificación significa que hay algún orden en sus datos. Ahora dime cuál es más grande, amarilla o roja? Lo sé, a veces R realiza una correlación de rango de spearman en datos categóricos. Si codifico amarillo 1 y rojo 2, R consideraría rojo más grande que amarillo.

Entonces, olvídate de Spearman para datos categóricos. Demostraré la prueba de chisq y cómo elegir columnas usando combn (). Pero se beneficiaría de un poco más de tiempo con el libro de Agresti: http://www.amazon.com/Categorical-Analysis-Wiley-Probability-Statistics/dp/0471360937

set.seed(1234) X <- rep(c("A","B"),20) Y <- sample(c("C","D"),40,replace=T) table(X,Y) chisq.test(table(X,Y),correct=F) # I don''t use Yates continuity correction #Let''s make a matrix with tons of columns Data <- as.data.frame( matrix( sample(letters[1:3],2000,replace=T), ncol=25 ) ) # You want to select which columns to use columns <- c(3,7,11,24) vars <- names(Data)[columns] # say you need to know which ones are associated with each other. out <- apply( combn(columns,2),2,function(x){ chisq.test(table(Data[,x[1]],Data[,x[2]]),correct=F)$p.value }) out <- cbind(as.data.frame(t(combn(vars,2))),out)

Entonces deberías obtener:

> out V1 V2 out 1 V3 V7 0.8116733 2 V3 V11 0.1096903 3 V3 V24 0.1653670 4 V7 V11 0.3629871 5 V7 V24 0.4947797 6 V11 V24 0.7259321

Donde V1 y V2 indican entre qué variables va, y "out" da el valor p para la asociación. Aquí todas las variables son independientes. Lo que cabría esperar, ya que he creado los datos al azar.


Si tiene un marco de datos donde algunas columnas son numéricas y otras son otras (carácter o factor) y solo desea hacer las correlaciones para las columnas numéricas, puede hacer lo siguiente:

set.seed(10) x = as.data.frame(matrix(rnorm(100), ncol = 10)) x$L1 = letters[1:10] x$L2 = letters[11:20] cor(x) Error in cor(x) : ''x'' must be numeric

pero

cor(x[sapply(x, is.numeric)]) V1 V2 V3 V4 V5 V6 V7 V1 1.00000000 0.3025766 -0.22473884 -0.72468776 0.18890578 0.14466161 0.05325308 V2 0.30257657 1.0000000 -0.27871430 -0.29075170 0.16095258 0.10538468 -0.15008158 V3 -0.22473884 -0.2787143 1.00000000 -0.22644156 0.07276013 -0.35725182 -0.05859479 V4 -0.72468776 -0.2907517 -0.22644156 1.00000000 -0.19305921 0.16948333 -0.01025698 V5 0.18890578 0.1609526 0.07276013 -0.19305921 1.00000000 0.07339531 -0.31837954 V6 0.14466161 0.1053847 -0.35725182 0.16948333 0.07339531 1.00000000 0.02514081 V7 0.05325308 -0.1500816 -0.05859479 -0.01025698 -0.31837954 0.02514081 1.00000000 V8 0.44705527 0.1698571 0.39970105 -0.42461411 0.63951574 0.23065830 -0.28967977 V9 0.21006372 -0.4418132 -0.18623823 -0.25272860 0.15921890 0.36182579 -0.18437981 V10 0.02326108 0.4618036 -0.25205899 -0.05117037 0.02408278 0.47630138 -0.38592733 V8 V9 V10 V1 0.447055266 0.210063724 0.02326108 V2 0.169857120 -0.441813231 0.46180357 V3 0.399701054 -0.186238233 -0.25205899 V4 -0.424614107 -0.252728595 -0.05117037 V5 0.639515737 0.159218895 0.02408278 V6 0.230658298 0.361825786 0.47630138 V7 -0.289679766 -0.184379813 -0.38592733 V8 1.000000000 0.001023392 0.11436143 V9 0.001023392 1.000000000 0.15301699 V10 0.114361431 0.153016985 1.00000000