24/3/2021

Lectura de datos

Insample <- read.csv("PropertyFundInsample.csv", header=T, 
                     na.strings=c("."), stringsAsFactors=FALSE)
Insample2010 <- subset(Insample, Year==2010)

Sobre estos comandos:

  • \(\texttt{read.csv}\) lee .csv y crea un \(\texttt{data.frame}\), con observaciones que corresponden a filas y variables a columnas.

  • Nombramos \(\texttt{Insample}\) a los datos leídos.

  • \(\texttt{subset()}\) se utiliza para seleccionar variables y observaciones. En esta ilustración, seleccionamos observaciones del año \(2010\).

Distribución para la frecuencia de reclamaciones

En \(2010\) había \(1110\) asegurados en el fondo de propiedad. Empleando \(\texttt{Table}\) y \(\texttt{summary}\), muestra la distribución de las \(1377\) reclamaciones.

library(pander)
Table<-as.data.frame(table(Insample2010$Freq))
names(Table)<-c("# reclamaciones", "Frecuencia")
pander(t(Table))
pander(summary(Insample2010$Freq))

La media de la distribución para esta muestra fue \(1.24 (= 1377/1110)\).

Sobre estos comandos:

  • La función \(\texttt{pander}\) se usa aquí para crear tablas más agradables que la salida normal de \(\texttt{R}\).
citation("pander")
  • \(\texttt{names()}\) se utiliza para obtener o asignar nombres a objetos.

  • La función \(\texttt{t()}\) devuelve la transpuesta de un data frame o una matriz.

Distribución para la severidad promedio

Resume la distribución de la muestra para la severidad promedio de las \(403\) personas aseguradas.

InsamplePos2010 <- subset(Insample2010, yAvg>0)
pander(summary(InsamplePos2010$yAvg))
length(InsamplePos2010$yAvg)

Proporciona más información sobre la distribución mostrando las reclamaciones grandes usando \(\texttt{hist}\). Como incluso al eliminar reclamaciones grandes la distribución está sesgada hacia la derecha, una técnica generalmente aceptada es trabajar con unidades logarítmicas. Especialmente por fines gráficos, para facilitar la interpretación.

par(mfrow=c(1, 2))
hist(InsamplePos2010$yAvg, main="", xlab="Reclamación media")
hist(log(InsamplePos2010$yAvg), main="", xlab="LogReclamación media")

Sobre estos comandos:

  • La función \(\texttt{par(mfrow)}\) es útil para crear un diagrama de múltiples paneles simple. \(\texttt{mfrow}\) es un vector de longitud \(2\), donde el primer argumento especifica el número de filas y el segundo el número de columnas para el panel gráfico.

  • \(\texttt{hist()}\) calcula un histograma de los valores de datos dados.

Variables de calificación

Para aumentar las muestra, examina los resultados de varios años y muestra que las reclamaciones promedio varían con el tiempo.

library(doBy)
T1A <- summaryBy(Freq ~ Year, data = Insample,   
                 FUN = function(x){c(m = mean(x), num=length(x))})
T1B <- summaryBy(yAvg    ~ Year, data = Insample,   
                 FUN = function(x){c(m = mean(x), num=length(x))})
T1C <- summaryBy(BCcov    ~ Year, data = Insample,   
                 FUN = function(x){c(m = mean(x), num=length(x))})
Table1In <- cbind(T1A[1],T1A[2],T1B[2],T1C[2],T1A[3])
names(Table1In) <- c("Año", "Frec Promedio","Sev Promedio", 
                     "Cobertura Promedio","# Asegurados")
pander(Table1In)

Sobre estos comandos:

  • La función \(\texttt{summaryBy()}\) proporciona estadísticas resumidas de una variable en diferentes grupos. Necesita la librería \(\texttt{doBy}\):
citation("doBy")
  • \(\texttt{cbind()}\) combina vectores, matrices o data frames por columnas. Las filas de los dos conjuntos de datos debe ser igual.

  • La función \(\texttt{c()}\) combina sus argumentos para formar un vector.

Distribuciones de frecuencia y reclamaciones de datos completos

Resumen para los \(5\) años de la frecuencia y severidad:

t1<- summaryBy(Insample$Freq ~ 1, data = Insample, 
                 FUN = function(x){c(ma=min(x), m1=median(x),
                                     m=mean(x),mb=max(x))})
names(t1) <- c("Min", "Mediana","Media", "Max")
t2 <- summaryBy(Insample$yAvg ~ 1, data = Insample, 
                 FUN = function(x){c(ma=min(x), m1=median(x), 
                                     m=mean(x),mb=max(x))})
names(t2) <- c("Min", "Mediana","Media", "Max")
t3 <- summaryBy(Deduct ~ 1, data = Insample, 
                 FUN = function(x){c(ma=min(x), m1=median(x), 
                                     m=mean(x),mb=max(x))})
names(t3) <- c("Min", "Mediana","Media", "Max")

t4 <- summaryBy(BCcov/1000 ~ 1, data = Insample, 
                 FUN = function(x){c(ma=min(x), m1=median(x), 
                                     m=mean(x),mb=max(x))})
names(t4) <- c("Min", "Mediana","Media", "Max")
Table2 <- rbind(t1,t2,t3,t4)
Table2a <- round(Table2,3)
Rowlable <- rbind("Frequencia","Severidad","Deducible",
                  "Cobertura (miles)")
Table2aa <- cbind(Rowlable,as.matrix(Table2a))
pander(Table2aa)

Sobre estos comandos:

  • \(\texttt{rbind()}\) combina vectores, matrices o data frames por filas. La columna de los dos conjuntos de datos debe ser la misma.

  • La función \(\texttt{round()}\) redondea los valores en su primer argumento al número especificado de posiciones decimales.

Descripción de la variable de calificación

Describe las variables de calificación consideradas en este capítulo. Para manejar la asimetría, aplica transformaciones logarítmicas de cobertura y deducibles.

des <- read.table(header=TRUE, text='Variable Description "BCcov"
 "Total building and content coverage in dollars" "Deduct"
 "Deductible in dollars" "Entity Type" "Categorical variable that is 
 one of six types:  (Village, City, County, Misc, School, or Town)" 
 "AlarmCredit" "Categorical variable that is one of four types:
 (0%, 5%, 10%, or 15%), for automatic smoke alarms in main rooms"
 "NoClaimCredit" "Binary variable to indicate no claims in the past 
 two years" "Fire5" "Binary variable to indicate the fire class is 
 below 5. (The range of fire class is 0~10)" ')
pander(des)

Frecuencia y siniestros por variables de calificación

  • Resumen de reclamaciones por tipo de entidad, clase de incendio y crédito sin reclamación:
ByVarSumm<-function(datasub){
  tempA <- summaryBy(Freq    ~ 1 , data = datasub,   
                     FUN = function(x){c(m = mean(x), num=length(x))})
  datasub1<-  subset(datasub, yAvg>0)
  tempB <- summaryBy(yAvg   ~ 1, data = datasub1,
                     FUN = function(x){c(m = mean(x))})
  tempC <- merge(tempA,tempB,all.x=T)[c(2,1,3)]
  tempC1 <- as.matrix(tempC)
  return(tempC1)
  }

datasub <-  subset(Insample, TypeVillage == 1);   
t1 <- ByVarSumm(datasub)
datasub <-  subset(Insample, TypeCity == 1);      
t2 <- ByVarSumm(datasub)
datasub <-  subset(Insample, TypeCounty == 1);   
t3 <- ByVarSumm(datasub)
datasub <-  subset(Insample, TypeMisc == 1);      
t4 <- ByVarSumm(datasub)
datasub <-  subset(Insample, TypeSchool == 1);    
t5 <- ByVarSumm(datasub)
datasub <-  subset(Insample, TypeTown == 1);      
t6 <- ByVarSumm(datasub)
datasub <-  subset(Insample, Fire5 == 0);                      
t7 <- ByVarSumm(datasub)
datasub <-  subset(Insample, Fire5 == 1);                      
t8 <- ByVarSumm(datasub)
datasub <-  subset(Insample, Insample$NoClaimCredit == 0);
t9 <- ByVarSumm(datasub)
datasub <-  subset(Insample, Insample$NoClaimCredit == 1);

t10 <- ByVarSumm(datasub)
t11 <- ByVarSumm(Insample)
Tablea <- rbind(t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11)
Tableaa <- round(Tablea,3)
Rowlable <- rbind("Village","City","County","Misc","School",
                  "Town","Fire5--No","Fire5--Yes","NoClaimCredit--No",
                  "NoClaimCredit--Yes","Total")
Table4 <- cbind(Rowlable,as.matrix(Tableaa))

pander(Table4)

  • Resumen de reclamaciones por tipo de entidad y crédito de alarma:
ByVarSumm<-function(datasub){
  tempA <- summaryBy(Freq    ~ AC00 , data = datasub,   
                     FUN = function(x){c(m = mean(x), num=length(x))})
  datasub1 <-  subset(datasub, yAvg>0)
  if(nrow(datasub1)==0) { n<-nrow(datasub)
    return(c(0,0,n))
  } else 
  {
    tempB <- summaryBy(yAvg   ~ AC00, data = datasub1,
                       FUN = function(x) { c(m = mean(x)) } )
    tempC <- merge(tempA,tempB,all.x=T)[c(2,4,3)]
    tempC1 <- as.matrix(tempC)
    return(tempC1)
  }
}

AlarmC <- 1*(Insample$AC00==1)+2*(Insample$AC05==1)+
  3*(Insample$AC10==1)+ 4*(Insample$AC15==1)
ByVarCredit<-function(ACnum){
datasub <-  subset(Insample, TypeVillage == 1 & AlarmC == ACnum); 
  t1 <- ByVarSumm(datasub)
datasub <-  subset(Insample, TypeCity == 1 & AlarmC == ACnum);      
  t2 <- ByVarSumm(datasub)
datasub <-  subset(Insample, TypeCounty == 1 & AlarmC == ACnum);   
  t3 <- ByVarSumm(datasub)
datasub <-  subset(Insample, TypeMisc == 1 & AlarmC == ACnum);
  t4 <- ByVarSumm(datasub)
datasub <-  subset(Insample, TypeSchool == 1 & AlarmC == ACnum);    
  t5 <- ByVarSumm(datasub)

datasub <-  subset(Insample, TypeTown == 1 & AlarmC ==ACnum);      
  t6 <- ByVarSumm(datasub)
datasub <-  subset(Insample, AlarmC == ACnum);  
  t7 <- ByVarSumm(datasub)
Tablea <- rbind(t1,t2,t3,t4,t5,t6,t7)
Tableaa <- round(Tablea,3)
Rowlable <- rbind("Village","City","County","Misc","School",
                  "Town","Total")
Table4 <- cbind(Rowlable,as.matrix(Tableaa))
}
Table4a <- ByVarCredit(1)    #Tipo Entidad y Cédito de Alarm==00
Table4b <- ByVarCredit(2)    #Tipo Entidad y Cédito de Alarm==05 
Table4c <- ByVarCredit(3)    #Tipo Entidad y Cédito de Alarm==10
Table4d <- ByVarCredit(4)    #Tipo Entidad y Cédito de Alarm==15
pander(Table4a) #Tipo Entidad y Cédito de Alarm==00
pander(Table4b) #Tipo Entidad y Cédito de Alarm==05 
pander(Table4c) #Tipo Entidad y Cédito de Alarm==10
pander(Table4d) #Tipo Entidad y Cédito de Alarm==15