Tarea 2

Yuen Law

2023-11-09

Datos de Estudio de Comida Rápida

datos <- read.csv("C:/Users/ywlw9/Documents/TAD/Clase de R/Laboratorio medidas de posicion/Archivo estudio Comida Rapida.csv", sep=";")
head(datos)
  Persona Consume Producto Frecuencia Cantidad     Hora Edad Estatura Cancer
1       1      SI   CUARTO          8        1     cena   33      174     SI
2       2      SI   CUARTO          4        1 almuerzo   25      189     NO
3       3      SI  NUGGETS          1        1     cena   31      190     NO
4       4      SI    PAPAS       0,16        1     café   20      183     NO
5       5      SI    QUESO          1        1     cena   20      170     NO
6       6      SI    QUESO          2        2 almuerzo   21      182     NO
  Sexo Peso.antes Peso.despues
1    F         75           83
2    F         80           88
3    F         52           60
4    F         66           74
5    M         66           74
6    M         66           74

Esta base de datos cuenta con 12 variables relativos al consumo de comida rápida, con mediciones antes y despues de algún periodo de tiempo indefinido. Las variables de la base de datos son:

  • Persona: un registro de cada persona en la muestra
  • Consume: si consume comida rápida o no
  • Producto: que producto de comida rápida consume
  • Frecuencia: la frecuencia con la que se consume comida rapida
  • Cantidad: la cantidad de comida rápida consumida
  • Hora: el tiempo de comida en la cual se está consumiedo comida rápida
  • Edad: la edad de la persona
  • Estatura: estatura en centímetros de cada individuo
  • Cancer: Si la persona presenta o no cancer
  • Sexo: Sexo de la persona, dividido en M o F
  • Peso antes: Primera medición de peso.
  • Peso despues: Segunda medición de peso después de cierto periodo.

Datos del Laboratorio

Promedio de Estatura entre toda la muestra

mean(x=datos$Estatura,na.rm = T)
[1] 173.51

En este procedimiento se calcula el promedio o la media aritmética de la estatura entre toda la muestra, en este caso también removemos cualquier dato faltante o “NA” antes de calcular la media.

Del anterior resultado podemos decir que la estatura media o promedio de los estudiantes es 173.5 centímetros.

Estatura promedio por sexo

datos %>% 
  group_by(Sexo) %>% 
  summarise(cuenta=n(),
            promedio_Estatura=mean(Estatura)) %>% 
  mutate(porporcion=cuenta/sum(cuenta))
# A tibble: 2 × 4
  Sexo  cuenta promedio_Estatura porporcion
  <chr>  <int>             <dbl>      <dbl>
1 F         42              174.       0.42
2 M         58              173.       0.58

En este código, calculamos la cantidad de personas por sexo, y se calcula también la estatura promedio de cada género representado en los datos. Finalmente calculamos la proporción de las observaciones en cada grupo (M ó F) dividiendo la “cuenta” o la cantidad de observaciones en cada grupo entre la “sum(cuenta)” o el total de observaciones entre todos los grupos, en este caso 100.

Lo que vemos es que la estatura promedio de los individuos de sexo F o femenino es de 174.0238cm y representan un 42% del total de la muestra mientras que la estatura promedio para los individuos de sexo M o masculino es 173.1379cm y representan el 58% de personas en la muestra.

Forma Alternativa de Calcular el Promedio de Estatura

sapply(split(x=datos$Estatura, f=datos$Sexo), mean)
       F        M 
174.0238 173.1379 

Este código es mucho más simple, omite la proporción y solo nos brinda el promedio de la estatura dividido por los dos grupos de sexo, F ó M. En este caso solo vemos que para el grupo F, la estatura promedio es 174.0238cm mientras que para M, la estatura promedio es 173.1379cm

Mediana

En el laboratorio se nos presentan dos opciones

  • 1
median(x=datos$Edad,na.rm = T)
[1] 27
  • 2
quantile(x=datos$Edad, probs=0.5,na.rm = T)
50% 
 27 

Estas dos opciones representan formas diferentes de calcular la mediana. La opción 1 utiliza un comando que nos calcula automaticamente la mediana, mientras que la opción 2 nos calcula el percentil 50 de la variable “Edad”. el percentil 50 es el valor por el cual 50% de la data está por debajo de, en este caso, 27 y equivale a la mediana.

Peso depues segun si consume o no

El laboratorio en este caso también nos presenta dos opciones:

  • 1
datos %>% 
  group_by(Consume) %>% 
  summarise(cuenta=n(),
            promedio_peso=mean(Peso.despues),
            mediana_peso=median(Peso.despues)) 
# A tibble: 2 × 4
  Consume cuenta promedio_peso mediana_peso
  <chr>    <int>         <dbl>        <dbl>
1 NO          42          70.9         70.5
2 SI          58          72.0         73  
  • 2
sapply(split(x=datos$Peso.despues, f=datos$Consume), median)
  NO   SI 
70.5 73.0 
  • La opción 1 nos divide los datos en si consumieron o no, también nos da la cuenta entre los que si consumieron y los que no consumieron con el fin de darnos la media y la mediana para la variable de “Peso Después”.

    En este caso podemos ver que el peso promedio para los que no consumieron es 70,90476 kg y la mediana es 70,5 mientras que los que si consumieron tienen un peso promedio de 72.01724kg y una mediana de 73kg

    Los datos de promedio y mediana nos dan a entender que los datos son bastante símetricos ya que no se desvían mucho ambos valores en ambos grupos “si” y “no”, la ligera diferencia entre ambos valores puede indicar que hay “outliers” que alteran ligeramente el promedio.

    También nos indican que el peso para los que sí consumieron es, en promedio, levemente mayor, lo cual es esperado para un peso después de consumir.

  • La opción 2 es mucho más simple, solo nos calcula la mediana de la variable “Peso Despues” dividida entre los que si han consumido y los que no han consumido. En este ejemplo, la opción 1 nos da muchas más posibilidades de interpretar los datos.

Moda

Moda Edad

TablaEdad<- table(datos$Edad)
TablaEdad

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 
 1  6  5  7  6  7  7  9  4  3  1  3  4  2  2  2  7  5  7  4  2  6 

En este código lo que estamos creando es una tabla de frecuencia que nos muestra cada una de las edades representadas en la muestra y cuantas veces se repite cada edad en la muestra. Seguidamente con el siguiente comando:

sort(TablaEdad, decreasing=TRUE)

26 22 24 25 35 37 20 23 40 21 36 27 31 38 28 30 32 33 34 39 19 29 
 9  7  7  7  7  7  6  6  6  5  5  4  4  4  3  3  2  2  2  2  1  1 

Se ordena estas frecuencias en un orden descendente, mostrandonos cuales valores se repiten más primero, dandonos una idea de la moda que presenta esta muestra. En este caso la edad más representada en la muestra son individuos de ** 26** años de edad.

Moda Peso

TablaPeso<- table(datos$Peso.despues)
TablaPeso

58 59 60 61 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 
 4  7  1  6  5  4  2  2  2  2  4  5  5  3  7  4  4  1  4  3  2  5  5  1  2  1 
85 86 87 88 
 3  1  2  3 

Similar al ejemplo anterior, aquí se está creando una tabla de frecuencia, que muestra cuantas veces cada valor de la variable “Peso Después” se repite.

sort(TablaPeso, decreasing=TRUE)

59 73 61 62 70 71 80 81 58 63 69 74 75 77 72 78 85 88 64 65 66 68 79 83 87 60 
 7  7  6  5  5  5  5  5  4  4  4  4  4  4  3  3  3  3  2  2  2  2  2  2  2  1 
76 82 84 86 
 1  1  1  1 

De igual manera, se ordena esta tabla de manera descendente para mostrar una posible moda en la muestra. En este caso podemos ver que no hay una sola moda, sino dos.

Los valores que con más frecuencia se repiten en esta muestra para la variable Peso Después son 59kg y 79kg.

Datos de Apartamento

Esta base de datos cuenta con 11 variables registradas a apartamentos usados en la ciudad de Medellín. Las variables de la base de datos son:

  • Precio: precio de venta del apartamento (millones de pesos),
  • mt2: área del apartamento,
  • Ubicacion: lugar de ubicación del aparamentos en la ciudad (cualitativa),
  • Estrato: nivel socioeconómico donde está el apartamento (2 a 6),
  • Alcobas: número de alcobas del apartamento,
  • Banos: número de baños del apartamento,
  • Balcon: si el apartamento tiene balcón (si o no),
  • Parqueadero: si el apartamento tiene parqueadero (si o no),
  • Administracion: valor mensual del servicio de administración (millones de pesos),
  • Avaluo: valor del apartamento en escrituras (millones de pesos),
  • Terminado: si el apartamento se encuentra terminado (si o no).
 url <- 'https://raw.githubusercontent.com/fhernanb/datos/master/aptos2015'
datos.apartas <- read.table(file=url, header=T)
head(datos.apartas)
  precio   mt2 ubicacion estrato alcobas banos balcon parqueadero
1     79 43.16     norte       3       3     1     si          si
2     93 56.92     norte       2       2     1     si          si
3    100 66.40     norte       3       2     2     no          no
4    123 61.85     norte       2       3     2     si          si
5    135 89.80     norte       4       3     2     si          no
6    140 71.00     norte       3       3     2     no          si
  administracion   avaluo terminado
1          0.050 14.92300        no
2          0.069 27.00000        si
3          0.000 15.73843        no
4          0.130 27.00000        no
5          0.000 39.56700        si
6          0.120 31.14551        si

Datos del Laboratorio

Rango

El laboratorio presenta dos formas de calcular el rango de precios:

  • 1
range(datos.apartas$precio)
[1]   25 1700
  • 2
 datos.apartas %>% select(precio) %>% range()
[1]   25 1700

Ambas opciones nos muestran dos valores; el valor mínimo y el valor máximo que encontramos en la muestra. 25 Millones de pesos y 1700 Millones de pesos Por lo que el rango lo podriamos interpretar como la resta de 1700 M menos 25 M, o sea 1675 Millones de Pesos

Rango diferenciado por Estrato

datos.apartas %>% 
  group_by(estrato) %>% 
  summarise(rango=max(precio)-min(precio))
# A tibble: 5 × 2
  estrato rango
    <int> <dbl>
1       2   103
2       3   225
3       4   610
4       5  1325
5       6  1560

Aqui dividimos los rangos por estrato y hacemos la resta inmediatamente para obtener el rango, a diferencia del ejemplo anterior que nos mostraba el valor minimo y el valor maximo, aquí el código resta el valor mínimo en cada estrato del valor máximo en cada estrato.

Lo que se puede apreciar es que mientras más alto el estrato, los valores en el rango son mayores, lo cual es esperado para el precio de apartamentos.

Estrato Rango de precio
2 103 Millones de Pesos
3 225 Millones de Pesos
4 610 Millones de Pesos
5 1325 Millones de Pesos
6 1560 Millones de Pesos

Varianza

var(datos.apartas$precio)
[1] 61313.15

En este código estamos calculando la varianza entre todos los datos de la variable precio en la muestra. Entendiblemente, el resultado es un número alto (613130.15) ya que estamos comparando todos los datos de la muestra que contiene información de diferentes ubicaciones y estratos.

datos.apartas %>% 
  group_by(ubicacion) %>% 
  summarize(n=n(),
            varianza=var(precio))
# A tibble: 7 × 3
  ubicacion          n varianza
  <chr>          <int>    <dbl>
1 aburra sur       169    4169.
2 belen guayabal    67    2528.
3 centro            38    2588.
4 laureles          73   25351.
5 norte             10    1009.
6 occidente         69    3596.
7 poblado          268   84497.

Aquí tenemos un resumen de la varianza de precios dividida según la ubicación, también nos muestra un conteo de cuantas observaciones hay para cada grupo, osea cuantos apartamentos hay para cada ubicación en la muestra.

A simple vista, podemos ver que las ubicaciones con mayor varianza son Poblado y Laureles, mientras que los de menor varianza son Belen Guayabal y Norte.

Lo que podemos interpretar es que hay una gran varianza en los precios de Poblado, que sugiere que hay un rango grande para los precios de las propiedades en esta locación en comparación a otras ubicaciones, pero también se puede ver que tenemos muchas más observaciones para Poblado (268) en comparación a otras ubicaciones como Norte, cuya varianza se presenta mucho más estable, pero que solo tenemos 10 apartamentos en la muestra, lo que podría estar alterando como se estan percibiendo estos datos.

Variablilidad en Boxplot

with(datos.apartas, boxplot(precio ~ ubicacion, ylab='Precio (millones)'))

Aquí podemos ver un gráfico de cajas mostrando un resumen de la distribucion de precios en diferentes localizaciones. La posición de la caja en el grafico nos muestra en donde se encuentra el rango intercuartil de la data (el 50% que está en el medio de los datos) con respecto a los precios de los apartamentos en cada ubicación.

En este gráfico, podemos ver datos similares a lo que encontramos calculando varianza. La representación de Poblado muestra una caja más grande que las demás ubicaciónes indicando que dentro del rango intercuartil hay mayor variabilidad, de igual manera la longitud de los “bigotes” nos indica que fuera de ese 50% entre el cuartil 1 y 3 también hay mucha dispersión de los datos, habiendo más variabilidad de precios mientras más los precios de la propiedad sube. También podemos ver que hay varios “outliers” cuyos precios son muy altos.

En esta representación si podemos comparar de manera más fácil cada ubicación, podemos ver que aunque la varianza en el ejemplo anterior entre Centro y Norte mostraban una gran diferencia, en el Rango intercuartil son mucho más similares, la variabilidad en la ubicación Norte se encuentra en el 25% por encima del cuartil 3 por ejemplo.

También es interesante poder ver los “outlier” o esos puntos que están en una distancia anormal de los otros valores de la muestra, por ejemplo, tanto en Poblado como en Laureles podemos ver que hay observaciones muy por encima en precio que la mayoría de los datos, pero la gran mayoría de los apartamentos se encuentran, independientemente de la localización, por debajo de los 1000 millones de pesos.

Desviación Estándar

sd(x=datos.apartas$precio)
[1] 247.6149

Similar a la varianza, la desviación estándar nos mide la cantidad de variabilidad o dispersión de los datos en un grupo de valores. A mayor número de desviación estándar mayor dispersión. En este caso, “247.6149”, nos indica que hay un gran rango entre los precios de las propiedades en el dataset.

Los precios de propiedades individuales tienden a desviarse del precio promedio por alrededor de 247.6149 Millones de pesos, en promedio.

datos.apartas %>% 
  group_by(ubicacion) %>% 
  summarize(n=n(),
            varianza=var(precio),
            desviacion=sd(precio))
# A tibble: 7 × 4
  ubicacion          n varianza desviacion
  <chr>          <int>    <dbl>      <dbl>
1 aburra sur       169    4169.       64.6
2 belen guayabal    67    2528.       50.3
3 centro            38    2588.       50.9
4 laureles          73   25351.      159. 
5 norte             10    1009.       31.8
6 occidente         69    3596.       60.0
7 poblado          268   84497.      291. 

Mostrandolo lado a lado junto a la varianza, podemos ver que los valores de desviación estándar y varianza son comparables, las ubicaciónes con mayor varianza también tienen una mayor desviación estándar. Las ubicaciones con datos más estables prensentan varianza menor y en promedio no se desvían mucho del promedio de precios para la ubicación.

Coeficiente de variación

coef_var <- function(x, na.rm = FALSE) {
  sd(x, na.rm=na.rm) / mean(x, na.rm=na.rm)
}
coef_var(x=datos.apartas$precio, na.rm=T)
[1] 0.7792446

Esta función nos calcula el coeficiente de variación para la variable que le demos. En este caso se calcula el CV de la variable “precio”.

Un CV de 0.7792446 se puede interpretar como que hay una variabilidad de un 77.92%. Mientras más alto el CV, más variabilidad.

datos.apartas %>% 
  select(precio,mt2, avaluo) %>% 
  summarise_all( list(promedio=mean,
                      desviacion=sd,
                      CV=coef_var) ) %>% 
  t()
                         [,1]
precio_promedio   317.7627392
mt2_promedio      120.9438184
avaluo_promedio   182.6365926
precio_desviacion 247.6149140
mt2_desviacion     74.6954931
avaluo_desviacion 169.0823841
precio_CV           0.7792446
mt2_CV              0.6176049
avaluo_CV           0.9257859

En este ejemplo estamos comparando el promedio, desviación estándar y el CV de las variables precio, mt2 y avaluo de los apartamentos. A simple vista, si revisasemos solo el CV de estas variables podriamos pensar que la variable de avaluo presenta la mayor variabilidad, pero el CV al ser calculado relativo al promedio de los datos en la variable, es influenciado por outliers, por lo que si los datos presentan alguna asimetría, causaría que el coeficiente de variabilidad sea más alto.

Esto se puede ver también cuando lo estamos comparando con la desviación estándar para las mismas variables. A pesar de que avaluo presenta una variabilidad de un 92.57% según su CV, presenta una desviación estándar mucho menor a la desviación estándar de la variable de Precio.

En este caso, como la desviación estándar es menos influenciada por el promedio, es una medida más confiable para calcular la variabilidad de estas variables en partícular. Entonces, se podría decir que la variable de Precio es la que presenta más variabilidad.