[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