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

Felipe Buchbinder felbuch em gmail.com
Domingo Setembro 16 00:02:33 BRT 2012


Isto realmente resolve boa parte do problema. Muito obrigado, especialmente
ao Eduardo, ao Fabio e ao Leandro!!!

Porém, a função grm continua dando "out of bounds" às vezes, mas o SOR já
está resolvido.

Alguém tiver alguma idéia do que pode estar dando este problema?

Mais uma vez obrigado!!!

Felipe


2012/9/15 Fabio Mathias Corrêa <fabio.ufla em yahoo.com.br>

> Felipe,
>
> Creio que seu problema foi resolvido!
>
> Porque no primeiro laço das simulações não dá problema na matriz SOR?
>
> Bom, no primeiro laço a sua variável D = 1.
>
> E logo abaixo ela recebe os valores  D <- c(3,8,9,10)
> #Difficult items
>
> Quando o D passa de um vetor de tamanho 1 para um vetor de tamanho 4, o
> vetor p.vec é incrementado e pode ficar com tamanho de 20 ou mais.
>
>   p = ogive(theta[subject,trait],a[item],b[item,categ],D)
>   p.vec = c(p.vec,p)
>
> Veja um exemplo do porque o vetor fica incrementado.
>
> ogive(1,2,3,c(1:5)) # Aqui o vetor de saída tem tamanho 5.
>
> ogive(1,2,3,5) # Aqui o vetor de saída tem tamanho 1.
>
> Então o p.vec vai sendo incrementado de 5 em 5, da forma em que estava.
>
> Tem um outro detalhe, se vc colocar uma matriz muito grande, as suas
> simulações irão demorar muito! Tem muita coisa que pode ser melhorada em
> termos otimização!
>
>  Sumscale<-c(Sumscale,mean(input_matrix[i,]))  # Aqui vc pode utilizar um
> rowMeans()
>
> A função ogive não precisa ser construída dentro do laço das simulações.
> Coloque ela fora, basta fazer chamar ela apenas uma vez fora do laço das
> simulações.
>
> Tinha elementos da resp que não eram chamados na função, ficavam soltos,
> isso não é bom!
>
> Alterei os elementos de chamada dela.
>
> resp<-function(subject,item,trait,theta,a,b,D)
> {
>   #Calculate the probability of each category
>
>   p.vec = NULL
>
>   for(categ in 1:k) #For each category, calculate:
>   {
>     p = ogive(theta[subject,trait],a[item],b[item,categ],D)
>     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) #we use this temporary vector in order to avoid
> warnings should its length be zero
>   if(length(temp)>0){resp=max(temp)}else{resp=1}
>   resp
> }
>
> 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; Fabio Mathias Corrêa <
> fabio.ufla em yahoo.com.br>
> *Enviadas:* Sábado, 15 de Setembro de 2012 15:03
>
> *Assunto:* Re: [R-br] Dúvida função no R
>
> 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120916/babff9fc/attachment.html>


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