[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