[R-br] análise multivariada em grandes dados

Elias Teixeira Krainski eliaskrainski em yahoo.com.br
Quinta Julho 14 05:22:01 BRT 2016


Oi Edimeire,

On 13/07/16 23:24, Edimeire Alexandra Pinto wrote:
> analisar pressupostos, por exemplo, multicolinearidade, outliers, etc.

Há várias controvércias em testar normalidade em grandes conjuntos de 
dados. Veja este exemplo:
http://stats.stackexchange.com/questions/2492/is-normality-testing-essentially-useless

Ainda sobre matriz de covariancia, veja uma "saída":
http://stackoverflow.com/questions/12670972/doing-pca-on-very-large-data-set-in-r

Porém, gostaria de sugerir dar uma olhada no livro "Elementos de 
aprendizado estatístico" cujo pdf está disponível free na página do 
segundo autor em
http://statweb.stanford.edu/~tibs/ElemStatLearn/

Esse livro aborda desde regressão, classificação até técnicas mais 
comums em "Aprendizado de máquina". Se alguém quiser uma introdução à 
redes neurais, por exemplo, sobre a ótica estatística, essa é uma boa 
referência.

Os autores desenvolveram um pacote no R (o 'glmnet') que implementa de 
forma muito eficiente a técnica de 'elastic net' e LASSO (regressão 
regularizada). Só para ter uma idéia dessa eficiência considere o caso 
de uma regressão com matriz X esparsa. Consegui fazer um teste com 
15milhões de linhas e 1 milhão de colunas em 13 segundos (mas a matriz X 
era realmente muito esparsa tendo "apenas" ~60milhões de não zeros). 
Notar que os autores estimaram uma rede elástica com (100 regressões) 
com 54 milhões de dados e 7 milhões de preditores em 2 horas! ver isso 
no slide 17 (pág. 40) em http://web.stanford.edu/~hastie/TALKS/SLBD_new.pdf

Olha abaixo um exemplo (matriz não esparsa) e note que é mais rápido 
fazer 100 regressões que criar a matriz!

 > ### tamanhos
 > n = 1e6

 > k = 200

 > ### matriz de covariaveis
 > system.time(x <- matrix(rnorm(n*k), n, k))
    user  system elapsed
  13.757   0.152  13.932

 > print(object.size(x), unit='Mb')
1525.9 Mb

 > ### resposta: 2 grupos
 > g2 = sample(1:2, n, replace=TRUE)

 > ### LDA
 > require(MASS)

 > system.time(l2 <- lda(x=x, grouping=g2)) ### 4 cores: 7.55gb
    user  system elapsed
156.564   9.146  69.960

 > ### regressao logistica regularizada
 > require(glmnet)

 > system.time(fit2 <- glmnet(x, g2, family="binomial")) ### 1 core 3.4Gb
    user  system elapsed
   3.796   0.053   3.855

Note a grande diferença em eficiencia (com as opções default glmnet faz 
100 regressões!). A vantagem da rede elástica é que a seleção de 
variáveis importantes é feita automaticamente.

Elias


Mais detalhes sobre a lista de discussão R-br