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@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@gmail.com>
Para: r-br@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@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@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@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@gmail.com>
Para: r-br@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@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@gmail.com>
Para: r-br@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@gmail.com>
Felipe,

Para CMR, consulte: https://gist.github.com/1088208

att,
FH


2012/9/13 Felipe Buchbinder <felbuch@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@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 list
R-br@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@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@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@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@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@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@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@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@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@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@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.