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

Leandro Marino leandromarino em leandromarino.com.br
Sexta Setembro 14 23:56:00 BRT 2012


*Tenho algo que fiz e está bem implementado*
*
*
*
PudT <- function(Theta,ai,bi,ci,D){
    PudT <- ci + (1-ci)/(1 + exp(-D*ai*(Theta-bi)))
    PudT
}

parit <- data.frame(id= ..., a = ..., b=..., c=....)
respo <- matrix(ncol=nitem,nrow=nalu)

    for(k in 1:nitem){
                respo[,k] <-
                as.integer(PudT(
                  Theta    = [,2],
                     ai    = parit[k,'a'],
                     bi    = parit[k,'b'],
                     ci    = parit[k,'c'],
                     D     = 1) >
               runif(nalu,0,1))
}




*
Em 14 de setembro de 2012 23:30, Felipe Buchbinder <felbuch em gmail.com>escreveu:

> certo
>
>
> 2012/9/14 Leandro Marino <leandromarino em leandromarino.com.br>
>
>> *Felipe, *
>> *
>> *
>> *pelo que entendi você esta considerando modelos de teoria de resposta
>> ao item certo? E dados os parâmetros e o score simulado irá obter o padrão
>> de respostas certo?*
>> *
>> *
>> Em 14 de setembro de 2012 23:00, Felipe Buchbinder <felbuch em gmail.com>escreveu:
>>
>> 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120914/0dc57ac1/attachment-0001.html>


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