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

Rogério Barbosa antrologos em gmail.com
Quarta Outubro 23 19:24:46 BRST 2013


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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131023/b685d007/attachment.html>


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