[R-br] Não consigo fazer uma ANOVA com arquivo com 1e+06 registros.

Elias T Krainski eliaskrainski em yahoo.com.br
Quarta Outubro 23 07:35:08 BRST 2013


Oi Luiz,

O problema e' que vc tem 1000 niveis em cada um de dois fatores. Como a 
funcao aov() usa a funcao lm(), esta monta a matriz de delineamento, ne 
neste caso tem dimensao de um milhao por 1999. Para armazenar essa 
matriz vc precisa de 14.9Gb

print(object.size(double(1999))*1e6, unit='Gb')

Se seu computador tivesse 16Gb de memoria vc conseguiria fazer 
calculando as estatistica suficientes X'X e X'y. Foi o que eu fiz e 
enviei X'X e X'y no seu e-mail. Mas isso ainda nao 'e a melhor solucao 
nesse caso particular.

Como vc nao tem fator continuo, e' muito barato computacionalmente fazer 
o quadro de anova calculando as expressoes de soma de quadrados.
Dessa forma vc consegue montar um quadro de anova facilmente num 
computador com pouca memoria. Note que seu dado consiste em apenas dois 
fatores e uma resposta continua, cada um com 1 milhao de registros. Isso 
ocupa apenas 19.2Mb em memoria

print(object.size(Data), un='Mb')

Veja como montar o quadro de anova:

attach(Data)
n <- length(y)
ntr <- c(length(levels(block)), length(levels(Treat)))
gltot <- n-1
gltra <- ntr - 1
glres <- n - sum(ntr)

correcao <- (sum(y)^2)/n
sqtot <- sum(y^2)-correcao
bltot <- tapply(y, block, sum)
trtot <- tapply(y, Treat, sum)

sqbl <- sum(bltot^2)/ntr[2] - correcao
sqtr <- sum(trtot^2)/ntr[1] - correcao
sqres <- sqtot - sqbl - sqtr

qmbl <- sqbl/gltra[1]
qmtr <- sqtr/gltra[2]
qmres <- sqres/glres

fval <- c(qmbl, qmtr)/qmres
pval <- pf(fval, gltra, glres, lower.tail=FALSE)

data.frame(gl=c(gltra, glres, gltot),
            sqt=c(sqbl, sqtr, sqres, sqtot),
            qm=c(qmbl, qmtr, qmres, NA),
            fval=c(fval, NA, NA),
            pval=c(pval, NA, NA))


On 10/22/2013 08:13 PM, Luiz Roberto Martins Pinto wrote:
> Caros companheiros da R-BR.
>
> Não consigo fazer uma ANOVA com arquivo com 1e+06 registros.
> Então... preciso de ajuda!!!
>
> Dados:
>
> http://www1.datafilehost.com/d/c0d31775
>
> Meu pc
> R for windows 2.15.1(x64)
> 8 Gb de Memo
>
> load('RCBD_Data.Rdata') # Arquivo com 1e+06 registros
>
> m=aov(y~Treat+block,data=Data)
> summary(m)
>
> Mensagem de erro:
>
> Erro: não é possível alocar vetor de tamanho 14.9 Gb
> Além disso: Mensagens de aviso perdidas:
> 1: In model.matrix.default(mt, mf, contrasts) :
>    Reached total allocation of 8086Mb: see help(memory.size)
> 2: In model.matrix.default(mt, mf, contrasts) :
>    Reached total allocation of 8086Mb: see help(memory.size)
> 3: In model.matrix.default(mt, mf, contrasts) :
>    Reached total allocation of 8086Mb: see help(memory.size)
> 4: In model.matrix.default(mt, mf, contrasts) :
>    Reached total allocation of 8086Mb: see help(memory.size)
>
>
> Luiz Roberto Martins Pinto
> Prof. Pleno/DCET/UESC
> Laboratório de Estatística Computacional
> Universidade Estadual de Santa Cruz
> Ilhéus-Bahia
>
> luizroberto.uesc em gmail.com <mailto:luizroberto.uesc em gmail.com>
> skype: lrmpinto
> http://lattes.cnpq.br/2732314327604831
>
>
>
>
> _______________________________________________
> R-br mailing list
> 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.
>


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