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]]