Regra de Bayes em loop - desculpem se a mensagem foi triplicada

Boa Tarde pessoal ! Peguei do manual do Bioestat o exemplo da Regra de Bayes para fazer no R e consegui na mão grande, logo abaixo. Tentei então colocar em loop para expandir para além de 3 situações e aí deu erro no cálculo do denominador (o loop está no final). Como posso resolver ? Obrigado, Mauricio Cardeal UFBA # Regra de Bayes # Dados populacionais PB1 <- 0.15 # asma PB2 <- 0.01 # enfisema PB3 <- 0.009 # ca # Dados clínicos PAdadoB1 <- 0.26 # dispneia dado asma PAdadoB2 <- 0.75 # dispneia dado enfisema PAdadoB3 <- 0.43 # dispneia dado ca PB1dadoA <- (PAdadoB1 * PB1) / (PAdadoB1*PB1 + PAdadoB2*PB2 + PAdadoB3*PB3) PB2dadoA <- (PAdadoB2 * PB2) / (PAdadoB1*PB1 + PAdadoB2*PB2 + PAdadoB3*PB3) PB3dadoA <- (PAdadoB3 * PB3) / (PAdadoB1*PB1 + PAdadoB2*PB2 + PAdadoB3*PB3) rbind(Asma_dado_dispneia=PB1dadoA,Asma_dado_enfisema=PB2dadoA,Asma_dado_ca=PB3dadoA) [,1] Asma_dado_dispneia 0,774270 Asma_dado_enfisema 0,148898 Asma_dado_ca 0,076831 # LOOP PB <- c(0.15,0.01,0.009) PAdadoB <- c(0.26,0.75,0.43) dados <- data.frame(PB,PAdadoB) n = dim(dados)[1] dados$PBdadoA <- 0 dados$den <- 0 dados for(i in 1:n) { dados$num <- dados$PAdadoB[i] * dados$PB[i] for(j in 1:n) { dados$den <- dados$PAdadoB[j]*dados$PB[j] + dados$den } dados$PBdadoA <- dados$num[i] / dados$den[i] } dados PB PAdadoB PBdadoA den num 1 0,150 0,26 0,025610 0,15111 0,00387 2 0,010 0,75 0,025610 0,15111 0,00387 3 0,009 0,43 0,025610 0,15111 0,00387

Esta faltando você indexar os vetores: for(i in 1:n) { dados$num <- dados$PAdadoB[i] * dados$PB[i] for(j in 1:n) { dados$den[i] <- dados$PAdadoB[j]*dados$PB[j] + sum(dados$den) } dados$PBdadoA[i] <- dados$num[i] / dados$den[i] } Mas você pode fazer sem for: transform(dados, num = PAdadoB * PB, den = cumsum(PAdadoB * PB), PBdadoA = (PAdadoB * PB) + cumsum(PAdadoB * PB)) 2011/3/17 Mauricio Cardeal <mcardeal2010@gmail.com>:
Boa Tarde pessoal !
Peguei do manual do Bioestat o exemplo da Regra de Bayes para fazer no R e consegui na mão grande, logo abaixo. Tentei então colocar em loop para expandir para além de 3 situações e aí deu erro no cálculo do denominador (o loop está no final). Como posso resolver ? Obrigado, Mauricio Cardeal UFBA
# Regra de Bayes # Dados populacionais PB1 <- 0.15 # asma PB2 <- 0.01 # enfisema PB3 <- 0.009 # ca
# Dados clínicos PAdadoB1 <- 0.26 # dispneia dado asma PAdadoB2 <- 0.75 # dispneia dado enfisema PAdadoB3 <- 0.43 # dispneia dado ca
PB1dadoA <- (PAdadoB1 * PB1) / (PAdadoB1*PB1 + PAdadoB2*PB2 + PAdadoB3*PB3) PB2dadoA <- (PAdadoB2 * PB2) / (PAdadoB1*PB1 + PAdadoB2*PB2 + PAdadoB3*PB3) PB3dadoA <- (PAdadoB3 * PB3) / (PAdadoB1*PB1 + PAdadoB2*PB2 + PAdadoB3*PB3)
rbind(Asma_dado_dispneia=PB1dadoA,Asma_dado_enfisema=PB2dadoA,Asma_dado_ca=PB3dadoA)
[,1] Asma_dado_dispneia 0,774270 Asma_dado_enfisema 0,148898 Asma_dado_ca 0,076831
# LOOP
PB <- c(0.15,0.01,0.009) PAdadoB <- c(0.26,0.75,0.43) dados <- data.frame(PB,PAdadoB) n = dim(dados)[1] dados$PBdadoA <- 0 dados$den <- 0 dados for(i in 1:n) { dados$num <- dados$PAdadoB[i] * dados$PB[i] for(j in 1:n) { dados$den <- dados$PAdadoB[j]*dados$PB[j] + dados$den } dados$PBdadoA <- dados$num[i] / dados$den[i] }
dados
PB PAdadoB PBdadoA den num 1 0,150 0,26 0,025610 0,15111 0,00387 2 0,010 0,75 0,025610 0,15111 0,00387 3 0,009 0,43 0,025610 0,15111 0,00387
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
-- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O
participantes (2)
-
Henrique Dallazuanna
-
Mauricio Cardeal