#Usaremos una tabla en la que vienen la altura del padre, de la madre y de un hijo, veremos su
#relación.
redondea5<-function(x,base=5){
  as.integer(base*round(x/base))
}

a.padre<- redondea5(rnorm(1000, 168, 25),10)
a.madre<- redondea5(rnorm(1000, 150, 10),10)
s.hijo<-factor(rbinom(1000,1,0.5), levels=c(0,1),labels=c("M","F"))
# creo data.frame
t.alturas<-data.frame(a.padre,a.madre,s.hijo)
# Se calcula la altura del hijo con esta formula
t.alturas$a.hijo<-ifelse(t.alturas$s.hijo == "M",
                         (t.alturas$a.padre +t.alturas$a.madre)*rnorm(1,1,0.07)/2,
                         (t.alturas$a.padre +t.alturas$a.madre)*rnorm(1,1,0.05)/2)
t.alturas$a.hijo<-redondea5(t.alturas$a.hijo,10)
str(t.alturas)
## 'data.frame':    1000 obs. of  4 variables:
##  $ a.padre: int  150 190 140 230 190 150 200 150 200 160 ...
##  $ a.madre: int  140 160 150 140 170 160 140 140 140 150 ...
##  $ s.hijo : Factor w/ 2 levels "M","F": 1 2 2 1 1 2 2 1 2 1 ...
##  $ a.hijo : int  140 180 150 180 180 160 170 140 170 150 ...
knitr::kable(head(t.alturas,10), "markdown")
a.padre a.madre s.hijo a.hijo
150 140 M 140
190 160 F 180
140 150 F 150
230 140 M 180
190 170 M 180
150 160 F 160
200 140 F 170
150 140 M 140
200 140 F 170
160 150 M 150
# Crear un modelo de clasificacion  con rpart
library(rpart)
#install.packages("rpart.plot")
library(rpart.plot)
# creamos un modelo de clasificación en el que intervengan todas las variables
# el coeficiente cp nos extiende o acorta el arbol, simplifica resultados
model.alturas1 <- rpart(a.hijo ~ .,
                        data = t.alturas, method = "class", cp = .02)
# pintamos el modelo    
rpart.plot(model.alturas1, fallen.leaves = FALSE,
           main = "Arbol de decision de alturas hijo\n(en funcion altura padres)\n",
           shadow.col = "gray")

# hacemos un pronostico
h2<-data.frame(a.padre= c(190,150),a.madre= c(180,140),s.hijo= c("M","M"))
predict(model.alturas1, h2,type = "class")
##   1   2 
## 180 150 
## Levels: 120 130 140 150 160 170 180 190 200