[R-br] Selecionar variáveis de uma matriz de correlação
Fernando Souza
nandodesouza em gmail.com
Sexta Outubro 10 10:04:47 BRT 2014
A Lista retornada possui o mesmo número de objetos, mas não o mesmo
número de dados. Sua lista é composta de 20 vetores de tamanho 20, após
aplicar a função que lhe enviei ele selecionará somente os valores
menores que o valor de corte 0,3 dentro de cada vetor. No entanto a
lista continuará com 20 objetos (ou vetores). Tranformei a lista em data
frame para você ver melhor o que aconteceu.
is.list(bandas) #Os dados enviados estão armazenados em uma lista
str(bandas) # você possui quatrocentos dados 20 obs de 20 variáveis
todos os vetores completos
length(bandas)
f<-function(x) x[x<=0.3]
bandas2<-lapply(bandas,FUN=f) #seleciona valores menores ou iguais a 0.3
dentro de cada vetor da lista
str(bandas2) # mesmo número de objetos 20 vetores contento 20 dados mas
observe que alguns vetores não contém dados
df<-data.frame(Data=unlist(sapply(bandas2, "[", 1:length(bandas2)))) #
em formato de data frame
On 09-10-2014 22:12, Fernando Antonio de souza wrote:
> Pelo que entendi a lista "banda" que você enviou contem dados de
> correlação e você quer selecionar apenas os cujo valor são menores ou
> iguais a 0.3. Se for só isso você pode utilizar o comando:
>
> f<-function(x) x[x<=0.3]
> lapply(bandas,FUN=f)
>
> Em 9 de outubro de 2014 18:57, Rodrigo Muniz <uenf.rodrigo em gmail.com
> <mailto:uenf.rodrigo em gmail.com>> escreveu:
>
> Caros,
> Tenho uma dataframe com cerca de 1500 variáveis e gostaria de
> saber a correlação entre essas variáveis, então gerei uma matriz
> de correlação.
> Como muitas variáveis estão altamente correlacionadas, eu gostaria
> de selecionar apenas as variáveis que tenham, por exemplo, no
> máximo uma correlação de 0,3. Para isso eu utilizei a função
> findCorrelation do pacote caret. Pela descrição, a função foi
> feita para isso, selecionar as variáveis mais correlacionadas,
> considerando um limite de corte.
> Como eu gostaria das variáveis menos correlacionadas, eu inverti
> minha matriz de correlação, pelo seguinte comando:
> as.matrix(sqrt((matrix.cor-1)^2), desta forma, a função
> selecionaria as variáveis menos correlacionada.
> No entanto, o resultado da função sempre me retorna bandas
> altamente correlacionada. Por isso gostaria de fazer de uma forma
> alternativa. Segue um pequeno exemplo para ajudar nas considerações.
> Se alguém souber uma forma de programar para obter esse resultado,
> aceito um direcionamento.
> Desde já agradeço pela atenção.
>
> require(caret)
>
> filtro=c(0.7) #Este parâmetro foi criado para definir o liminar de
> corte, como a #matriz está inversa, um valor de 0,7 que dizer que
> a correlação máxima entre as #variáveis deve cer de 0,3.
>
> matrix.cor <- as.data.frame(cor(bandas))# Gerar a matriz de correlação
>
> banda.selecao=bandas[,findCorrelation(as.matrix(sqrt((matrix.cor-1)^2)),
>
> cutoff=as.numeric(filtro), verbose=FALSE)] # selecionar
> do dataframe #original apenas as variáveis com fraca correlação.
>
> bandas=structure(list(X1417 = c(0.161042, 0.186075, 0.202966,
> 0.211156,
> 0.172813, 0.167929, 0.175015, 0.200225, 0.178143, 0.182516, 0.162152,
> 0.169258, 0.14955, 0.143907, 0.161655, 0.164643, 0.157703, 0.160282,
> 0.177145, 0.169043), X1366 = c(0.352479, 0.376561, 0.372766,
> 0.39279, 0.36767, 0.368855, 0.361146, 0.390109, 0.373625, 0.383793,
> 0.371615, 0.375047, 0.363033, 0.341382, 0.372219, 0.375438, 0.359356,
> 0.372921, 0.375115, 0.36681), X469 = c(0.07749, 0.098493, 0.083867,
> 0.101454, 0.087098, 0.088587, 0.079879, 0.083187, 0.087261, 0.091197,
> 0.085591, 0.091496, 0.081759, 0.093462, 0.094817, 0.089399, 0.087421,
> 0.08966, 0.097024, 0.084687), X1549 = c(0.233143, 0.262691, 0.266292,
> 0.280087, 0.247662, 0.242888, 0.237161, 0.269429, 0.25326, 0.260258,
> 0.239942, 0.244771, 0.224855, 0.211901, 0.237555, 0.242471, 0.232943,
> 0.234706, 0.248407, 0.243808), X1424 = c(0.149535, 0.176297,
> 0.193145, 0.197999, 0.16312, 0.156738, 0.165102, 0.190595, 0.165941,
> 0.171179, 0.149601, 0.158143, 0.139422, 0.131351, 0.150353, 0.153668,
> 0.145654, 0.149609, 0.162426, 0.158941), X1957 = c(0.045334,
> 0.078347, 0.055058, 0.071466, 0.04449, 0.052894, 0.066396, 0.087972,
> 0.053841, 0.073682, 0.068851, 0.04738, 0.044667, 0.060964, 0.061176,
> 0.065722, 0.052965, 0.05974, 0.07101, 0.076109), X1848 = c(0.247498,
> 0.280584, 0.274104, 0.278935, 0.252584, 0.256848, 0.235115, 0.274966,
> 0.268281, 0.267282, 0.255826, 0.23335, 0.237109, 0.230515, 0.262255,
> 0.258836, 0.2387, 0.265159, 0.271541, 0.265838), X1537 = c(0.218761,
> 0.248475, 0.254953, 0.264756, 0.233748, 0.230395, 0.224644, 0.256149,
> 0.236666, 0.24462, 0.223847, 0.229429, 0.210074, 0.198872, 0.220081,
> 0.227677, 0.217309, 0.21968, 0.231893, 0.226282), X1621 = c(0.285036,
> 0.31607, 0.313035, 0.331176, 0.302131, 0.300669, 0.290153, 0.323815,
> 0.307194, 0.318355, 0.298653, 0.303098, 0.285467, 0.269884, 0.297272,
> 0.301428, 0.291555, 0.300164, 0.302502, 0.299489), X1602 =
> c(0.273662,
> 0.302662, 0.304277, 0.319991, 0.29179, 0.291713, 0.281382, 0.313998,
> 0.296813, 0.305874, 0.286391, 0.294462, 0.27532, 0.260575, 0.287217,
> 0.289802, 0.279721, 0.285657, 0.291856, 0.289307), X1865 =
> c(0.199668,
> 0.229541, 0.230852, 0.245059, 0.226876, 0.215756, 0.207998, 0.254432,
> 0.20988, 0.226653, 0.206045, 0.194866, 0.195796, 0.183774, 0.214694,
> 0.231647, 0.207081, 0.208682, 0.223025, 0.199142), X1476 =
> c(0.144097,
> 0.170145, 0.187837, 0.192702, 0.158221, 0.154393, 0.160075, 0.184072,
> 0.162413, 0.166724, 0.147404, 0.15375, 0.133576, 0.128008, 0.146151,
> 0.150793, 0.143929, 0.141969, 0.158288, 0.154279), X2034 =
> c(0.081108,
> 0.110882, 0.100852, 0.109914, 0.109893, 0.06942, 0.128299, 0.139094,
> 0.10447, 0.125726, 0.118003, 0.075258, 0.090784, 0.055216, 0.102326,
> 0.101315, 0.08443, 0.123796, 0.104067, 0.102786), X1460 = c(0.136055,
> 0.161915, 0.177241, 0.184844, 0.149423, 0.143712, 0.150499, 0.173385,
> 0.150807, 0.156626, 0.138878, 0.145282, 0.125618, 0.120778, 0.138968,
> 0.139961, 0.133014, 0.132243, 0.150618, 0.144916), X1236 = c(0.41637,
> 0.440245, 0.422308, 0.453948, 0.428499, 0.436163, 0.427196, 0.454866,
> 0.433779, 0.451874, 0.447265, 0.44747, 0.44684, 0.422101, 0.451307,
> 0.452207, 0.436043, 0.454355, 0.44641, 0.437131), X1913 = c(0.049649,
> 0.06384, 0.080675, 0.0761, 0.062756, 0.056635, 0.074517, 0.084222,
> 0.054835, 0.05488, 0.06389, 0.058421, 0.054827, 0.050249, 0.063544,
> 0.066275, 0.057604, 0.072578, 0.070545, 0.061034), X1885 =
> c(0.105368,
> 0.136086, 0.161411, 0.146339, 0.115904, 0.121671, 0.149059, 0.145293,
> 0.125417, 0.145147, 0.124081, 0.112018, 0.101411, 0.096761, 0.122112,
> 0.114244, 0.105535, 0.122283, 0.140519, 0.121402), X492 = c(0.080821,
> 0.102833, 0.088743, 0.10809, 0.093344, 0.096766, 0.083556, 0.089436,
> 0.091601, 0.100154, 0.089925, 0.096294, 0.087353, 0.097834, 0.102614,
> 0.09692, 0.096883, 0.094752, 0.102917, 0.089361), X1916 = c(0.037402,
> 0.063136, 0.08053, 0.071535, 0.059838, 0.0555, 0.060523, 0.079581,
> 0.044433, 0.055137, 0.055831, 0.054455, 0.054067, 0.055332, 0.062323,
> 0.0651, 0.05896, 0.075877, 0.069466, 0.064714), X1249 = c(0.416616,
> 0.440854, 0.423568, 0.455739, 0.428821, 0.436904, 0.42868, 0.455141,
> 0.432762, 0.45234, 0.447037, 0.448069, 0.445743, 0.420802, 0.455476,
> 0.453444, 0.43817, 0.454327, 0.444599, 0.437981)), .Names =
> c("X1417",
> "X1366", "X469", "X1549", "X1424", "X1957", "X1848", "X1537",
> "X1621", "X1602", "X1865", "X1476", "X2034", "X1460", "X1236",
> "X1913", "X1885", "X492", "X1916", "X1249"), row.names = c(NA,
> 20L), class = "data.frame")
> --
> *Rodrigo A. Muniz*
> Eng. Agrônomo. Ms Produção Vegetal (UENF)
> Doutorando em Engenharia de Sistemas Agrícolas (ESALQ/USP)
> E-mail - muniz.ra em usp.br <mailto:muniz.ra em usp.br>
> Cel (19) 98300-4333 (Pessoal)
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br <mailto:R-br em listas.c3sl.ufpr.br>
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e
> forneça código mínimo reproduzível.
>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141010/649140fa/attachment.html>
Mais detalhes sobre a lista de discussão R-br