[R-br] Dúvida função no R

Felipe Buchbinder felbuch em gmail.com
Sábado Setembro 15 15:58:49 BRT 2012


Eduardo,

Aqui o erro também aparece quando a função grm é chamada.

No meu computador:

>sessionInfo()

R version 2.12.1 (2010-12-16)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United
States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United
States.1252

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base

other attached packages:
 [1] psy_1.0                  ltm_0.9-7                msm_1.1
     random.polychor.pa_1.1.3 nFactors_2.3.2
 [6] lattice_0.19-13          boot_1.2-43              MASS_7.3-9
    psych_1.1.10             polycor_0.7-8
[11] sfsmisc_1.0-18           mvtnorm_0.9-9991

loaded via a namespace (and not attached):
[1] grid_2.12.1     splines_2.12.1  survival_2.36-2 tools_2.12.1



2012/9/15 Eduardo Leoni <e.leoni em gmail.com>

> Aqui no meu computador:
>
> > sessionInfo()
> R version 2.15.1 (2012-06-22)
> Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
>
> locale:
> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
>
> other attached packages:
>  [1] psy_1.1                    ltm_0.9-8
>  [3] msm_1.1.2                  random.polychor.pa_1.1.3.2
>  [5] nFactors_2.3.3             lattice_0.20-6
>  [7] boot_1.3-4                 MASS_7.3-18
>  [9] psych_1.2.8                polycor_0.7-8
> [11] sfsmisc_1.0-20             mvtnorm_0.9-9992
>
> loaded via a namespace (and not attached):
> [1] grid_2.15.1      splines_2.15.1   survival_2.36-14 tools_2.15.1
> >
>
>
> o erro aparece quando a função grm (na verdade o call pra optim dentro
> dela) é chamada. É isso aí também?
>
> 2012/9/15 Felipe Buchbinder <felbuch em gmail.com>
>
>> O que eu preciso fazer é exatamente o que o Eduardo fez, com uma
>> modificação:
>>
>> O $p$, ao invés de ser um número gerado aleatoriamente, é o resultado de
>> uma função logit.
>>
>> Obviamente, o resultado de uma logit é um número entre 0 e 1, então a
>> solução do Eduardo é muito próxima do que eu preciso. Mas quando eu
>> substituo o "runif(1)" pela minha função
>> logística, os resultados deixam se ser entre 1 e 5.
>>
>> Por que isso pode estar ocorrendo?
>> Aproveito e envio o código inteiro anexo.
>>
>> Mais uma vez, muito obrigado,
>>
>> Felipe
>>
>>
>>
>> 2012/9/15 Fabio Mathias Corrêa <fabio.ufla em yahoo.com.br>
>>
>>> Felipe
>>>
>>> Da forma que o Eduardo fez a função está retornando valores entre  1 e
>>> 5. Não é isto o que vc quer?
>>>
>>> O table(s) está mostrando a frequência com que os valores apareceram na
>>> simulação que ele fez.
>>>
>>> Valeu!
>>>
>>>         Fábio Mathias Corrêa
>>>
>>>    Universidade Estadual de Santa Cruz
>>> Departamento de Ciências Exatas e da Terra - DCET
>>>
>>>
>>> Campus Soane Nazaré de Andrade, km 16 Rodovia Ilhéus-Itabuna
>>> CEP 45662-900. Ilhéus-Bahia
>>>
>>>
>>> Tel.: 73-3680-5076
>>>   ------------------------------
>>> *De:* Felipe Buchbinder <felbuch em gmail.com>
>>> *Para:* r-br em listas.c3sl.ufpr.br
>>> *Enviadas:* Sexta-feira, 14 de Setembro de 2012 23:00
>>>
>>> *Assunto:* Re: [R-br] Dúvida função no R
>>>
>>> Eduardo e Fábio,
>>> Muito obrigado pela ajuda. Se o problema não está no which, alguma idéia
>>> de onde ele possa estar?
>>> A função *resp* já retorna resultados absurdos, então o problema tem
>>> que estar nela. Só não vejo onde....
>>>
>>> 2012/9/14 Eduardo Leoni <e.leoni em gmail.com>
>>>
>>> E o problema não está no which...
>>>
>>> resp <- function() {
>>>   k <- 5
>>>   p.vec = NULL
>>>   for(category in 1:k)  # k = 5
>>>     {
>>>       p = runif(1)
>>>       p.vec = c(p.vec,p)
>>>     }
>>>   ##Generates a random number
>>>   seed<-runif(1,0.2,0.8)
>>>   ##Selects an answer
>>>   temp = which ( p.vec>seed )
>>>   if( length (temp) > 0 ) { resp = max (temp) } else { resp = 1 }
>>>   resp
>>> }
>>> s <- NULL
>>> for (i in 1:100) {
>>>   s <- c(s, resp())
>>> }
>>> > table(s)
>>> >s
>>> > 1  2  3  4  5
>>> >15  6 10 21 48
>>>
>>>
>>>
>>> 2012/9/14 Eduardo Leoni <e.leoni em gmail.com>
>>>
>>> ifelse quando length é igual a 1 não é recomendável:
>>>
>>> > system.time(replicate(10000, if(1>0) {1} else { 0}))
>>>    user  system elapsed
>>>   0.028   0.000   0.030
>>> > system.time(replicate(10000, ifelse(1>0, 1, 0)))
>>>    user  system elapsed
>>>   0.224   0.000   0.224
>>> >
>>>
>>>
>>> 2012/9/14 Fabio Mathias Corrêa <fabio.ufla em yahoo.com.br>
>>>
>>> Felipe,
>>>
>>> Realmente, o if resolve o problema.
>>>
>>> Só uma dica, troque o if por
>>>
>>> ifelse(length(temp)>0,resp=max(temp), resp=1)
>>>
>>> Quanto ao which, vc precisa corrgir!
>>>
>>> Valeu!
>>>
>>>
>>>         Fábio Mathias Corrêa
>>>
>>>    Universidade Estadual de Santa Cruz
>>> Departamento de Ciências Exatas e da Terra - DCET
>>>
>>>
>>> Campus Soane Nazaré de Andrade, km 16 Rodovia Ilhéus-Itabuna
>>> CEP 45662-900. Ilhéus-Bahia
>>>
>>>
>>> Tel.: 73-3680-5076
>>>   ------------------------------
>>> *De:* Felipe Buchbinder <felbuch em gmail.com>
>>> *Para:* r-br em listas.c3sl.ufpr.br
>>> *Enviadas:* Sexta-feira, 14 de Setembro de 2012 0:12
>>>
>>> *Assunto:* Re: [R-br] Dúvida função no R
>>>
>>> Fábio,
>>>
>>> Muito obrigado pela ajuda. Mas o *if *já não dá conta do caso em que
>>> p.vec não possui um elemento maior do que seed? E como p.vec é construido
>>> dentro de um loop que adiciona um elemento durante *k* iterações, como
>>> ele pode ter mais do que *k* elementos? Eu achava que já tinha
>>> controlado para evitar esses casos... não?
>>>
>>> mais uma vez obrigado,
>>>
>>> Felipe
>>>
>>> 2012/9/13 Fabio Mathias Corrêa <fabio.ufla em yahoo.com.br>
>>>
>>> O problema está nesta parte aqui!
>>>
>>> Nem sempre o vetor  p.vec possui um elemento maior que o seed, e quando
>>> isto ocorre retorna interger(0)
>>>
>>> Outro problema é que o which pega a posição do elemento, então, quando
>>> vc pega o max(temp), se o vetor tem tamanho 20, por exemplo, ele vai
>>> retornar o 20 e não o elemento.
>>>
>>> Precisa corrigir ai!
>>>
>>>  temp = which(p.vec>seed) #we use this temporary vector in order to
>>> avoid warnings should its length be zero
>>> print(temp)
>>>   if(length(temp)>0){resp=max(temp)}else{resp=1}
>>>
>>> Valeu!
>>>
>>>         Fábio Mathias Corrêa
>>>
>>>    Universidade Estadual de Santa Cruz
>>> Departamento de Ciências Exatas e da Terra - DCET
>>>
>>>
>>> Campus Soane Nazaré de Andrade, km 16 Rodovia Ilhéus-Itabuna
>>> CEP 45662-900. Ilhéus-Bahia
>>>
>>>
>>> Tel.: 73-3680-5076
>>>   ------------------------------
>>> *De:* Felipe Buchbinder <felbuch em gmail.com>
>>> *Para:* r-br em listas.c3sl.ufpr.br
>>> *Enviadas:* Quinta-feira, 13 de Setembro de 2012 15:24
>>> *Assunto:* Re: [R-br] Dúvida função no R
>>>
>>> Obrigado pela referência,
>>>
>>> Preparei um CMR que envio anexo.
>>>
>>> Mais uma vez, obrigado
>>> Felipe
>>>
>>> 2012/9/13 FHRB Toledo <fernandohtoledo em gmail.com>
>>>
>>> Felipe,
>>>
>>> Para CMR, consulte: https://gist.github.com/1088208
>>>
>>> att,
>>> FH
>>>
>>>
>>> 2012/9/13 Felipe Buchbinder <felbuch em gmail.com>
>>>
>>> O k foi definido no início do código, fora da função, como k = 5.
>>>
>>> Desculpe a ignorância, mas o que é um CMR? Como eu posso fazer um para
>>> enviar à lista?
>>>
>>> Obrigado pela disposição,
>>>
>>> Felipe
>>>
>>>
>>> 2012/9/13 Leonard de Assis <assis.leonard em gmail.com>
>>>
>>>  Onde foi definido o k?
>>>
>>> []s
>>> Leonard de Assis
>>> assis <dot> leonard <at> gmail <dot> com
>>>
>>> Em 13/09/2012 12:56, Felipe Buchbinder escreveu:
>>>
>>> Prezados professores,
>>>
>>>  Estou com um problema em uma função no R.
>>> A função é a seguinte:
>>>
>>>   resp <- function(subject,item,trait)
>>> {
>>>
>>>   p.vec = NULL
>>>
>>>   for(category in 1:k)  # k = 5
>>>   {
>>>     p = ogive ( theta[subject,trait] , a[item] , b[item,category] , D )
>>>    # aqui é uma logit (D=1) ou probit (D=1.7)
>>>     p.vec = c(p.vec,p)
>>>   }
>>>
>>>   #Generates a random number
>>>
>>>   seed<-runif(1,0.2,0.8)
>>>
>>>   #Selects an answer
>>>
>>>   temp = which ( p.vec>seed )
>>>   if( length (temp) > 0 ) { resp = max (temp) } else { resp = 1 }
>>>   resp
>>> }
>>>
>>>
>>>
>>>  Esta função está inserida em um loop e deveria me retornar um número
>>> inteiro entre 1 e 5.
>>> Da primeira vez, isto acontece.
>>> Mas a partir da segunda, ela começa a me retornar valores como 20, 16,...
>>>
>>>  Alguma idéia de porque isso acontece???
>>>
>>>  Desde já, obrigado!
>>>
>>>  Felipe Buchbinder
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> R-br mailing listR-br em listas.c3sl.ufpr.brhttps://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.
>>>
>>>
>>> _______________________________________________
>>> 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/20120915/e38948fe/attachment-0001.html>


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