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

Rogério Barbosa antrologos em gmail.com
Quarta Outubro 23 21:29:05 BRST 2013


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


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