Oscar Benitez
2015-Jul-14 19:22 UTC
[R-es] Manejo de valores perdidos usando predict con CHAID
Hola Estoy tratando de aplicar probabilidades mediante predict a una base de prueba y no consigo manejar los valores perdidos. No tengo problemas en la generación de las probabilidades, el comando es: #genera las probabilidades en prueba prob.P.T1 <- predict(chaid2.T1, pruebaT1, type="prob") El data frame 'pruebaT1' tiene 33527 registros La matriz 'prob.P.T1' tiene 66724 elementos, o sea 33362 registros. Esto me dice que hay algunos casos para los cuales no fué capaz de establecer la probabilidad. Esperaba esa situación. El problema es cuando trato de unir las probabilidades desde la matriz al data frame. El comando: pruebaT1$prob.T1<-prob.P.T1[,2] Me da el siguiente error Error in `$<-.data.frame`(`*tmp*`, "prob.T1", value = c(0.42910447761194, : replacement has 33362 rows, data has 33527 El comando prueba.T1<-merge(pruebaT1, prob.P.T1[,2],by="row.names", all.x = TRUE) No da error, pero no estoy seguro que la unión por el número de fila sea correcto. Estuve inspeccionando la matriz resultante del predict y no veo saltos en la numeración de las filas.... Para poner un ejemplo, Digamos que en mi dataframe 'pruebaT1´tengo lo siguiente RowN Var1 Var2 1 a 1 2 b 2 3 a 3 4 b 4 5 a 1 6 b 7 a 3 8 b 4 9 a 1 10 b 2 Cuando aplico la función predict a estos datos obtengo solamente 9 filas, lo cual es correcto. Pero cuando las veo con el comando: view(prob.T1) las filas están numeradas de 1 a 9... Eso me lleva a preguntarme si el comando merge es el mejor para estos casos.... Para que quede claro, lo que quiero que ocurra es lo siguiente: RowN Var1 Var2 prob.T1 1 a 1 0.03 2 b 2 0.05 3 a 3 0.06 4 b 4 0.03 5 a 1 0.05 6 b NA 7 a 3 0.03 8 b 4 0.03 9 a 1 0.05 10 b 2 0.06 Y no encuentro la manera de hacerlo. Cualquier sugerencia es bienvenida. Gracias de antemano, Oscar -- Oscar Benitez [[alternative HTML version deleted]]
Oscar Benitez
2015-Jul-14 20:00 UTC
[R-es] Manejo de valores perdidos usando predict con CHAID
Resuelto! Encontré el truco para que funcione,Tenía que cambiar el comando: prob.P.T1 <- predict(chaid2.T1, pruebaT1, type="prob") por prob.P.T1 <- predict(chaid2.T1, newdata=pruebaT1, type="prob") y entonces funciona: pruebaT1$prob<-prob.P.T1[,2] Saludos El 14 de julio de 2015, 16:22, Oscar Benitez <oscar.benitez1962 en gmail.com> escribió:> Hola > Estoy tratando de aplicar probabilidades mediante predict a una base de > prueba y no consigo manejar los valores perdidos. > > No tengo problemas en la generación de las probabilidades, el comando es: > > #genera las probabilidades en prueba > prob.P.T1 <- predict(chaid2.T1, pruebaT1, type="prob") > > El data frame 'pruebaT1' tiene 33527 registros > La matriz 'prob.P.T1' tiene 66724 elementos, o sea 33362 registros. Esto > me dice que hay algunos casos para los cuales no fué capaz de establecer la > probabilidad. Esperaba esa situación. > > El problema es cuando trato de unir las probabilidades desde la matriz al > data frame. El comando: > > pruebaT1$prob.T1<-prob.P.T1[,2] > > Me da el siguiente error > > Error in `$<-.data.frame`(`*tmp*`, "prob.T1", value = c(0.42910447761194, > : > replacement has 33362 rows, data has 33527 > > > El comando > > prueba.T1<-merge(pruebaT1, prob.P.T1[,2],by="row.names", > all.x = TRUE) > > No da error, pero no estoy seguro que la unión por el número de fila sea > correcto. Estuve inspeccionando la matriz resultante del predict y no veo > saltos en la numeración de las filas.... > > Para poner un ejemplo, > > Digamos que en mi dataframe 'pruebaT1´tengo lo siguiente > > RowN Var1 Var2 1 a 1 2 b 2 3 a 3 4 b 4 5 a 1 6 b > 7 a 3 8 b 4 9 a 1 10 b 2 > > Cuando aplico la función predict a estos datos obtengo solamente 9 filas, > lo cual es correcto. Pero cuando las veo con el comando: > > view(prob.T1) > > las filas están numeradas de 1 a 9... > > Eso me lleva a preguntarme si el comando merge es el mejor para estos > casos.... > > Para que quede claro, lo que quiero que ocurra es lo siguiente: > > RowN Var1 Var2 prob.T1 1 a 1 0.03 2 b 2 0.05 3 a 3 0.06 4 b 4 0.03 > 5 a 1 0.05 6 b > NA 7 a 3 0.03 8 b 4 0.03 9 a 1 0.05 10 b 2 0.06 > > Y no encuentro la manera de hacerlo. > > Cualquier sugerencia es bienvenida. > Gracias de antemano, > Oscar > > -- > Oscar Benitez >-- Oscar Benitez [[alternative HTML version deleted]]