library(UsingR)
library(MASS)
library(ggplot2)
library(dplyr)
library(tidyr)
datasets = data(package = "UsingR")
nrow(datasets$results)
## [1] 123
data(bumpers) # Costes de reparación de parachoques de varios automóviles
par(mfrow = c(1, 2))
hist(bumpers, main="Histograma de Bumpers", col="lightblue")
boxplot(bumpers, main="Boxplot de Bumpers", col="lightgreen")
data(firstchi) # Edad de la madre al nacer el primer hijo
par(mfrow = c(1, 2))
hist(firstchi, main="Histograma de Firstchi", col="lightblue")
boxplot(firstchi, main="Boxplot de Firstchi", col="lightgreen")
data(math) # Puntuaciones normalizadas en matemáticas
par(mfrow = c(1, 2))
hist(math, main="Histograma de Math Scores", col="lightblue")
boxplot(math, main="Boxplot de Math Scores", col="lightgreen")
En el histograma y boxplot para bumpers, la media
parece ser alrededor de 2000, viendo el balance del histograma y el
sesgo hacia la izquierda. La mediana es visible en el boxplot, marcada
por la línea en la caja, y parece estar justo por encima de 2000, lo
cual coincide con la estimación del histograma. Para la desviación
estándar, dada la concentración de datos entre 1000 y 3000 en el
histograma y el rango intercuartílico en el boxplot, se estima que es
menos de la mitad de este rango.
El histograma y el boxplot para el conjunto de datos
firstchi, la media parece estar alrededor del rango de 20 a
25, donde el histograma muestra la mayor frecuencia. La mediana, marcada
en el boxplot por la línea dentro del cuadro, está aproximadamente a 20,
lo que coincide con la zona de mayor altura en el histograma. La
desviación estándar parece ser pequeña ya que los datos se concentran en
un rango estrecho.
El conjunto de datos math muestra una distribución
simétrica en el histograma, indicando que la media podría estar
alrededor de 55, en el centro del pico más alto. La mediana se visualiza
en el boxplot justo por debajo de 60, lo que se alinea con la
distribución del histograma. La desviación estándar, sugerida por la
dispersión de las barras del histograma y el rango intercuartílico del
boxplot, apunta a una variabilidad moderada, probablemente un poco menos
de la mitad del rango de 40 a 70.
mean_bumpers = mean(bumpers)
median_bumpers = median(bumpers)
sd_bumpers = sd(bumpers)
mean_firstchi = mean(firstchi)
median_firstchi = median(firstchi)
sd_firstchi = sd(firstchi)
mean_math = mean(math)
median_math = median(math)
sd_math = sd(math)
## Estadísticas para Bumpers:
## Media: 2122.478 Mediana: 2129 Desviación Estándar: 798.4574
## Estadísticas para Firstchi:
## Media: 23.97701 Mediana: 23 Desviación Estándar: 6.254258
## Estadísticas para Math:
## Media: 54.9 Mediana: 54 Desviación Estándar: 9.746264
El boxplot fue particularmente efectivo para estimar la
mediana, mientras que el histograma ayudó a tener una
noción general de la dispersión de los datos y, en el caso de
distribuciones simétricas, también para la media. Para la desviación
estándar, ninguna de las dos visualizaciones la proporciona
directamente, pero el histograma permite ver la dispersión de los datos,
y el boxplot muestra el IQR, que es una medida relacionada. Por lo
tanto, para tener una comprensión completa, ambos gráficos se
complementan bien y son útiles para realizar estimaciones visuales antes
de proceder con los cálculos exactos.
data(brightness)
brightness_df = data.frame(brightness = brightness)
ggplot(brightness_df, aes(x = brightness)) +
geom_histogram(aes(y = ..density..), binwidth = 1, color = "black", fill = "grey") +
geom_density(alpha = 0.5, fill = "#377eb8") +
labs(x = "Brillo", y = "Densidad", title = "Histograma y Gráfico de Densidad del Brillo de Estrellas") +
theme_minimal()
boxplot(brightness, main="Diagrama de Caja del Brillo de Estrellas", col="blue")
Si, los puntos que se encuentran por debajo del bigote inferior y por encima del bigote superior en el boxplot se consideran outliers. Estos son valores que se desvían significativamente de la mayoría de los datos.
# Primer y tercer cuartil, así como el IQR
Q1 = quantile(brightness, 0.25)
Q3 = quantile(brightness, 0.75)
IQR = Q3 - Q1
# Límites para identificar outliers
lower_whisker = Q1 - 1.5 * IQR
# Identificar los outliers
outliers = brightness_df$brightness[brightness < lower_whisker]
# Ordenar los outliers y seleccionamos el segundo menor
outliers_sorted = sort(outliers)
second_lowest_outlier = outliers_sorted[2]
## El segundo menor outlier es: 2.28
brightness_sin = brightness[brightness > Q1 & brightness < Q3]
boxplot(brightness_sin, main="Diagrama de Caja del Brillo de Estrellas sin Datos Atípicos", col="blue")
data(UScereal)
str(UScereal)
## 'data.frame': 65 obs. of 11 variables:
## $ mfr : Factor w/ 6 levels "G","K","N","P",..: 3 2 2 1 2 1 6 4 5 1 ...
## $ calories : num 212 212 100 147 110 ...
## $ protein : num 12.12 12.12 8 2.67 2 ...
## $ fat : num 3.03 3.03 0 2.67 0 ...
## $ sodium : num 394 788 280 240 125 ...
## $ fibre : num 30.3 27.3 28 2 1 ...
## $ carbo : num 15.2 21.2 16 14 11 ...
## $ sugars : num 18.2 15.2 0 13.3 14 ...
## $ shelf : int 3 3 3 1 2 3 1 3 2 1 ...
## $ potassium: num 848.5 969.7 660 93.3 30 ...
## $ vitamins : Factor w/ 3 levels "100%","enriched",..: 2 2 2 2 2 2 2 2 2 2 ...
El conjunto de datos UScereal tiene 65 observaciones de 11 variables con los siguientes tipos de datos:
table(UScereal$mfr, UScereal$shelf)
##
## 1 2 3
## G 6 7 9
## K 4 7 10
## N 2 0 1
## P 2 1 6
## Q 0 3 2
## R 4 0 1
Esta tabla muestra la distribución de la frecuencia de los cereales por cada fabricante en diferentes estantes.
table(UScereal$fat, UScereal$vitamins)
##
## 100% enriched none
## 0 1 18 3
## 0.6666667 0 1 0
## 1 3 7 0
## 1.1363636 0 1 0
## 1.3333333 1 8 0
## 1.4925373 0 4 0
## 1.6 0 1 0
## 2 0 2 0
## 2.6666667 0 3 0
## 2.9850746 0 4 0
## 3.030303 0 2 0
## 4 0 4 0
## 6 0 1 0
## 9.0909091 0 1 0
La tabla muestra la frecuencia de los tipos de vitaminas en los cereales en función de su contenido de grasa. Basado en la tabla:
table(UScereal$fat, UScereal$shelf)
##
## 1 2 3
## 0 10 3 9
## 0.6666667 0 1 0
## 1 2 5 3
## 1.1363636 0 0 1
## 1.3333333 2 4 3
## 1.4925373 2 1 1
## 1.6 1 0 0
## 2 0 1 1
## 2.6666667 1 1 1
## 2.9850746 0 1 3
## 3.030303 0 0 2
## 4 0 1 3
## 6 0 0 1
## 9.0909091 0 0 1
La tabla muestra la distribución del contenido de grasa en los cereales en función de su ubicación en diferentes estantes
table(UScereal$carbo, UScereal$sugars)
##
## 0 0.8 1.769912 2 3 4 4.477612 5.681818 6 6.666667 7.462687 8.270677
## 10.52632 0 0 0 0 0 0 0 0 0 0 0 1
## 11 0 0 0 0 0 0 0 0 0 0 0 0
## 12 0 0 0 0 0 0 0 0 0 0 0 0
## 12.5 0 0 0 0 0 0 0 0 0 0 0 0
## 13 1 0 0 0 0 0 0 0 0 0 0 0
## 13.6 0 1 0 0 0 0 0 0 0 0 0 0
## 14 0 0 0 1 0 0 0 0 0 0 0 0
## 14.66667 0 0 0 0 0 0 0 0 0 0 0 0
## 15 0 0 0 0 0 0 0 0 1 0 0 0
## 15.15152 0 0 0 0 0 0 0 0 0 0 0 0
## 15.33333 0 0 0 0 0 0 0 0 0 0 0 0
## 16 1 0 0 0 2 0 0 0 0 0 0 0
## 16.41791 0 0 0 0 0 0 0 0 0 0 0 0
## 17 0 0 0 0 1 0 0 0 0 0 0 0
## 17.04545 0 0 0 0 0 0 0 1 0 0 0 0
## 17.33333 0 0 0 0 0 0 0 0 0 0 0 0
## 17.5 0 0 0 0 0 0 0 0 0 0 0 0
## 17.91045 0 0 0 0 0 0 0 0 0 0 0 0
## 18.66667 0 0 0 0 0 0 0 0 0 0 0 0
## 19.40299 0 0 0 0 0 0 0 0 0 0 1 0
## 20 0 0 0 0 1 0 0 0 0 0 0 0
## 20.35398 0 0 1 0 0 0 0 0 0 0 0 0
## 20.89552 0 0 0 0 0 0 0 0 0 0 0 0
## 21 0 0 0 1 2 0 0 0 0 0 0 0
## 21.21212 0 0 0 0 0 0 0 0 0 0 0 0
## 21.33333 0 0 0 0 0 0 0 0 0 0 0 0
## 22 0 0 0 0 2 0 0 0 0 0 0 0
## 22.38806 0 0 0 0 0 0 0 0 0 0 0 0
## 24 0 0 0 0 0 0 0 0 0 1 0 0
## 25.37313 0 0 0 0 0 0 1 0 0 0 0 0
## 26 0 0 0 0 0 0 0 0 0 0 0 0
## 26.66667 0 0 0 0 0 0 0 0 0 0 0 0
## 27 0 0 0 0 0 0 0 0 0 0 0 0
## 28 0 0 0 0 0 1 0 0 0 0 0 0
## 28.35821 1 0 0 0 0 0 0 0 0 0 0 0
## 29.85075 1 0 0 0 0 0 0 0 0 0 0 0
## 30 0 0 0 0 0 0 0 0 0 0 0 0
## 31.34328 0 0 0 0 0 0 0 0 0 0 0 0
## 39.39394 0 0 0 0 0 0 0 0 0 0 0 0
## 68 0 0 0 0 0 0 0 0 0 0 0 0
##
## 8.75 8.955224 10.447761 10.666667 11 12 12.121212 13 13.333333
## 10.52632 0 0 0 0 0 0 0 0 0
## 11 0 0 0 0 0 0 0 1 0
## 12 0 0 0 0 1 1 0 2 0
## 12.5 0 0 0 0 0 0 0 0 0
## 13 0 0 0 0 0 2 0 0 0
## 13.6 0 0 0 0 0 0 0 0 0
## 14 0 0 0 0 0 0 0 0 1
## 14.66667 0 0 0 0 0 0 0 0 1
## 15 0 0 0 0 0 0 0 0 0
## 15.15152 0 0 0 0 0 0 0 0 0
## 15.33333 0 0 0 0 0 0 0 0 1
## 16 0 0 0 0 0 0 0 0 0
## 16.41791 0 0 0 0 0 0 0 0 0
## 17 0 0 0 0 0 0 0 0 0
## 17.04545 0 0 0 0 0 0 0 0 0
## 17.33333 0 0 0 0 0 1 0 0 0
## 17.5 1 0 0 0 0 0 0 0 0
## 17.91045 0 1 0 0 0 0 0 0 0
## 18.66667 0 0 0 0 0 0 0 0 0
## 19.40299 0 0 0 0 0 0 0 0 0
## 20 0 0 0 0 0 1 0 0 0
## 20.35398 0 0 0 0 0 0 0 0 0
## 20.89552 0 0 0 0 0 0 0 0 0
## 21 0 0 0 0 0 0 0 0 0
## 21.21212 0 0 0 0 0 0 0 0 0
## 21.33333 0 0 0 1 0 0 0 0 0
## 22 0 0 0 0 0 0 0 0 0
## 22.38806 0 1 0 0 0 0 0 0 0
## 24 0 0 0 1 0 0 0 0 0
## 25.37313 0 0 0 0 0 0 0 0 0
## 26 0 0 0 0 0 0 0 0 0
## 26.66667 0 0 0 0 0 1 0 0 0
## 27 0 0 0 0 0 0 0 0 0
## 28 0 0 0 0 0 1 0 0 0
## 28.35821 0 0 0 0 0 0 0 0 0
## 29.85075 0 0 0 0 0 0 0 0 0
## 30 0 0 0 0 0 1 0 0 0
## 31.34328 0 0 1 0 0 0 0 0 0
## 39.39394 0 0 0 0 0 0 1 0 0
## 68 0 0 0 0 0 1 0 0 0
##
## 13.432836 14 14.666667 14.925373 15.151515 16 17.045455 17.910448
## 10.52632 0 0 0 0 0 0 0 0
## 11 0 1 0 0 0 0 0 0
## 12 0 0 0 0 0 0 0 0
## 12.5 0 0 0 0 0 0 1 0
## 13 0 0 0 0 0 0 0 0
## 13.6 0 0 0 0 0 0 0 0
## 14 0 0 0 0 0 0 0 0
## 14.66667 0 0 0 0 0 0 0 0
## 15 0 1 0 0 0 0 0 0
## 15.15152 0 0 0 0 0 0 0 0
## 15.33333 0 0 0 0 0 0 0 0
## 16 0 0 0 0 0 1 0 0
## 16.41791 0 0 0 0 0 0 0 0
## 17 0 0 0 0 0 0 0 0
## 17.04545 0 0 0 0 0 0 0 0
## 17.33333 0 0 0 0 0 1 0 0
## 17.5 0 0 0 0 0 0 0 0
## 17.91045 0 0 0 1 0 0 0 0
## 18.66667 0 0 1 0 0 1 0 0
## 19.40299 0 0 0 0 0 0 0 0
## 20 0 1 0 0 0 0 0 0
## 20.35398 0 0 0 0 0 0 0 0
## 20.89552 0 0 0 0 0 0 0 1
## 21 0 0 0 0 0 1 0 0
## 21.21212 0 0 0 0 1 0 0 0
## 21.33333 0 0 0 0 0 0 0 0
## 22 0 0 0 0 0 0 0 0
## 22.38806 1 0 0 0 0 0 0 0
## 24 0 0 0 0 0 0 0 0
## 25.37313 0 0 0 0 0 0 0 0
## 26 0 1 0 0 0 0 0 0
## 26.66667 0 0 0 0 0 0 0 0
## 27 0 0 0 0 0 0 0 0
## 28 0 0 0 0 0 0 0 0
## 28.35821 0 0 0 0 0 0 0 0
## 29.85075 0 0 0 0 0 0 0 0
## 30 0 0 0 0 0 0 0 0
## 31.34328 0 0 0 0 0 0 0 0
## 39.39394 0 0 0 0 0 0 0 0
## 68 0 0 0 0 0 0 0 0
##
## 18.181818 19.402985 20 20.895522
## 10.52632 0 0 0 0
## 11 0 0 0 0
## 12 0 0 1 0
## 12.5 0 0 0 0
## 13 0 0 0 0
## 13.6 0 0 0 0
## 14 0 0 0 0
## 14.66667 0 0 0 0
## 15 0 0 0 0
## 15.15152 1 0 0 0
## 15.33333 0 0 0 0
## 16 0 0 0 0
## 16.41791 0 0 0 1
## 17 0 0 0 0
## 17.04545 0 0 0 0
## 17.33333 0 0 0 0
## 17.5 0 0 0 0
## 17.91045 0 0 0 0
## 18.66667 0 0 0 0
## 19.40299 0 0 0 0
## 20 0 0 0 0
## 20.35398 0 0 0 0
## 20.89552 0 0 0 0
## 21 0 0 0 0
## 21.21212 0 0 0 0
## 21.33333 0 0 0 0
## 22 0 0 0 0
## 22.38806 0 0 0 0
## 24 0 0 0 0
## 25.37313 0 1 0 0
## 26 0 0 0 0
## 26.66667 0 0 0 0
## 27 0 0 1 0
## 28 0 0 0 0
## 28.35821 0 0 0 0
## 29.85075 0 0 0 0
## 30 0 0 0 0
## 31.34328 0 0 0 0
## 39.39394 0 0 0 0
## 68 0 0 0 0
cor.test(UScereal$carbo, UScereal$sugars, use = "complete.obs")
##
## Pearson's product-moment correlation
##
## data: UScereal$carbo and UScereal$sugars
## t = -0.32432, df = 63, p-value = 0.7468
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2819179 0.2051155
## sample estimates:
## cor
## -0.04082599
Basado en estos resultados, podemos concluir que no existe una relación lineal significativa entre el contenido de carbohidratos y de azúcares en los cereales del conjunto de datos UScereal.
table(UScereal$fibre, UScereal$mfr)
##
## G K N P Q R
## 0 9 2 0 3 2 2
## 1 0 7 0 0 1 0
## 1.333333 1 2 0 0 0 1
## 1.6 1 0 0 0 0 0
## 2 3 0 0 0 0 0
## 2.666667 2 1 0 0 0 0
## 2.985075 0 0 0 0 1 0
## 3 3 0 0 0 0 0
## 3.409091 0 0 0 1 0 0
## 3.75 0 1 0 0 0 0
## 4 2 1 0 0 1 0
## 4.477612 0 2 1 0 0 1
## 5 1 0 0 0 0 0
## 5.970149 0 0 1 0 0 1
## 6.666667 0 1 0 0 0 0
## 7.462687 0 1 0 2 0 0
## 8 0 1 0 0 0 0
## 8.955224 0 0 0 1 0 0
## 9.090909 0 0 0 1 0 0
## 12 0 0 0 1 0 0
## 27.272727 0 1 0 0 0 0
## 28 0 1 0 0 0 0
## 30.30303 0 0 1 0 0 0
La tabla de contingencia que muestra la relación entre el contenido de fibra y los fabricantes de cereales revela una diversidad notable en la formulación de fibra entre los distintos productores. Fabricantes como N y P se destacan por ofrecer cereales con altos niveles de fibra, con N presentando un producto con hasta 30.30303 unidades de fibra y P con productos que alcanzan los 12 y 9.090909 unidades. Por otro lado, el fabricante G tiende a producir cereales con bajo contenido de fibra, aunque también ofrece algunos con hasta 4 unidades. K y Q muestran una gama más amplia, con K proporcionando cereales con hasta 28 unidades de fibra. Esta variabilidad sugiere que algunos fabricantes pueden especializarse en cereales de alto contenido de fibra, mientras que otros ofrecen una gama más amplia de contenidos.
table(UScereal$sodium, UScereal$sugars)
##
## 0 0.8 1.769912 2 3 4 4.477612 5.681818 6 6.666667 7.462687 8.270677
## 0 3 0 0 0 0 0 0 0 0 0 0 0
## 51.13636 0 0 0 0 0 0 0 0 0 0 0 0
## 90 0 0 0 0 0 0 0 0 0 0 0 0
## 93.33333 0 0 0 0 0 0 0 0 0 0 0 0
## 125 0 0 0 0 0 0 0 0 0 0 0 0
## 135.33835 0 0 0 0 0 0 0 0 0 0 0 1
## 140 0 0 0 0 0 0 0 0 0 0 0 0
## 159.09091 0 0 0 0 0 0 0 1 0 0 0 0
## 173.33333 0 0 0 1 0 0 0 0 0 0 0 0
## 180 0 0 0 0 0 0 0 0 0 0 0 0
## 186.66667 0 0 0 0 0 0 0 0 0 0 0 0
## 190 0 0 0 0 0 0 0 0 0 0 0 0
## 200 0 0 0 0 3 0 0 0 0 0 0 0
## 212.38938 0 0 1 0 0 0 0 0 0 0 0 0
## 220 0 0 0 0 1 0 0 0 1 0 0 0
## 223.8806 0 0 0 0 0 0 0 0 0 0 0 0
## 226.66667 0 0 0 0 0 0 0 0 0 0 0 0
## 227.27273 0 0 0 0 0 0 0 0 0 0 0 0
## 230 0 0 0 0 1 0 0 0 0 0 0 0
## 232 0 1 0 0 0 0 0 0 0 0 0 0
## 238.80597 0 0 0 0 0 0 0 0 0 0 0 0
## 240 0 0 0 0 0 0 0 0 0 0 0 0
## 253.33333 0 0 0 0 0 0 0 0 0 1 0 0
## 266.66667 0 0 0 0 0 0 0 0 0 0 0 0
## 270 0 0 0 0 0 0 0 0 0 0 0 0
## 280 1 0 0 0 1 0 0 0 0 0 0 0
## 283.58209 0 0 0 0 0 0 0 0 0 0 0 0
## 290 0 0 0 1 1 0 0 0 0 0 0 0
## 293.33333 0 0 0 0 0 0 0 0 0 0 0 0
## 298.50746 0 0 0 0 0 0 0 0 0 0 0 0
## 313.43284 0 0 0 0 0 0 0 0 0 0 1 0
## 320 0 0 0 0 1 0 0 0 0 0 0 0
## 328.35821 0 0 0 0 0 0 0 0 0 0 0 0
## 333.33333 0 0 0 0 0 1 0 0 0 0 0 0
## 340 0 0 0 0 0 0 0 0 0 0 0 0
## 343.28358 0 0 0 0 0 0 1 0 0 0 0 0
## 358.20896 0 0 0 0 0 0 0 0 0 0 0 0
## 373.33333 0 0 0 0 0 0 0 0 0 0 0 0
## 393.93939 0 0 0 0 0 0 0 0 0 0 0 0
## 680 0 0 0 0 0 0 0 0 0 0 0 0
## 787.87879 0 0 0 0 0 0 0 0 0 0 0 0
##
## 8.75 8.955224 10.447761 10.666667 11 12 12.121212 13 13.333333
## 0 1 0 0 0 0 1 0 0 0
## 51.13636 0 0 0 0 0 0 0 0 0
## 90 0 0 0 0 0 1 0 0 0
## 93.33333 0 0 0 0 0 0 0 0 0
## 125 0 0 0 0 0 0 0 1 0
## 135.33835 0 0 0 0 0 0 0 0 0
## 140 0 0 0 0 0 1 0 0 0
## 159.09091 0 0 0 0 0 0 0 0 0
## 173.33333 0 0 0 0 0 0 0 0 0
## 180 0 0 0 0 0 1 0 2 0
## 186.66667 0 0 0 0 0 0 0 0 1
## 190 0 0 0 0 0 0 0 0 0
## 200 0 0 0 0 0 0 0 0 0
## 212.38938 0 0 0 0 0 0 0 0 0
## 220 0 0 0 0 1 0 0 0 0
## 223.8806 0 1 0 0 0 0 0 0 0
## 226.66667 0 0 0 0 0 1 0 0 0
## 227.27273 0 0 0 0 0 0 1 0 0
## 230 0 0 0 0 0 0 0 0 0
## 232 0 0 0 0 0 0 0 0 0
## 238.80597 0 0 0 0 0 0 0 0 0
## 240 0 0 0 0 0 0 0 0 1
## 253.33333 0 0 0 0 0 0 0 0 0
## 266.66667 0 0 0 1 0 0 0 0 0
## 270 0 0 0 0 0 1 0 0 0
## 280 0 0 0 1 0 1 0 0 0
## 283.58209 0 0 0 0 0 0 0 0 0
## 290 0 0 0 0 0 0 0 0 0
## 293.33333 0 0 0 0 0 0 0 0 0
## 298.50746 0 1 0 0 0 0 0 0 0
## 313.43284 0 0 0 0 0 0 0 0 0
## 320 0 0 0 0 0 0 0 0 0
## 328.35821 0 0 1 0 0 0 0 0 0
## 333.33333 0 0 0 0 0 0 0 0 1
## 340 0 0 0 0 0 0 0 0 0
## 343.28358 0 0 0 0 0 0 0 0 0
## 358.20896 0 0 0 0 0 0 0 0 0
## 373.33333 0 0 0 0 0 1 0 0 0
## 393.93939 0 0 0 0 0 0 0 0 0
## 680 0 0 0 0 0 1 0 0 0
## 787.87879 0 0 0 0 0 0 0 0 0
##
## 13.432836 14 14.666667 14.925373 15.151515 16 17.045455 17.910448
## 0 0 0 0 0 0 0 0 0
## 51.13636 0 0 0 0 0 0 1 0
## 90 0 0 0 0 0 0 0 0
## 93.33333 0 0 0 0 0 0 0 0
## 125 0 1 0 0 0 0 0 0
## 135.33835 0 0 0 0 0 0 0 0
## 140 0 0 0 0 0 0 0 0
## 159.09091 0 0 0 0 0 0 0 0
## 173.33333 0 0 0 0 0 0 0 0
## 180 0 0 0 0 0 1 0 0
## 186.66667 0 0 0 0 0 0 0 0
## 190 0 1 0 0 0 0 0 0
## 200 0 0 0 0 0 0 0 0
## 212.38938 0 0 0 0 0 0 0 0
## 220 0 0 0 0 0 0 0 0
## 223.8806 0 0 0 0 0 0 0 0
## 226.66667 0 0 0 0 0 0 0 0
## 227.27273 0 0 0 0 0 0 0 0
## 230 0 0 0 0 0 0 0 0
## 232 0 0 0 0 0 0 0 0
## 238.80597 0 0 0 1 0 0 0 0
## 240 0 0 0 0 0 0 0 0
## 253.33333 0 0 0 0 0 0 0 0
## 266.66667 0 0 1 0 0 0 0 0
## 270 0 0 0 0 0 0 0 0
## 280 0 2 0 0 0 2 0 0
## 283.58209 1 0 0 0 0 0 0 0
## 290 0 0 0 0 0 0 0 0
## 293.33333 0 0 0 0 0 1 0 0
## 298.50746 0 0 0 0 0 0 0 0
## 313.43284 0 0 0 0 0 0 0 0
## 320 0 0 0 0 0 0 0 0
## 328.35821 0 0 0 0 0 0 0 0
## 333.33333 0 0 0 0 0 0 0 0
## 340 0 0 0 0 0 0 0 0
## 343.28358 0 0 0 0 0 0 0 0
## 358.20896 0 0 0 0 0 0 0 1
## 373.33333 0 0 0 0 0 0 0 0
## 393.93939 0 0 0 0 0 0 0 0
## 680 0 0 0 0 0 0 0 0
## 787.87879 0 0 0 0 1 0 0 0
##
## 18.181818 19.402985 20 20.895522
## 0 0 0 0 0
## 51.13636 0 0 0 0
## 90 0 0 0 0
## 93.33333 0 0 1 0
## 125 0 0 0 0
## 135.33835 0 0 0 0
## 140 0 0 0 0
## 159.09091 0 0 0 0
## 173.33333 0 0 0 0
## 180 0 0 0 0
## 186.66667 0 0 0 0
## 190 0 0 0 0
## 200 0 0 0 0
## 212.38938 0 0 0 0
## 220 0 0 0 0
## 223.8806 0 1 0 0
## 226.66667 0 0 0 0
## 227.27273 0 0 0 0
## 230 0 0 0 0
## 232 0 0 0 0
## 238.80597 0 0 0 0
## 240 0 0 0 0
## 253.33333 0 0 0 0
## 266.66667 0 0 0 0
## 270 0 0 0 0
## 280 0 0 0 0
## 283.58209 0 0 0 0
## 290 0 0 0 0
## 293.33333 0 0 0 0
## 298.50746 0 0 0 1
## 313.43284 0 0 0 0
## 320 0 0 0 0
## 328.35821 0 0 0 0
## 333.33333 0 0 0 0
## 340 0 0 1 0
## 343.28358 0 0 0 0
## 358.20896 0 0 0 0
## 373.33333 0 0 0 0
## 393.93939 1 0 0 0
## 680 0 0 0 0
## 787.87879 0 0 0 0
cor(UScereal$sodium, UScereal$sugars, use = "complete.obs")
## [1] 0.2112437
El coeficiente de correlación de 0.2112437 entre el contenido de sodio y de azúcares indica una correlación positiva leve, sugiriendo que los cereales con niveles más altos de sodio tienden también a tener niveles algo mayores de azúcares, aunque la relación es relativamente débil.
data("mammals")
cor(mammals$body, mammals$brain)
## [1] 0.9341638
Indica una correlación positiva muy fuerte. Esto significa que, en general, a medida que aumenta el peso corporal de los mamíferos, también lo hace el peso de su cerebro.
plot(mammals$body, mammals$brain,
main="Relación entre Peso Corporal y Peso del Cerebro en Mamíferos",
xlab="Peso Corporal (kg)",
ylab="Peso del Cerebro (g)",
pch=19, col=rgb(0.1, 0.3, 0.5, 0.7))
mammals$log_body = log(mammals$body)
mammals$log_brain = log(mammals$brain)
cor(mammals$log_body, mammals$log_brain)
## [1] 0.9595748
plot(mammals$log_body, mammals$log_brain,
main="Relación Logarítmica entre Peso Corporal y Peso del Cerebro en Mamíferos",
xlab="Logaritmo del Peso Corporal",
ylab="Logaritmo del Peso del Cerebro",
pch=19, col=rgb(0.1, 0.3, 0.5, 0.7))
La transformación logarítmica ha mejorado la correlación entre el peso corporal y el peso del cerebro, aumentando de 0.9341638 a 0.9595748. Esto sugiere que la relación entre estas dos variables es más cercana a una función exponencial que lineal en su estado original.
La relación entre las variables se linealiza, mostrando una tendencia clara y más uniforme que indica una correlación fuerte, lo cual es consistente con el alto coeficiente de correlación que se calculó.
data("emissions")
correlation_gdp_percapita = cor(emissions$GDP, emissions$perCapita, use = "complete.obs")
correlation_gdp_co2 = cor(emissions$GDP, emissions$CO2, use = "complete.obs")
correlation_percapita_co2 = cor(emissions$perCapita, emissions$CO2, use = "complete.obs")
## Correlacion entre GDP y perCapita es: 0.4325303
## Correlacion entre GDP y CO2 es: 0.9501753
## Correlacion entre perCapita y CO2 es: 0.2757962
model_gdp = lm(CO2 ~ GDP, data = emissions)
summary(model_gdp)
##
## Call:
## lm(formula = CO2 ~ GDP, data = emissions)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1107.35 -81.47 -32.69 126.33 1438.79
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.043e+01 9.441e+01 0.216 0.83
## GDP 7.815e-04 5.233e-05 14.933 1.2e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 427.4 on 24 degrees of freedom
## Multiple R-squared: 0.9028, Adjusted R-squared: 0.8988
## F-statistic: 223 on 1 and 24 DF, p-value: 1.197e-13
El modelo de regresión lineal muestra una fuerte relación positiva y estadísticamente significativa entre el GDP y las emisiones de CO2, con un R cuadrado de 0.9028, lo que significa que aproximadamente el 90% de la variabilidad en las emisiones de CO2 puede explicarse por el GDP. A pesar de que el intercepto no es significativo, el coeficiente para el GDP es altamente significativo, indicando que un aumento en el GDP está asociado con un incremento en las emisiones de CO2. La amplia gama de residuales sugiere que podrían existir valores atípicos o factores no capturados por el modelo que podrían ser importantes para predecir las emisiones de CO2 más precisamente.
model_percapita = lm(CO2 ~ perCapita, data = emissions)
summary(model_percapita)
##
## Call:
## lm(formula = CO2 ~ perCapita, data = emissions)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1088.4 -681.4 -317.7 80.5 5479.7
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -223.99167 686.10910 -0.326 0.747
## perCapita 0.05040 0.03586 1.406 0.173
##
## Residual standard error: 1318 on 24 degrees of freedom
## Multiple R-squared: 0.07606, Adjusted R-squared: 0.03757
## F-statistic: 1.976 on 1 and 24 DF, p-value: 0.1726
El modelo de regresión lineal utilizando el per cápitapara predecir las emisiones de CO2 indica que el PIB per cápita no es un predictor estadísticamente significativo de las emisiones de CO2. El coeficiente para perCapita es positivo, lo que sugiere una relación positiva entre estas variables, pero con un valor p de 0.173, esta relación no es estadísticamente significativa en el nivel de confianza habitual.Además, el R cuadrado de 0.07606 muestra que el modelo explica solo alrededor del 7.6% de la variabilidad en las emisiones de CO2, lo cual es bastante bajo y sugiere que hay otros factores no considerados en el modelo que influirían en las emisiones de CO2.
# Para GDP
residuals_gdp = residuals(model_gdp)
high_limit_gdp = mean(residuals_gdp) + 2*sd(residuals_gdp)
low_limit_gdp = mean(residuals_gdp) - 2*sd(residuals_gdp)
emissions_clean_gdp = emissions[!residuals_gdp > high_limit_gdp & !residuals_gdp < low_limit_gdp, ]
model_gdp_clean = lm(CO2 ~ GDP, data = emissions_clean_gdp)
summary(model_gdp_clean)
##
## Call:
## lm(formula = CO2 ~ GDP, data = emissions_clean_gdp)
##
## Residuals:
## Min 1Q Median 3Q Max
## -513.18 -39.74 8.41 95.71 342.52
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.554e+01 4.719e+01 -0.541 0.594
## GDP 8.248e-04 2.676e-05 30.827 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 209.7 on 22 degrees of freedom
## Multiple R-squared: 0.9774, Adjusted R-squared: 0.9763
## F-statistic: 950.3 on 1 and 22 DF, p-value: < 2.2e-16
La comparación entre el modelo original y el ajustado después de eliminar los outliers para predecir las emisiones de CO2 usando el GDP muestra mejoras significativas: el R cuadrado aumentó de 0.9028 a 0.9774, indicando que el modelo ajustado ahora explica casi el 98% de la variabilidad en las emisiones, una mejora notable respecto al 90% del modelo original. El error estándar residual se redujo a más de la mitad, de 427.4 a 209.7, y el rango de residuales también se redujo considerablemente, lo que indica una distribución más uniforme de los errores y menos influencia de valores atípicos. Además, el coeficiente de GDP en el modelo ajustado aumentó ligeramente y mantuvo su alta significancia estadística, lo que sugiere una relación más precisa y fuerte entre el GDP y las emisiones de CO2. Estas mejoras subrayan la importancia de tratar los outliers en análisis de regresión para obtener estimaciones más confiables y precisas.
# Para perCapita
residuals_percapita = residuals(model_percapita)
high_limit_percapita = mean(residuals_percapita) + 2*sd(residuals_percapita)
low_limit_percapita = mean(residuals_percapita) - 2*sd(residuals_percapita)
emissions_clean_percapita = emissions[!residuals_percapita > high_limit_percapita & !residuals_percapita < low_limit_percapita, ]
model_percapita_clean = lm(CO2 ~ perCapita, data = emissions_clean_percapita)
summary(model_percapita_clean)
##
## Call:
## lm(formula = CO2 ~ perCapita, data = emissions_clean_percapita)
##
## Residuals:
## Min 1Q Median 3Q Max
## -402.3 -332.9 -244.9 141.9 1497.7
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 531.03357 287.50408 1.847 0.0776 .
## perCapita -0.00608 0.01546 -0.393 0.6978
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 536.4 on 23 degrees of freedom
## Multiple R-squared: 0.006676, Adjusted R-squared: -0.03651
## F-statistic: 0.1546 on 1 and 23 DF, p-value: 0.6978
El análisis de los modelos de regresión para predecir las emisiones de CO2 a partir del per cápita antes y después de eliminar los outliers muestra resultados interesantes, aunque no necesariamente mejora la predictibilidad del modelo. Inicialmente, el modelo mostraba una relación positiva leve entre el per cápita y las emisiones de CO2, aunque esta no era estadísticamente significativa (p = 0.173) y solo explicaba el 7.6% de la variabilidad de las emisiones. Después de eliminar los outliers, el coeficiente para el per cápita cambió a negativo, sugiriendo una posible disminución en las emisiones a medida que aumenta el per cápita, pero esta relación también resultó no ser estadísticamente significativa (p = 0.6978) y el modelo ajustado apenas explicó menos del 1% de la variabilidad en las emisiones.
data("anorexia")
# Calcular el cambio de peso
anorexia$WeightChange = anorexia$Postwt - anorexia$Prewt
# Agrupar por tipo de tratamiento
treatment_effectiveness = aggregate(WeightChange ~ Treat, data = anorexia, FUN = mean)
names(treatment_effectiveness) = c("Tratamiento", "Cambio de Peso")
print(treatment_effectiveness)
## Tratamiento Cambio de Peso
## 1 CBT 3.006897
## 2 Cont -0.450000
## 3 FT 7.264706
De estos resultados, FT es claramente el tratamiento más efectivo en términos de ganancia de peso promedio entre los pacientes con anorexia en esta muestra.
anorexia$WeightStatus = ifelse(anorexia$WeightChange > 0, "Ganaron",
ifelse(anorexia$WeightChange < 0, "Perdieron", "Sin Cambio"))
table(anorexia$WeightStatus)
##
## Ganaron Perdieron Sin Cambio
## 42 29 1
ggplot(data = as.data.frame(table(anorexia$WeightStatus)), aes(x = Var1, y = Freq, fill = Var1)) +
geom_bar(stat = "identity") +
labs(title = "Cambio de Peso en Pacientes con Anorexia",
x = "Estado del Peso",
y = "Número de Pacientes") +
scale_fill_brewer(palette = "Pastel1") +
theme_minimal() +
theme(legend.position = "none")
data("Melanoma")
melanoma_deaths = sum(Melanoma$status == 1)
other_causes_deaths = sum(Melanoma$status == 3)
## [1] "Fallecidos por Melanoma: 57"
## [1] "Fallecidos por otras causas: 14"
melanoma_presence = sum(Melanoma$ulcer == 1)
melanoma_absence = sum(Melanoma$ulcer == 0)
## [1] "Presencia de Melanoma: 90"
## [1] "Ausencia de Melanoma: 115"
Melanoma$death = ifelse(Melanoma$status != 2, 1, 0)
cor.test(Melanoma$thickness, Melanoma$death)
##
## Pearson's product-moment correlation
##
## data: Melanoma$thickness and Melanoma$death
## t = 4.7151, df = 203, p-value = 4.484e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.1851147 0.4325902
## sample estimates:
## cor
## 0.3141798
El análisis de correlación de Pearson entre el grosor del tumor y la muerte ha arrojado un coeficiente de correlación de 0.3142, con un valor p significativamente pequeño de aproximadamente 4.484e-06. Esto indica que existe una relación estadísticamente significativa entre el grosor del tumor y la muerte, aunque la correlación no es extremadamente fuerte.
El intervalo de confianza del 95% para el coeficiente de correlación va de aproximadamente 0.1851 a 0.4326, lo que implica que se puede estar razonablemente seguro de que la correlación positiva es diferente de cero y que hay una asociación positiva entre el grosor del tumor y el riesgo de muerte: a medida que aumenta el grosor del tumor, también parece aumentar el riesgo de muerte.
resultados = c(melanoma_presence, melanoma_absence)
nombres = c("Presencia", "Ausencia")
data_melanoma = data.frame(Estado = nombres, Cantidad = resultados)
ggplot(data_melanoma, aes(x = Estado, y = Cantidad, fill = Estado)) +
geom_bar(stat = "identity") +
labs(title = "Presencia y Ausencia de Melanoma",
x = "Estado",
y = "Número de Pacientes") +
theme_minimal() +
scale_fill_manual(values = c("Presencia" = "blue", "Ausencia" = "red"))
data("babyboom")
gender_counts = table(babyboom$gender)
names(gender_counts) = c("Niñas", "Niños")
## Niñas Niños
## 18 26
# 720 minutos = 12 horas
boys_first_12h = sum(babyboom$clock.time <= 720 & babyboom$gender == "boy")
girl_first_12h = sum(babyboom$clock.time <= 720 & babyboom$gender == "girl")
## [1] "Número de niños nacidos en las primeras 12 horas: 6"
## [1] "Número de niñas nacidos en las primeras 12 horas: 4"
## [1] "Total de nacidos en las primeras 12 horas: 10"
boys_under_3000g = sum(babyboom$wt < 3000 & babyboom$gender == "boy")
girls_under_3000g = sum(babyboom$wt < 3000 & babyboom$gender == "girl")
## [1] "Número de niños nacidos con un peso inferior a 3000 gramos: 4"
## [1] "Número de niñas nacidos con un peso inferior a 3000 gramos: 5"
babyboom$low_weight = ifelse(babyboom$wt < 3000, "<3000g", ">=3000g")
table(babyboom$gender, babyboom$low_weight)
##
## <3000g >=3000g
## girl 5 13
## boy 4 22
# Calcular los promedios de peso total, de niños y de niñas
prom_total = mean(babyboom$wt)
prom_boys = mean(babyboom$wt[babyboom$gender == 'boy'])
prom_girls = mean(babyboom$wt[babyboom$gender == 'girl'])
average_weights = data.frame(
Categoria = c('Total', 'Niños', 'Niñas'),
Peso_promedio = c(prom_total, prom_boys, prom_girls)
)
print(average_weights)
## Categoria Peso_promedio
## 1 Total 3275.955
## 2 Niños 3375.308
## 3 Niñas 3132.444
ggplot(average_weights, aes(x = Categoria, y = Peso_promedio, fill = Categoria)) +
geom_bar(stat = "identity") +
labs(title = "Peso medio de los bebés", x = "Categoria", y = "Peso medio (gramos)") +
scale_fill_brewer(palette = "Pastel1") +
theme_minimal()
data("Aids2")
contagios_estado = table(Aids2$state)
print(contagios_estado)
##
## NSW Other QLD VIC
## 1780 249 226 588
number_fall = sum(Aids2$status == "D")
## [1] "Número de fallecidos: 1761"
table(Aids2$sex, Aids2$T.categ)
##
## hs hsid id het haem blood mother other
## F 1 0 20 20 0 37 4 7
## M 2464 72 28 21 46 57 3 63
transmission_counts = table(Aids2$T.categ)
transmission_df = as.data.frame(transmission_counts)
names(transmission_df) = c("transmision", "Count")
ggplot(transmission_df, aes(x = "", y = Count, fill = transmision)) +
geom_bar(width = 1, stat = "identity") +
coord_polar(theta = "y") +
labs(title = "Distribución de Tipos de Transmisión de SIDA",
x = NULL,
y = NULL) +
theme_void() +
scale_fill_brewer(palette = "Pastel1") +
theme(legend.title = element_blank())
data("crime")
total_crime_1983 = round(sum(crime$y1983))
total_crime_1993 = round(sum(crime$y1993))
## [1] "Total de crímenes en 1983: 22313"
## [1] "Total de crímenes en 1993: 30948"
## [1] "La tasa total de crímenes en 1993 fue mayor que en 1983."
crime = cbind(state = rownames(crime), crime)
max_crime_1983 = max(crime$y1983, na.rm = TRUE)
state_max_1983 = crime$state[crime$y1983 == max_crime_1983]
max_crime_1993 = max(crime$y1993, na.rm = TRUE)
state_max_1993 = crime$state[crime$y1993 == max_crime_1993]
## El Estado con mayor índice de delincuencia en 1983 es: DC con 1985.4
## El Estado con mayor índice de delincuencia en 1993 es: DC con 2832.8
crime = crime %>%
mutate(total_crime = y1983 + y1993)
state_with_max_crime = crime %>%
filter(total_crime == max(total_crime)) %>%
select(state, total_crime)
print(state_with_max_crime)
## state total_crime
## DC DC 4818.2
crime_long = crime %>%
pivot_longer(cols = starts_with("y"), names_to = "Año", values_to = "rate")
ggplot(crime_long, aes(x = state, y = rate, fill = Año)) +
geom_bar(stat = "identity", position = "dodge") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.4)) +
labs(title = "Tasas de Crimen por Estado y Año",
x = "Estado",
y = "Tasa de Crimen") +
scale_fill_brewer(palette = "Set1")+
theme(plot.title = element_text(hjust = 0.5), # Centra el título
axis.title = element_text(face = "bold"), # Títulos de ejes en negrita
legend.position = "bottom")