Estoy investigando qué métodos se utilizan generalmente para dicotomizar una variable ordinal Y de manera que se maximicen las diferencias entre grupos en los valores de X y se minimicen las diferencias dentro de los grupos en los valores de X. Básicamente, quiero algún tipo de clasificación óptima (binaria) de mi variable Y (ordinal, que va, digamos, de 0 a 8) según los valores de la variable X (una variable continua).
He creado unos datos en los que yo diría que la línea óptima está en el 3: la agrupación principal respecto a X está entre los que tienen una puntuación Y de 0 a 3 y los que tienen una puntuación de 4 a 6. Obviamente, los datos reales contendrían mucho más ruido, pero los datos siguientes deberían ser útiles para aclarar con qué estoy trabajando y, en particular, la relación no lineal que encuentro entre mi X y mi Y. Básicamente, se trata de encontrar el punto de inflexión en la relación bivariada, o donde la relación alcanza una meseta (véase el gráfico):
Código R
D<-data.frame(rbind(cbind(rep(0,600),rnorm(600,mean=2000,sd=2)),
cbind(rep(1,600),rnorm(600,mean=1000,sd=2)),
cbind(rep(2,300),rnorm(300,mean=500,sd=2)),
cbind(rep(3,200),rnorm(200,mean=200,sd=2)),
cbind(rep(4,99),rnorm(99,mean=50,sd=2)),
cbind(rep(5,98),rnorm(98,mean=45,sd=2)),
cbind(rep(6,90),rnorm(90,mean=43,sd=2)),
cbind(rep(7,90),rnorm(90,mean=44,sd=2)),
cbind(rep(8,85),rnorm(85,mean=41,sd=2))
))
#And a couple of other datasets but with slightly different distribution (but same kink)
n<-600
D2<-data.frame(rbind(cbind(rep(0,600),rnorm(600,mean=2000,sd=2)),
cbind(rep(1,n),rnorm(n,mean=1000,sd=2)),cbind(rep(2,n),rnorm(n,mean=500,sd=2)),
cbind(rep(3,n),rnorm(n,mean=200,sd=2)),cbind(rep(4,n),rnorm(n,mean=50,sd=2)),
cbind(rep(5,n),rnorm(n,mean=45,sd=2)),cbind(rep(6,n),rnorm(n,mean=43,sd=2)),
cbind(rep(7,n),rnorm(n,mean=44,sd=2)),cbind(rep(8,n),rnorm(n,mean=41,sd=2))))
D3<-data.frame(rbind(cbind(rep(0,600),rnorm(600,mean=2000,sd=2)),
cbind(rep(1,600),rnorm(600,mean=1000,sd=2)),cbind(rep(2,300),rnorm(300,mean=500,sd=2)),
cbind(rep(3,200),rnorm(200,mean=200,sd=2)), cbind(rep(4,200),rnorm(200,mean=50,sd=2)),
cbind(rep(5,200),rnorm(200,mean=45,sd=2)),cbind(rep(6,200),rnorm(200,mean=43,sd=2)),
cbind(rep(7,200),rnorm(200,mean=44,sd=2)),cbind(rep(8,300),rnorm(300,mean=41,sd=2))))
colnames(D)<-colnames(D2)<-colnames(D3)<-c("Y","X")
plot(D)
No estoy interesado en aproximaciones gráficas, trazando líneas secantes o splines, sino en técnicas robustas que realicen pruebas estadísticas formales para encontrar el mejor binning binario, y te agradecería mucho que me dieras tu opinión al respecto y, si tienes una solución, proporcionaras un código para aplicarlo a los datos anteriores.
Gracias de antemano