Paulo,


obrigado pela pronta resposta! :)

Vamos aos pontos. O a, b e c  estão no segundo link parit.

Na realidade é uma simulação MC de um modelo de 3 parâmetros da Teoria da Resposta ao item.

Meu Theta tem dimensão 100000x1
dim(a) = 100 x 1
dim(b) = 100 x 1
dim(c) = 100 x 1

os três foram agrupados em um unico arquivo 100 x 3 chamado parit e disponível em http://pasteit.com/16647

a minha função PudT calcula a probabilidade de um aluno acertar ao item dada sua proficiência. No caso, se rodar

PudT(rnorm(100000),1,0,.2,1.7) vou ter um vetor de tamanho 100000.

Acontece que vou replicar isto para cada item, ou seja, no caso, 100 vezes. Ela esta rodando rápido, mas queria implementar uma melhoria no for. Não sei muito bem como usar um apply neste caso para montar uma matriz 100000x100 aonde nas colunas terei a probabilidade do acerto de cada item. Assim comparo com uma unif(100000x100) disposta em uma matriz também e a simulação dos erros e acertos dos alunos.

Será que agora fui claro?


Atenciosamente,
Leandro Marino
Cel.: + 55 21 9845-7707
Cel.: + 55 21 8777-7907



Em 26 de janeiro de 2012 12:05, Paulo Justiniano <paulojus@leg.ufpr.br> escreveu:
Leandro

olhabndo aina mais seu codigo:

1 fiquei na divida se voce quere usar Theta ou Theta[i]

2. ma parece que nao precisa da funcao no for nem do apply que sugeri antes

Como voce usa os vetores todos os elementos de
ci + (1-ci)/(1 + exp(-D*ai*(Theta-bi)))
pode ser calculado diretamente com os vetores, nao?

algo como
c + (1-c)/(1 + exp(-D*a*(Theta-b)))

mas observando como usar Theta




On Thu, 26 Jan 2012, Paulo Justiniano wrote:

Caro Leandro

seu código não é exatamentre reproduzável (a,b,c nao sao dados nem criados, nem a sua dimensao é conhecida) (nem mínimo)...
a seria bom comentários aqui sobre o que pretende
alem de que o proprio código poderia ser comentado

Mas de qualque forma o critico me parece ser a inclusao de colunas
em "dados" a cada passo do for()
Este mecanismo não é bom por ficar copiando o objeto

Possivies melhorias passariam por:

1. mudar a funcao para receber um vetor
2. rodar com apply o quye deve gerar uma matriz que seria concatenada de uma só vez a dados

algo9 como:

PudT <- function(abc, Th, D){
  PudT <- abc[3] + (1-abc[3])/(1 + exp(-D*abc[1]*(Th-abc[2])))
  PudT
}

dados <- cbind.data.frame(cod=sprintf('%06d',1:100000),Theta)

#for(i in 1:100){
#dados[,i+2] <- PudT(dados$Theta,parit[i,1],parit[i,2],parit[i,3],1.7)
#}

dados$res <- apply(parit, 1, Th=Theta, D=1.7)


Sugiro testar em um conjunto pequeno para confrontar os resultados com os seus




On Thu, 26 Jan 2012, Leandro Marino wrote:

Caros,
alguém sabe me ajudar a otimizar o código do link abaixo:

http://pasteit.com/16646

Como referencia, coloquei o arquivo parit no link:
http://pasteit.com/16647

Agradeco qualquer ajuda!!!



Atenciosamente,
Leandro Marino
http://www.leandromarino.com.br (Fotógrafo)
http://est.leandromarino.com.br/Blog (Estatístico)
Cel.: + 55 21 9845-7707
Cel.: + 55 21 8777-7907



_______________________________________________
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.