[R-br] Diferença de resultados entre 64 e 32 bits

Elias T. Krainski eliaskrainski em yahoo.com.br
Quinta Julho 19 11:28:34 BRT 2012


Olá Rodrigo, 

O resultado é diferente apenas na sua implementação, não na implementação do pacote copula. Na sua função normCop() vc retorna exp(100), caso out seja 'igual' Inf. Ocorre que .Machine é diferente entre 32 e 64 Bits, pois este tem maior capacidade/precisão numérica. Fazendo retornar out 1e10 já é suficiente para você obter o mesmo resultado em ambas as arquiteturas.
 
Att.
Elias T. Krainski


>________________________________
> De: Rodrigo Coster <rcoster em gmail.com>
>Para: r-br em listas.c3sl.ufpr.br 
>Enviadas: Quinta-feira, 19 de Julho de 2012 10:24
>Assunto: Re: [R-br] Diferença de resultados entre 64 e 32 bits
> 
>
>Benilton,
>
>
>mesmo com --vanilla deu resultados diferentes.
>
>
>> sessionInfo()
>R version 2.15.1 (2012-06-22)
>Platform: x86_64-pc-mingw32/x64 (64-bit)
>
>
>locale:
>[1] LC_COLLATE=Portuguese_Brazil.1252  LC_CTYPE=Portuguese_Brazil.1252    LC_MONETARY=Portuguese_Brazil.1252 LC_NUMERIC=C                       LC_TIME=Portuguese_Brazil.1252    
>
>
>attached base packages:
>[1] stats     graphics  grDevices utils     datasets  methods   base     
>
>
>other attached packages:
>[1] MASS_7.3-19    copula_0.99-4  pspline_1.0-14
>
>
>loaded via a namespace (and not attached):
>[1] ADGofTest_0.3    gsl_1.9-9        mvtnorm_0.9-9992 stabledist_0.6-4 stats4_2.15.1   
>> a
>           [,1]      [,2]
> [1,] 0.6533333 0.6673587
> [2,] 0.6956496 0.7000601
> [3,] 0.5554635 0.6169322
> [4,] 0.4895890 0.5405670
> [5,] 0.6038044 0.6422919
> [6,] 0.7295427 0.7295427
> [7,] 0.6548815 0.7080392
> [8,] 0.5468827 0.6015380
> [9,] 0.6630423 0.6955567
>[10,] 0.7214445 0.7214441
>[11,] 0.6681827 0.6681817
>[12,] 0.6429204 0.6429205
>[13,] 0.5678848 0.5918048
>[14,] 0.6829043 0.6985720
>[15,] 0.7653632 0.7653638
>[16,] 0.6215542 0.6570017
>[17,] 0.7085038 0.7085053
>[18,] 0.6620582 0.6958966
>[19,] 0.6829283 0.6912327
>[20,] 0.6416442 0.6904770
>
>
>
>
>> sessionInfo()
>R version 2.15.1 (2012-06-22)
>Platform: i386-pc-mingw32/i386 (32-bit)
>
>
>locale:
>[1] LC_COLLATE=Portuguese_Brazil.1252  LC_CTYPE=Portuguese_Brazil.1252    LC_MONETARY=Portuguese_Brazil.1252 LC_NUMERIC=C                       LC_TIME=Portuguese_Brazil.1252    
>
>
>attached base packages:
>[1] stats     graphics  grDevices utils     datasets  methods   base     
>
>
>other attached packages:
>[1] MASS_7.3-19    copula_0.99-4  pspline_1.0-14
>
>
>loaded via a namespace (and not attached):
>[1] ADGofTest_0.3    gsl_1.9-9        mvtnorm_0.9-9992 stabledist_0.6-4 stats4_2.15.1   
>> a
>           [,1]      [,2]
> [1,] 0.6673587 0.6673587
> [2,] 0.7000619 0.7000601
> [3,] 0.6169316 0.6169322
> [4,] 0.5405662 0.5405670
> [5,] 0.6423069 0.6422919
> [6,] 0.7295427 0.7295427
> [7,] 0.7080409 0.7080392
> [8,] 0.6015378 0.6015380
> [9,] 0.6955575 0.6955567
>[10,] 0.7214445 0.7214441
>[11,] 0.6681827 0.6681817
>[12,] 0.6429204 0.6429205
>[13,] 0.5918050 0.5918048
>[14,] 0.6985704 0.6985720
>[15,] 0.7653632 0.7653638
>[16,] 0.6569979 0.6570017
>[17,] 0.7085038 0.7085053
>[18,] 0.6958953 0.6958966
>[19,] 0.6912321 0.6912327
>[20,] 0.6904751 0.6904770
>
>
>
>2012/7/18 Benilton Carvalho <beniltoncarvalho em gmail.com>
>
>Voce consegue executar o R passando argumentos adicionais? (imagino q
>>vc tenha q fucar na linha de comando dentro do atalho usado pelo
>>Windows)...
>>
>>Se vc estivesse num Linux/Mac, eu recomendaria executar o R como segue:
>>
>>R --arch i386 --vanilla
>>
>>e
>>
>>R --arch x86_64 --vanilla
>>
>>E tentar mais uma ultima vez a comparacao entre ambos... (Evite
>>qualquer firula como RStudio tbm).
>>
>>
>>b
>>
>>2012/7/18 Rodrigo Coster <rcoster em gmail.com>:
>>> Benilton,
>>>
>>> rodando na mesma maquina o resultado do R32 e R64 é diferente, foi com base
>>> nisso (R's da mesma maquina) que eu fiz o gráfico que mandei... tentei
>>> desinstalar o R e reinstalar, mas não resolveu
>>>
>>>
>>> []'s
>>>
>>>
>>> 2012/7/18 Benilton Carvalho <beniltoncarvalho em gmail.com>
>>>>
>>>> Eu comecaria por garantir que as versoes do R e dos demais pacotes
>>>> sejam as mesmas nos diferentes ambientes.
>>>>
>>>> Em teoria, a maquina que tem o R 64 bits tambem tem o 32 bits (algum
>>>> usuario de windows pode te ajudar melhor q eu nesse caso), vc poderia
>>>> tentar executar o R32 na mesma maquina...
>>>>
>>>> b
>>>>
>>>> 2012/7/18 Rodrigo Coster <rcoster em gmail.com>:
>>>> > Benilton,
>>>> >
>>>> > os teus resultados são iguais aos meus no R 64 bits. Por resultado
>>>> > antigo tu
>>>> > diz carregar alguma área de trabalho? Se sim, isso não esta acontecendo.
>>>> >
>>>> > Leonard,
>>>> >
>>>> > É um i5 3450 com windows 7, R 2.15.1 e os pacotes são as versões mais
>>>> > recentes. A outra maquina (que é só 32 bits) eu sei que é um Core 2 Quad
>>>> > com
>>>> > WinXP, R e pacotes desatualizados
>>>> >
>>>> >
>>>> > []'s
>>>> >
>>>> >
>>>> > 2012/7/17 Leonard de Assis <assis.leonard em gmail.com>
>>>> >>
>>>> >> Eu aqui tenho linux, rodei uma vm windows pra simular o 32 bits e
>>>> >> comparei
>>>> >> com o meu linux (64 bits) deu que os resultados não diferem
>>>> >>
>>>> >> Seria bom apresentar maiores detalhes, como versões do R, do pacote,
>>>> >> máquina, etc
>>>> >>
>>>> >> []s
>>>> >> Leonard de Assis
>>>> >> assis <dot> leonard <at> gmail <dot> com
>>>> >>
>>>> >> Em 17/07/2012 12:18, Rodrigo Coster escreveu:
>>>> >>
>>>> >> Benilton,
>>>> >>
>>>> >> olha, acho muito pouco provável (até pq os 2 são windows, então acho
>>>> >> que
>>>> >> nem existe essa opção). No computador aqui de casa os 2 R divergem no
>>>> >> resultado (o gráfico que eu mandei foi rodando no R 32 e 64 bits no
>>>> >> mesmo
>>>> >> computador, Windows 7).
>>>> >>
>>>> >> Abri a imagem que tu mandou e rodei o comando, deu que os 2 objetos são
>>>> >> iguais.
>>>> >>
>>>> >>
>>>> >> []'s
>>>> >>
>>>> >> 2012/7/17 Benilton Carvalho <beniltoncarvalho em gmail.com>
>>>> >>>
>>>> >>> Alguma chance de algum dos computadores q vc tenha usado estar
>>>> >>> utilizando alguma "compilacao propria" do R ou algum esquema de
>>>> >>> otimizacao?
>>>> >>>
>>>> >>> Executei o seu codigo no meu computador e tudo parece OK (ie., o
>>>> >>> objeto 'a' eh identico entre arquiteturas)... O arquivo a seguir
>>>> >>> possui 2 elements: a32 e a64, resultantes do codigo q vc enviou.
>>>> >>>
>>>> >>> https://www.dropbox.com/s/srn0bhtmen4fd6u/R64x32.Rda
>>>> >>>
>>>> >>> Experimente o comando a seguir ao carregar o arquivo:
>>>> >>>
>>>> >>> all.equal(a32, a64)
>>>> >>>
>>>> >>> A unica coisa q consigo imaginar e' se alguma "otimizacao" ao compilar
>>>> >>> o R e qq outro acessorio utilizado nao tiver dado certo.
>>>> >>>
>>>> >>>
>>>> >>> b
>>>> >>>
>>>> >>>
>>>> >>> 2012/7/17 Rodrigo Coster <rcoster em gmail.com>:
>>>> >>> > Caros,
>>>> >>> >
>>>> >>> > programei uma rotina para estimar por máxima verossimilhança os
>>>> >>> > parâmetros
>>>> >>> > de uma cópula e para ver se estava certo comparei os resultados com
>>>> >>> > o
>>>> >>> > comando do pacote copula. Encontrei diferenças apenas na 5a casa
>>>> >>> > decimal em
>>>> >>> > diante, que considerei como sendo por causa do método numérico
>>>> >>> > utilizado. Só
>>>> >>> > que, ao fazer a mesma comparação num computador 64 bits os
>>>> >>> > resultados
>>>> >>> > são
>>>> >>> > bastante divergentes (o meu código muda o valor estimado, enquanto o
>>>> >>> > pacote
>>>> >>> > copula mantem), mudando na 2a casa decimal (no caso o parâmetro é a
>>>> >>> > correlação, então a 2a casa decimal é bem importante). Dai me bateu
>>>> >>> > a
>>>> >>> > seguinte dúvida: em qual confiar?
>>>> >>> >
>>>> >>> > Código:
>>>> >>> > require(copula)
>>>> >>> > require(MASS)
>>>> >>> > set.seed(31415)
>>>> >>> >
>>>> >>> > normCop <- function(param,data) {
>>>> >>> >  n <- nrow(data)
>>>> >>> >  if (length(param) != n) { param <- rep(param,nrow(data)) }
>>>> >>> >  cop <- mapply(normalCopula,param=param,MoreArgs=list(dim=2))
>>>> >>> >  datalist <- apply(data,1,list)
>>>> >>> >  for (i in 1:n) { datalist[[i]] <- datalist[[i]][[1]] }
>>>> >>> >  out <- -sum(log(mapply(dcopula,copula=cop,u=datalist)))
>>>> >>> >  if (out == Inf) { out = exp(100) }
>>>> >>> >  return(out)
>>>> >>> > }
>>>> >>> > a <- matrix(0,20,2)
>>>> >>> > n <- 100
>>>> >>> > Sigma <- matrix(c(10,3,3,2),2,2)
>>>> >>> > for (j in 1:20) {
>>>> >>> >  data <- mvrnorm(n=n, rep(0, 2), Sigma)
>>>> >>> >  data <- apply(data,2,rank)/(n+1)
>>>> >>> >
>>>> >>> >  fitNormCop <- function(data) {
>>>> >>> >   optim(cor(data)[2],normCop,data=data, lower = 0, upper =
>>>> >>> > .9999,method="L-BFGS-B")
>>>> >>> >  }
>>>> >>> >  a[j,1] <- fitNormCop(data)$par # Meu
>>>> >>> >  a[j,2] <- fitCopula(normalCopula(.2,2), data, method="ml")@estimate
>>>> >>> > #
>>>> >>> > Pacote copula
>>>> >>> > }
>>>> >>> >
>>>> >>> > E aqui um gráfico de dispersão comparando todos:
>>>> >>> > http://img411.imageshack.us/img411/7527/92588280.png
>>>> >>> >
>>>> >>> >
>>>> >>> >
>>>> >>> >
>>>> >>> >
>>>> >>> >
>>>> >>> > []'s
>>>> >>> >
>>>> >>> > _______________________________________________
>>>> >>> > 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/20120719/5ea549b1/attachment.html>


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