- En caso de presentar valores diferentes a tipo numérico (las variables que apliquen), reemplace con NA.
datos <- read.csv('data_prac_2.csv',header = T,sep=',',dec = '.',
na.strings = c('&&','null','$$',' '), stringsAsFactors = T)
- Verifique que las variables tengan el fomato adecuado para trabajar.
## 'data.frame': 1338 obs. of 7 variables:
## $ edad : int 19 18 28 33 NA 31 46 37 37 60 ...
## $ sexo : Factor w/ 2 levels "femenino","masculino": 1 2 2 2 2 1 1 1 2 1 ...
## $ imc : num 27.9 33.8 33 22.7 28.9 ...
## $ hijos : int 0 1 3 0 0 0 1 3 2 0 ...
## $ fumador: Factor w/ 2 levels "no","s\xed": 2 1 1 1 1 1 1 1 1 1 ...
## $ region : Factor w/ 4 levels "noreste","noroeste",..: 4 3 3 2 2 3 3 2 1 2 ...
## $ clm : num 16885 1726 4449 21984 3867 ...
datos$fumador <- lapply(datos$fumador, function(x) ifelse(x=='no','no','si'))
datos$fumador <- factor(datos$fumador, levels = c('si','no'))
str(datos)## 'data.frame': 1338 obs. of 7 variables:
## $ edad : int 19 18 28 33 NA 31 46 37 37 60 ...
## $ sexo : Factor w/ 2 levels "femenino","masculino": 1 2 2 2 2 1 1 1 2 1 ...
## $ imc : num 27.9 33.8 33 22.7 28.9 ...
## $ hijos : int 0 1 3 0 0 0 1 3 2 0 ...
## $ fumador: Factor w/ 2 levels "si","no": 1 2 2 2 2 2 2 2 2 2 ...
## $ region : Factor w/ 4 levels "noreste","noroeste",..: 4 3 3 2 2 3 3 2 1 2 ...
## $ clm : num 16885 1726 4449 21984 3867 ...
- ¿Hay manera de detectar valores duplicados?, en caso negativo, ¿qué podría proponer como identificador, para evitar duplicados en el data set?
R: Sí, usaremos la siguiente linea para saber si hay datos negativos.
En caso de que si haya, haremos que omita los duplicados.
## No variable names specified - using all columns.
## edad sexo imc hijos fumador region clm dupe_count
## 1 19 masculino 30.59 0 no noroeste 1639.563 2
## 2 19 masculino 30.59 0 no noroeste 1639.563 2
- Reemplace los valores no disponibles con las técnicas usadas, y haga una tabla resumen sobre los resultados (summary) de las variables numéricas, ¿cuál técnica sugiere usar y por qué?
## edad sexo imc hijos fumador region clm
## 72 0 39 0 0 0 41
Haremos un data frame con todas las variables numéricas.
Realizar el reemplazo con la moda, mediana, media, media recortada e interpolación.
## Con la Moda
datos_mode <- data.frame(lapply(datos_n, function(x) ifelse(is.na(x),mfv(x,na_rm = T),x)))
## Con la Mediana
datos_median <- data.frame(lapply(datos_n,function(x) ifelse(is.na(x),median(x,na.rm=T),x)))
## Con la Media
datos_mean <- data.frame(lapply(datos_n,function(x) ifelse(is.na(x),mean(x,na.rm=T),x)))
## Con la Media Recortada
datos_mean_rec <- data.frame(lapply(datos_n,function(x) ifelse(is.na(x),mean(x,na.rm=T,trim=0.1),x)))
## Con Interpolacion
datos_interpol <- data.frame(lapply(datos_n, function(x) ifelse(is.na(x),na.approx(x,na.rm=T),x)))
## Tabla resumen:
summary(datos)## edad sexo imc hijos fumador
## Min. :18.00 femenino :662 Min. :15.96 Min. :0.000 si: 274
## 1st Qu.:27.00 masculino:675 1st Qu.:26.22 1st Qu.:0.000 no:1063
## Median :39.00 Median :30.30 Median :1.000
## Mean :39.24 Mean :30.62 Mean :1.096
## 3rd Qu.:51.00 3rd Qu.:34.59 3rd Qu.:2.000
## Max. :64.00 Max. :53.13 Max. :5.000
## NA's :72 NA's :39
## region clm
## noreste :324 Min. : 1122
## noroeste:324 1st Qu.: 4750
## sureste :364 Median : 9382
## suroeste:325 Mean :13287
## 3rd Qu.:16781
## Max. :63770
## NA's :41
## edad imc hijos clm
## Min. :18.00 Min. :15.96 Min. :0.000 Min. : 1122
## 1st Qu.:25.00 1st Qu.:26.40 1st Qu.:0.000 1st Qu.: 4762
## Median :38.00 Median :30.59 Median :1.000 Median : 9305
## Mean :38.13 Mean :30.66 Mean :1.096 Mean :13254
## 3rd Qu.:51.00 3rd Qu.:34.40 3rd Qu.:2.000 3rd Qu.:16587
## Max. :64.00 Max. :53.13 Max. :5.000 Max. :63770
## edad imc hijos clm
## Min. :18.00 Min. :15.96 Min. :0.000 Min. : 1122
## 1st Qu.:27.00 1st Qu.:26.40 1st Qu.:0.000 1st Qu.: 4878
## Median :39.00 Median :30.30 Median :1.000 Median : 9382
## Mean :39.23 Mean :30.61 Mean :1.096 Mean :13167
## 3rd Qu.:51.00 3rd Qu.:34.40 3rd Qu.:2.000 3rd Qu.:16115
## Max. :64.00 Max. :53.13 Max. :5.000 Max. :63770
## edad imc hijos clm
## Min. :18.00 Min. :15.96 Min. :0.000 Min. : 1122
## 1st Qu.:27.00 1st Qu.:26.40 1st Qu.:0.000 1st Qu.: 4878
## Median :39.24 Median :30.59 Median :1.000 Median : 9705
## Mean :39.24 Mean :30.62 Mean :1.096 Mean :13287
## 3rd Qu.:51.00 3rd Qu.:34.40 3rd Qu.:2.000 3rd Qu.:16115
## Max. :64.00 Max. :53.13 Max. :5.000 Max. :63770
## edad imc hijos clm
## Min. :18.00 Min. :15.96 Min. :0.000 Min. : 1122
## 1st Qu.:27.00 1st Qu.:26.40 1st Qu.:0.000 1st Qu.: 4878
## Median :39.05 Median :30.45 Median :1.000 Median : 9705
## Mean :39.23 Mean :30.61 Mean :1.096 Mean :13219
## 3rd Qu.:51.00 3rd Qu.:34.40 3rd Qu.:2.000 3rd Qu.:16115
## Max. :64.00 Max. :53.13 Max. :5.000 Max. :63770
## edad imc hijos clm
## Min. :18.00 Min. :15.96 Min. :0.000 Min. : 1122
## 1st Qu.:27.00 1st Qu.:26.22 1st Qu.:0.000 1st Qu.: 4796
## Median :39.00 Median :30.40 Median :1.000 Median : 9411
## Mean :39.29 Mean :30.62 Mean :1.096 Mean :13274
## 3rd Qu.:51.00 3rd Qu.:34.58 3rd Qu.:2.000 3rd Qu.:16819
## Max. :64.00 Max. :53.13 Max. :5.000 Max. :63770
En lo personal recomiendo la interpolación por ser un método un poco más riguroso a la hora de realizar el reemplazo, aunque una media recortada no es una mala opción por los tipos de datos que tenemos.
- Usando ggplot, realice un histograma para analizar las variables numéricas, ¿este sería el tipo de gráfico más significativo para su análisis univariante?.
#Actualizo mi base
datos_f <- data.frame(sexo= datos$sexo, fumador=datos$fumador,region=datos$region,datos_interpol)
## Edad
ggplot(datos_f, aes(edad, colour=sexo)) + geom_histogram(fill='azure3') +
theme_classic()+labs(title = 'Edades por sexo',y='Total', x='Edad') +
scale_color_manual(values = c('magenta2','blue'))## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## IMC
ggplot(datos_f, aes(imc, fill=sexo, colour= fumador)) + geom_histogram() +
theme_classic() + labs(title = 'IMC por sexo/fumador', y='Total',x='IMC') +
scale_fill_manual(values = c('magenta2','blue')) +
scale_color_manual(values = c('black','gold'))## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## No de Hijos
ggplot(datos_f, aes(hijos, colour=fumador)) + geom_histogram(fill = 'azure2') +
theme_classic() + labs(title = 'No. de Hijos de fumador o no fumador',
y='Total',x='No. de Hijos') +
scale_color_manual(values = c('chocolate4', 'chartreuse4'))## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Reclamacionbes
ggplot(datos_f, aes(clm, fill=fumador)) + geom_histogram() + theme_classic() +
labs(title = 'Monto de las Reclamaciones por fumador o no fumador', y='Total',
x='Reclamaciones') + scale_fill_manual(values = c('magenta2','blue'))## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Si puede ser el más significativo para iniciar un análisis, ya que con este grafico podemos tener un primer acercamiento para ver como se comportan. Además, poniendoles filtros para seccionar podemos obtener mucho más información.
- Calcule la media de monto de reclamación por sexo.
rec_sex <- datos_f |>
group_by(sexo) |>
summarise(rec_promedio = mean(clm)) |>
arrange(desc(rec_promedio))
rec_sex## # A tibble: 2 × 2
## sexo rec_promedio
## <fct> <dbl>
## 1 masculino 14017.
## 2 femenino 12517.
- Calcule la media de monto de reclamación por fumador y sexo.
rec_fum_sex <- datos_f |>
group_by(fumador,sexo) |>
summarise(rec_promedio = mean(clm)) |>
arrange(desc(rec_promedio))## `summarise()` has grouped output by 'fumador'. You can override using the
## `.groups` argument.
## # A tibble: 4 × 3
## # Groups: fumador [2]
## fumador sexo rec_promedio
## <fct> <fct> <dbl>
## 1 si masculino 32874.
## 2 si femenino 29556.
## 3 no femenino 8935.
## 4 no masculino 8206.
ggplot(rec_fum_sex, aes(x=sexo, y= rec_promedio, fill = fumador )) +
geom_bar(stat = 'identity', position = 'dodge') + theme_classic() +
labs( title ='Reclamacion promedio por sexo',
subtitle = 'Filtrado por si es o no fumador', y='Recl. Prom')+
scale_fill_manual(values = c('chocolate4','chartreuse'))
- Identifique la región con mayor monto promedio de reclamación.
rec_reg <- datos_f |>
group_by(region) |>
summarise(rec_promedio = mean(clm)) |>
arrange(desc(rec_promedio))
rec_reg## # A tibble: 4 × 2
## region rec_promedio
## <fct> <dbl>
## 1 sureste 14588.
## 2 noreste 13577.
## 3 noroeste 12418.
## 4 suroeste 12354.
La región con mayor monto promedio de reclamación es la sureste con \(14,588.32\)
- Cree una columna con la etiqueta ”obesidad”, si el imc es mayor a 30.
## sexo fumador region edad imc hijos clm Clasificación
## 1 femenino si suroeste 19 27.900 0 16884.924
## 2 masculino no sureste 18 33.770 1 1725.552 Obesidad
## 3 masculino no sureste 28 33.000 3 4449.462 Obesidad
## 4 masculino no noroeste 33 22.705 0 21984.471
## 5 masculino no noroeste 32 28.880 0 3866.855
- Identifique el top 10 de personas obesas indicando: edad, sexo, hijos, monto de reclamación y región
top_chubby <- datos_f |>
select(imc,edad,sexo,hijos,clm,region) |>
arrange(desc(imc))
head(top_chubby,10)## imc edad sexo hijos clm region
## 1 53.13 18 masculino 0 1163.463 sureste
## 2 52.58 22 masculino 1 44501.398 sureste
## 3 50.38 23 masculino 1 2438.055 sureste
## 4 49.06 58 masculino 0 11381.325 sureste
## 5 47.74 52 masculino 1 9748.911 sureste
## 6 47.60 37 femenino 2 46113.511 suroeste
## 7 47.52 47 masculino 1 8083.920 sureste
## 8 47.41 54 femenino 0 63770.428 sureste
## 9 46.75 52 femenino 5 12592.534 sureste
## 10 46.70 54 femenino 2 11538.421 suroeste
## Usuemos la consulta anterior para graficar.
top <- head(top_chubby,10)
ggplot(top, aes(edad,imc, colour=sexo)) + geom_point() + theme_classic() +
labs(title = 'Top 10 personas ', subtitle = 'Por IMC filtrado por sexo',
x='Edad', y='IMC') + scale_color_manual(values = c('magenta2','blue'))