Tarea 4

Para este ejercisio se utilzó la base de datos seguros.csv. El objetivo consiste en construir una red bayesiana para la cual se deben considerar algunas reglas propuestas por un experto en seguros y reglas propuestas por el usuario en caso de ser necesario.

El experto en seguros ha establecido para la construcción e interpretación de la red, las siguientes reglas:

La base de datos seguros.csv esta compuesta de la siguiente forma

seguros <- read.csv("seguros.csv")
attach(seguros)
head(seguros)
##          Age   SocioEcon RiskAversion VehicleYear Accident MakeModel
## 14494  Adult      Middle       Normal     Current   Severe   Economy
## 18950 Senior       Prole       Normal       Older     None SportsCar
## 13705  Adult UpperMiddle     Cautious     Current     None    Luxury
## 17328 Senior       Prole     Cautious       Older     None   Economy
## 19036  Adult UpperMiddle       Normal     Current     None SportsCar
## 16971 Senior       Prole       Normal       Older     None   Economy
##       DrivQuality Antilock  CarValue  MedCost Airbag DrivHist
## 14494        Poor    False   TenThou Thousand   True     Many
## 18950      Normal    False   TenThou Thousand  False     Zero
## 13705   Excellent     True FiftyThou Thousand   True     Zero
## 17328      Normal    False  FiveThou Thousand  False     Zero
## 19036      Normal     True   TenThou Thousand   True     Zero
## 16971      Normal    False  FiveThou Thousand  False      One

Para la construcción de la red de tal manera que considere las restricciones impuestas por el experto en seguros, es necesario crear una blacklist que prohiba la existencia de arcos entre ciertos nodos y usar la función hill climbing para encontrar una posible estructura de la red a partir de los datos.

library("bnlearn")
black <- data.frame(from = c("Airbag", "Airbag", "Airbag", "Accident", "Accident", 
    "Age", "SocioEcon", "RiskAversion", "Accident", "RiskAversion", "DrivQuality"), 
    to = c("DrivQuality", "DrivHist", "Accident", "MakeModel", "VehicleYear", 
        "MedCost", "MedCost", "SocioEcon", "SocioEcon", "Age", "Age"))
net.seguros <- hc(seguros, score = "aic", blacklist = black)
net.seguros
## 
##   Bayesian network learned via Score-based methods
## 
##   model:
##    [Age][SocioEcon|Age][VehicleYear|SocioEcon][MakeModel|SocioEcon]
##    [Antilock|VehicleYear:MakeModel][CarValue|VehicleYear:MakeModel]
##    [Airbag|VehicleYear:MakeModel][Accident|Age:Antilock]
##    [DrivQuality|Age:Accident][MedCost|Accident:MakeModel]
##    [RiskAversion|Age:SocioEcon:DrivQuality]
##    [DrivHist|RiskAversion:DrivQuality]
##   nodes:                                 12 
##   arcs:                                  20 
##     undirected arcs:                     0 
##     directed arcs:                       20 
##   average markov blanket size:           4.00 
##   average neighbourhood size:            3.33 
##   average branching factor:              1.67 
## 
##   learning algorithm:                    Hill-Climbing 
##   score:                                 AIC (disc.) 
##   penalization coefficient:              1 
##   tests used in the learning procedure:  314 
##   optimized:                             TRUE

La estructura que se obtuvo es la siguiente:

graphviz.plot(net.seguros)

plot of chunk unnamed-chunk-3

La misma estructura representada de otra forma esta dada por:

plot(net.seguros)

plot of chunk unnamed-chunk-4

Una vez incorporada la información del experto en la estimación de la red, vale la pena incorporar una restricción adiconal, debido a que es razonable pesnar que el historial de manejo DrivHist de una persona debe depender de la edad de la persona, por esta razón al incluir esta nueva restricción la red bayesiana que se obtiene es la siguiente:

white <- data.frame(from = c("Age"), to = c("DrivHist"))
net.seguros <- hc(seguros, score = "aic", blacklist = black, whitelist = white)
net.seguros
## 
##   Bayesian network learned via Score-based methods
## 
##   model:
##    [Age][SocioEcon|Age][RiskAversion|Age:SocioEcon][VehicleYear|SocioEcon]
##    [MakeModel|SocioEcon][Antilock|VehicleYear:MakeModel]
##    [CarValue|VehicleYear:MakeModel][Airbag|VehicleYear:MakeModel]
##    [DrivHist|Age:RiskAversion][DrivQuality|Age:RiskAversion:DrivHist]
##    [Accident|DrivQuality:Antilock][MedCost|Accident:MakeModel]
##   nodes:                                 12 
##   arcs:                                  20 
##     undirected arcs:                     0 
##     directed arcs:                       20 
##   average markov blanket size:           3.83 
##   average neighbourhood size:            3.33 
##   average branching factor:              1.67 
## 
##   learning algorithm:                    Hill-Climbing 
##   score:                                 AIC (disc.) 
##   penalization coefficient:              1 
##   tests used in the learning procedure:  334 
##   optimized:                             TRUE

cuya gráfica es

graphviz.plot(net.seguros)

plot of chunk unnamed-chunk-6

Ya que se ha definido una posible estructura de la red que represente los datos, es factible pensar en la construcción de modelos locales que permitan tener mejores estimaciones de las probabilidades condicionales. Para ello, se propone usar un modelo logístico multinomial para describir la relación VehicleYear-> CarValue <- MakeModel pues la variable CarValue tiene más de dos niveles.