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

Luiz Roberto Martins Pinto luizroberto.uesc em gmail.com
Quarta Outubro 23 19:48:40 BRST 2013


Rogério,

Agradeço sua colaboração, e o script enviado.

O comando form(y ~ factor(Treat) + factor(block)) não foi aceito.




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
skype: lrmpinto
http://lattes.cnpq.br/2732314327604831




Em 23 de outubro de 2013 19:24, Rogério Barbosa <antrologos em gmail.com>escreveu:

> O biglm funciona bem. Apliquei nos dados do Luiz Roberto e deu certo. Mas
> é bem lento (a função rxLinMod do pacote RevoScalerR, do RevolutionR é
> bemmm mais rápida). Mas se o negócio é continuar usando o R convencional,
> então funciona bem.
>
> Segue abaixo o código.
>
> Mas a função "aov" não funciona em cima do objeto gerado pelo biglm (e
> funciona em cima do lm...)
>
> Eu não sei como calcular um two-way anova a partir desses resultados...
> mas creio que tem jeito. Aliás... gostaria muito mesmo de saber como
> fazê-lo.
>
> Ma se o objetivo não envolve diferenciar os quadrados de regressão entre
> as variáveis "Treat" e "block", então um anova simples é facil de calcular
> -- a partir dos valores preditos e resíduos.
>
>
> abraços,
> Rogério
>
> #####################################
>
> require(ff)
> require(ffbase)
> require(biglm)
>
> load("RCBD_Data.Rdata")
>
> dados.ff = as.ffdf(Data)
> rm(Data)
> gc()
>
> form(y ~ factor(Treat) + factor(block))
>
>
> for (i in chunk(dados.ff, by=25000)){
>   if (i[1]==1){
>     message("first chunk is: ", i[[1]],":",i[[2]])
>     biglmfit <- biglm(form, data=dados.ff[i,,drop=FALSE])
>   }else{
>     message("next chunk is: ", i[[1]],":",i[[2]])
>     biglmfit <- update(biglmfit, firis[i,,drop=FALSE])
>   }
> }
>
>
>
>
>
> 2013/10/23 Benilton Carvalho <beniltoncarvalho em gmail.com>
>
>> Sugestão completamente sem checar dados: biglm ou mesmo o biganalytics
>> (sugestão por esse último, já que o usuário não parece ter RAM suficiente)
>> foram tentados?
>> On Oct 23, 2013 12:24 PM, "Luiz Roberto Martins Pinto" <
>> luizroberto.uesc em gmail.com> wrote:
>>
>>> Edson,
>>>
>>> Agradeço a sugestão.
>>> Vou experimentar.
>>> Abraços,
>>> Luiz Roberto
>>>
>>> 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
>>> skype: lrmpinto
>>> http://lattes.cnpq.br/2732314327604831
>>>
>>>
>>>
>>>
>>> Em 23 de outubro de 2013 11:02, Edson Lira <edinhoestat em yahoo.com.br>escreveu:
>>>
>>>> Tem um pacote chamado ff que executa a leitura de arquivos grandes.
>>>>
>>>> Transforme seus dados para um arquivo .csv (caso não seja) e tente a
>>>> leitura com este pacote.
>>>>
>>>>
>>>> [  ]'s.
>>>> Edson Lira
>>>> Estatístico
>>>> Manaus-Amazonas
>>>>
>>>>
>>>>   Em Quarta-feira, 23 de Outubro de 2013 5:35, Elias T Krainski <
>>>> eliaskrainski em yahoo.com.br> escreveu:
>>>>  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.
>>>>
>>>> >
>>>> _______________________________________________
>>>> 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.
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> 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.
>>>>
>>>
>>>
>>> _______________________________________________
>>> 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.
>>>
>>
>> _______________________________________________
>> 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.
>>
>
>
> _______________________________________________
> 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131023/a198695f/attachment.html>


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