[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 23:17:16 BRST 2013


Rogério,

Agradeço a sua generosidade.

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 21:29, Rogério Barbosa <antrologos em gmail.com>escreveu:

> O código abaixo toma partes de  scripts do PDF dos pacotes ff e ffbase.
>
> Eu testei com seus dados  e deu certo. Mas na hora de copiar e colar para
> o e-mail, houve erros... Acho que agora está certo.
> Mas ressalto, isso é só uma regressão linear. Não sei como calcular o
> two-way anova a partir disso.. somente uma anova comum. Mas estou certo de
> que tem jeito...
>
>
> #####################################
>
> 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, dados.ff[i,,drop=FALSE])
>   }
> }
>
> summary(biglmfit)
>
>
> 2013/10/23 Luiz Roberto Martins Pinto <luizroberto.uesc em gmail.com>
>
>> Agora deu o seguinte erro...
>>
>> Erro em is.data.frame(data) : objeto 'firis' não encontrado
>>
>>
>> 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:56, Rogério Barbosa <antrologos em gmail.com>escreveu:
>>
>> desculpe, foi um erro. A linha correta é:
>>>
>>> form = y ~ factor(Treat) + factor(block)
>>>
>>>
>>> 2013/10/23 Luiz Roberto Martins Pinto <luizroberto.uesc em gmail.com>
>>>
>>>> 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.
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> 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/e0df6711/attachment.html>


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