library(MASS)
library(UsingR)
## Loading required package: HistData
## Loading required package: Hmisc
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
## 
##     format.pval, units

2.1 A

# a) Número de conjuntos de datos en el paquete
num_datasets <- length(data(package="UsingR")$results[, "Item"])

# Imprimir el número de conjuntos de datos
cat("El paquete UsingR contiene", num_datasets, "conjuntos de datos.\n")
## El paquete UsingR contiene 123 conjuntos de datos.

B

# Gráficos de histograma y boxplot para los conjuntos de datos "bumpers", "firstchi" y "math"
par(mfrow=c(3, 2)) # Organizar las gráficas en 3 filas y 2 columnas

# Histograma para "bumpers"
hist(bumpers, main="Histograma - bumpers")

# Boxplot para "bumpers"
boxplot(bumpers, main="Boxplot - bumpers")

# Histograma para "firstchi"
hist(firstchi, main="Histograma - firstchi")

# Boxplot para "firstchi"
boxplot(firstchi, main="Boxplot - firstchi")

# Histograma para "math"
hist(math, main="Histograma - math")

# Boxplot para "math"
boxplot(math, main="Boxplot - math")

C

#  Estimación visual y cálculo de medias, medianas y desviaciones estándar
# Estimación visual
cat("Estimación visual de los datos:\n")
## Estimación visual de los datos:
print(summary(bumpers))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     618    1478    2129    2122    2774    3298
print(summary(firstchi))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   14.00   20.00   23.00   23.98   26.00   42.00
print(summary(math))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   38.00   49.00   54.00   54.90   61.75   75.00
# Cálculo de medias, medianas y desviaciones estándar
cat("\nCálculos estadísticos:\n")
## 
## Cálculos estadísticos:
cat("Media de bumpers:", mean(bumpers), "\n")
## Media de bumpers: 2122.478
cat("Mediana de bumpers:", median(bumpers), "\n")
## Mediana de bumpers: 2129
cat("Desviación estándar de bumpers:", sd(bumpers), "\n")
## Desviación estándar de bumpers: 798.4574
cat("Media de firstchi:", mean(firstchi), "\n")
## Media de firstchi: 23.97701
cat("Mediana de firstchi:", median(firstchi), "\n")
## Mediana de firstchi: 23
cat("Desviación estándar de firstchi:", sd(firstchi), "\n")
## Desviación estándar de firstchi: 6.254258
cat("Media de math:", mean(math), "\n")
## Media de math: 54.9
cat("Mediana de math:", median(math), "\n")
## Mediana de math: 54
cat("Desviación estándar de math:", sd(math), "\n")
## Desviación estándar de math: 9.746264

2.2 A

# a) Representación de los datos mediante histograma y gráfico de densidad
# Histograma
hist(brightness, main="Histograma - brightness", xlab="Brillo", ylab="Frecuencia", col="lightblue", border="black")
# Gráfico de densidad superpuesto
lines(density(brightness), col="red", lwd=2)

B

# Representación de los datos mediante un diagrama de caja
boxplot(brightness, main="Diagrama de Caja - brightness", col="lightgreen")

# Determinar si hay outliers y encontrar el segundo menor outlier
outliers <- boxplot(brightness)$out

if(length(outliers) > 1) {
  outliers_sorted <- sort(outliers)
  second_min_outlier <- outliers_sorted[2]
  cat("El segundo menor outlier es:", second_min_outlier, "\n")
} else {
  cat("No hay suficientes outliers para encontrar el segundo menor.\n")
}
## El segundo menor outlier es: 2.28

C

# Crear una nueva variable brightness.sin con los valores que no sean atípicos
Q1 <- quantile(brightness, 0.25)
Q3 <- quantile(brightness, 0.75)
IQR <- Q3 - Q1

brightness.sin <- brightness[brightness > Q1 - 1.5 * IQR & brightness < Q3 + 1.5 * IQR]

# Resumen de la nueva variable
summary(brightness.sin)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   5.570   7.750   8.500   8.423   9.090  11.260

2.3 A

# Carga del paquete MASS
library(MASS)

# Carga de la base de datos UScereal
data("UScereal")

# a) Tipo de datos de cada variable
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 ...

B

# Investigar algunas asociaciones entre las variables
# i. La relación entre fat y vitamins
plot(UScereal$fat, UScereal$vitamins, xlab="Fat", ylab="Vitamins", main="Fat vs Vitamins")

# ii. La relación entre fat y shelf
boxplot(fat ~ shelf, data=UScereal, xlab="Shelf", ylab="Fat", main="Fat vs Shelf")

# iii. La relación entre carbohydrates y sugars
plot(UScereal$carbo, UScereal$sugars, xlab="Carbohydrates", ylab="Sugars", main="Carbohydrates vs Sugars")

# iv. La relación entre fibre y sugars
plot(UScereal$fibre, UScereal$sugars, xlab="Fibre", ylab="Sugars", main="Fibre vs Sugars")

# v. La relación entre fibre y shelf
boxplot(fibre ~ shelf, data=UScereal, xlab="Shelf", ylab="Fibre", main="Fibre vs Shelf")

# vi. La relación entre sodium y sugars
plot(UScereal$sodium, UScereal$sugars, xlab="Sodium", ylab="Sugars", main="Sodium vs Sugars")

2.4 A

# Carga del paquete MASS
library(MASS)

# Carga de la base de datos mammals
data("mammals")

# a) Correlación lineal entre las variables peso corporal y peso del cerebro
correlation <- cor(mammals$body, mammals$brain)
cat("La correlación lineal entre el peso corporal y el peso del cerebro es:", correlation, "\n")
## La correlación lineal entre el peso corporal y el peso del cerebro es: 0.9341638

B

#  Representación de los datos mediante la instrucción plot
plot(mammals$body, mammals$brain, xlab="Peso Corporal", ylab="Peso del Cerebro", main="Relación entre Peso Corporal y Peso del Cerebro")

C

 # c) Transformación de los datos mediante la función log y repetición del estudio
log_body <- log(mammals$body)
log_brain <- log(mammals$brain)

# Correlación lineal con los datos transformados
correlation_log <- cor(log_body, log_brain)
cat("La correlación lineal entre el logaritmo del peso corporal y el logaritmo del peso del cerebro es:", correlation_log, "\n")
## La correlación lineal entre el logaritmo del peso corporal y el logaritmo del peso del cerebro es: 0.9595748
# Representación de los datos transformados
plot(log_body, log_brain, xlab="Logaritmo del Peso Corporal", ylab="Logaritmo del Peso del Cerebro", main="Relación entre Logaritmo del Peso Corporal y Logaritmo del Peso del Cerebro")

2.5 A

# Carga del paquete UsingR y enlace de la base de datos emissions
library(UsingR)
data("emissions")

# a) Estudio de la relación entre las variables GDP, perCapita y CO2
correlation_matrix <- cor(emissions[, c("GDP", "perCapita", "CO2")])
print(correlation_matrix)
##                 GDP perCapita       CO2
## GDP       1.0000000 0.4325303 0.9501753
## perCapita 0.4325303 1.0000000 0.2757962
## CO2       0.9501753 0.2757962 1.0000000

B

# b) Construcción de modelos de regresión para predecir las emisiones de CO2
# Modelo de regresión utilizando GDP
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
# Modelo de regresión utilizando perCapita
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
# Modelo de regresión utilizando GDP y perCapita
model_GDP_perCapita <- lm(CO2 ~ GDP + perCapita, data=emissions)
summary(model_GDP_perCapita)
## 
## Call:
## lm(formula = CO2 ~ GDP + perCapita, data = emissions)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1037.3  -167.4    10.8   153.2  1052.0 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.100e+02  2.044e+02   2.495   0.0202 *  
## GDP          8.406e-04  5.198e-05  16.172 4.68e-14 ***
## perCapita   -3.039e-02  1.155e-02  -2.631   0.0149 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 382.8 on 23 degrees of freedom
## Multiple R-squared:  0.9253, Adjusted R-squared:  0.9188 
## F-statistic: 142.5 on 2 and 23 DF,  p-value: 1.102e-13

C

#  Identificación de outliers y ajuste del modelo sin ellos
# Identificación de outliers en el modelo de regresión utilizando GDP y perCapita
outliers <- boxplot(model_GDP_perCapita$residuals, plot=FALSE)$out

# Eliminación de outliers
emissions_clean <- emissions[-which(model_GDP_perCapita$residuals %in% outliers), ]

# Ajuste del modelo sin outliers
model_GDP_perCapita_clean <- lm(CO2 ~ GDP + perCapita, data=emissions_clean)
summary(model_GDP_perCapita_clean)
## 
## Call:
## lm(formula = CO2 ~ GDP + perCapita, data = emissions_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -469.70  -50.26   30.88   79.67  348.27 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.917e+02  1.160e+02   1.653   0.1132    
## GDP          8.490e-04  2.774e-05  30.603   <2e-16 ***
## perCapita   -1.307e-02  6.453e-03  -2.026   0.0557 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 196.3 on 21 degrees of freedom
## Multiple R-squared:  0.9811, Adjusted R-squared:  0.9793 
## F-statistic: 544.3 on 2 and 21 DF,  p-value: < 2.2e-16

2.6 A

# Carga del paquete MASS
library(MASS)

# Carga de la base de datos anorexia
data("anorexia")

# a) Determinar el tipo de tratamiento más efectivo
# Calcular el promedio de cambio de peso para cada tipo de tratamiento
avg_weight_change <- aggregate(anorexia$Postwt - anorexia$Prewt, by=list(anorexia$Treat), FUN=mean)

# Encontrar el tratamiento con el mayor promedio de cambio de peso
most_effective_treatment <- avg_weight_change[which.max(avg_weight_change$x), "Group.1"]
cat("El tipo de tratamiento más efectivo es:", most_effective_treatment, "\n")
## El tipo de tratamiento más efectivo es: 3

B

# b) Determinar cuántos pacientes ganaron y perdieron peso
# Contar el número de pacientes que ganaron peso (Postwt > Prewt)
patients_gained_weight <- sum(anorexia$Postwt > anorexia$Prewt)

# Contar el número de pacientes que perdieron peso (Postwt < Prewt)
patients_lost_weight <- sum(anorexia$Postwt < anorexia$Prewt)

cat("Número de pacientes que ganaron peso:", patients_gained_weight, "\n")
## Número de pacientes que ganaron peso: 42
cat("Número de pacientes que perdieron peso:", patients_lost_weight, "\n")
## Número de pacientes que perdieron peso: 29

C

# c) Graficar el número de pacientes que ganaron y perdieron peso
barplot(c(patients_gained_weight, patients_lost_weight), 
        names.arg=c("Ganaron peso", "Perdieron peso"),
        xlab="Resultado", ylab="Número de pacientes",
        col=c("green", "red"),
        main="Ganancia y pérdida de peso en pacientes con anorexia")

2.7 A

# Carga del paquete MASS
library(MASS)

# Carga de la base de datos Melanoma
data("Melanoma")

# a) Obtener el número de fallecidos por Melanoma y otras causas
deaths_melanoma <- sum(Melanoma$Status == "dead" & Melanoma$Type == "malignant melanoma")
deaths_other_causes <- sum(Melanoma$Status == "dead" & Melanoma$Type != "malignant melanoma")
cat("Número de fallecidos por Melanoma:", deaths_melanoma, "\n")
## Número de fallecidos por Melanoma: 0
cat("Número de fallecidos por otras causas:", deaths_other_causes, "\n")
## Número de fallecidos por otras causas: 0

B

#  Determinar la presencia y ausencia de Melanoma
presence_melanoma <- sum(Melanoma$Type == "malignant melanoma")
absence_melanoma <- nrow(Melanoma) - presence_melanoma

cat("Número de pacientes con Melanoma:", presence_melanoma, "\n")
## Número de pacientes con Melanoma: 0
cat("Número de pacientes sin Melanoma:", absence_melanoma, "\n")
## Número de pacientes sin Melanoma: 205

C

# Convertir el indicador de muerte a tipo numérico
death_indicator <- as.numeric(Melanoma$Status == "dead")

# Calcular la correlación entre el tamaño del tumor y el indicador de muerte
correlation_tumor_size_death <- cor(as.numeric(Melanoma$Thick), death_indicator)

cat("Correlación entre tamaño de tumor y muerte:", correlation_tumor_size_death, "\n")
## Correlación entre tamaño de tumor y muerte: NA

D

# Graficar la presencia y ausencia de Melanoma
barplot(c(presence_melanoma, absence_melanoma), 
        names.arg=c("Con Melanoma", "Sin Melanoma"),
        xlab="Condición", ylab="Número de pacientes",
        col=c("blue", "orange"),
        main="Presencia y ausencia de Melanoma")

2.8 A

# Carga del paquete UsingR
library(UsingR)

# Carga de la base de datos babyboom
data("babyboom")

# a) Número de niños y niñas
num_ninos <- sum(babyboom$gender == "M")
num_ninas <- sum(babyboom$gender == "F")

cat("Número de niños:", num_ninos, "\n")
## Número de niños: 0
cat("Número de niñas:", num_ninas, "\n")
## Número de niñas: 0

B

#  Cantidad de niños nacidos en las primeras 12 horas
num_ninos_primeras_12h <- sum(babyboom$gender[1:24] == "M")

cat("Cantidad de niños nacidos en las primeras 12 horas:", num_ninos_primeras_12h, "\n")
## Cantidad de niños nacidos en las primeras 12 horas: 0

C

#  Niños nacidos por debajo de 3000g
num_ninos_bajo_3000g <- sum(babyboom$weight[babyboom$gender == "M"] < 3000)

cat("Cantidad de niños nacidos por debajo de 3000g:", num_ninos_bajo_3000g, "\n")
## Cantidad de niños nacidos por debajo de 3000g: 0

D

#  Relación entre peso por debajo de 3000g y sexo
tabla_sexo_peso <- table(babyboom$gender[babyboom$weight < 3000])
cat("Relación entre peso por debajo de 3000g y sexo:\n", tabla_sexo_peso, "\n")
## Relación entre peso por debajo de 3000g y sexo:
##  0 0

E

# Gráfico del promedio de pesos total, de niños y de niñas
library(ggplot2)

# Calcular los promedios
promedio_total <- mean(babyboom$weight)
## Warning in mean.default(babyboom$weight): argument is not numeric or logical:
## returning NA
promedio_ninos <- mean(babyboom$weight[babyboom$gender == "M"])
## Warning in mean.default(babyboom$weight[babyboom$gender == "M"]): argument is
## not numeric or logical: returning NA
promedio_ninas <- mean(babyboom$weight[babyboom$gender == "F"])
## Warning in mean.default(babyboom$weight[babyboom$gender == "F"]): argument is
## not numeric or logical: returning NA
# Crear un data frame con los promedios
df_promedios <- data.frame(Grupo = c("Total", "Niños", "Niñas"),
                           Promedio = c(promedio_total, promedio_ninos, promedio_ninas))

# Graficar el promedio de pesos
ggplot(df_promedios, aes(x=Grupo, y=Promedio, fill=Grupo)) +
  geom_bar(stat="identity") +
  labs(title="Promedio de pesos",
       x="Grupo",
       y="Promedio de peso (g)") +
  theme_minimal()
## Warning: Position guide is perpendicular to the intended axis.
## ℹ Did you mean to specify a different guide `position`?
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_bar()`).

2.9 A

# Carga del paquete UsingR
library(UsingR)

# Carga de la base de datos Aids2
data("Aids2")

# Número de contagios por estado
num_contagios_estado <- table(Aids2$state)

cat("Número de contagios por estado:\n", num_contagios_estado, "\n")
## Número de contagios por estado:
##  1780 249 226 588

B

#  Número de fallecidos
#num_fallecidos <- sum(Aids2$death)

# cat("Número de fallecidos:", num_fallecidos, "\n")
# Número de fallecidos
num_fallecidos <- sum(Aids2$fallecido == "Sí")

cat("Número de fallecidos:", num_fallecidos, "\n")
## Número de fallecidos: 0

C

# Verificamos el patrón de valores faltantes en la base de datos 'Aids2'
summary(Aids2)
##    state      sex           diag           death       status      T.categ    
##  NSW  :1780   F:  89   Min.   : 8302   Min.   : 8469   A:1082   hs     :2465  
##  Other: 249   M:2754   1st Qu.:10163   1st Qu.:10672   D:1761   blood  :  94  
##  QLD  : 226            Median :10665   Median :11235            hsid   :  72  
##  VIC  : 588            Mean   :10584   Mean   :10990            other  :  70  
##                        3rd Qu.:11103   3rd Qu.:11504            id     :  48  
##                        Max.   :11503   Max.   :11504            haem   :  46  
##                                                                 (Other):  48  
##       age       
##  Min.   : 0.00  
##  1st Qu.:30.00  
##  Median :37.00  
##  Mean   :37.41  
##  3rd Qu.:43.00  
##  Max.   :82.00  
## 
# Creamos subconjuntos de 'Aids2' sin valores faltantes en las variables 'sexo' y 'transmision'
datos_sexo <- Aids2[!is.na(Aids2$sexo), ]
datos_transmision <- Aids2[!is.na(Aids2$transmision), ]

# Comprobamos si la cantidad de filas en ambos subconjuntos es la misma
if (nrow(datos_sexo) != nrow(datos_transmision)) {
  # Si hay un desajuste, realizamos un análisis de casos completos
  # Eliminamos filas con valores faltantes en cualquier variable
  datos <- Aids2[complete.cases(Aids2), ]

  # Creamos la tabla 'relacion_sexo_transmision' a partir del subconjunto limpio 'datos'
  relacion_sexo_transmision <- table(datos$sexo, datos$transmision)

  # Informamos que se realizó un análisis de casos completos
  print("Análisis de casos completos realizado debido al patrón de valores faltantes.")
} else {
  # Si las longitudes coinciden, creamos la tabla directamente con los subconjuntos limpios
  relacion_sexo_transmision <- table(datos_sexo$sexo, datos_transmision$transmision)
}

# Imprimimos la tabla 'relacion_sexo_transmision'
print(relacion_sexo_transmision)
## < table of extent 0 x 0 >

D

# Carga del paquete UsingR y de la base de datos Aids2
library(UsingR)
data("Aids2")

# Crear una tabla de frecuencias de los tipos de transmisión
frecuencia_transmision <- table(Aids2$transmision)

# Filtrar los nombres de los tipos de transmisión para asegurar que sean válidos y no estén vacíos
nombres_transmision <- names(frecuencia_transmision)
nombres_transmision <- nombres_transmision[nombres_transmision != ""]  # Eliminar nombres vacíos

# Graficar los tipos de transmisión solo si hay nombres válidos
if (length(nombres_transmision) > 0) {
  barplot(frecuencia_transmision, 
          main = "Tipos de Transmisión de SIDA",
          xlab = "Tipo de Transmisión",
          ylab = "Frecuencia",
          col = "skyblue",
          las = 2,  # Rotar etiquetas del eje x si son largas
          names.arg = nombres_transmision)  # Establecer nombres de los tipos de transmisión en el eje x
} else {
  cat("No hay nombres válidos de tipos de transmisión para graficar.\n")
}
## No hay nombres válidos de tipos de transmisión para graficar.

2.10 A

# Carga de la base de datos 'crime' desde el paquete UsingR
library(UsingR)
data("crime")

# Calcular la suma de las tasas de crimen en 1983 y 1993
total_1983 <- sum(crime$y1983)
total_1993 <- sum(crime$y1993)

# Comparar las tasas totales
if (total_1993 > total_1983) {
  cat("La tasa total en 1993 fue mayor que en 1983.\n")
} else if (total_1993 < total_1983) {
  cat("La tasa total en 1993 fue menor que en 1983.\n")
} else {
  cat("La tasa total en 1993 fue igual a la de 1983.\n")
}
## La tasa total en 1993 fue mayor que en 1983.

B

# Encontrar el estado con la mayor tasa de crimen en 1983
estado_max_1983 <- crime$Estado[which.max(crime$y1983)]
cat("El estado con la mayor tasa de crimen en 1983 fue:", estado_max_1983, "\n")
## El estado con la mayor tasa de crimen en 1983 fue:
# Encontrar el estado con la mayor tasa de crimen en 1993
estado_max_1993 <- crime$Estado[which.max(crime$y1993)]
cat("El estado con la mayor tasa de crimen en 1993 fue:", estado_max_1993, "\n")
## El estado con la mayor tasa de crimen en 1993 fue:

C

# Carga de la base de datos 'crime' desde el paquete UsingR
library(UsingR)
data("crime")

# Calcular la tasa acumulada de crimen para cada estado
crime$Total <- crime$y1983 + crime$y1993

# Encontrar el estado con la mayor tasa acumulada de crimen
estado_max_acumulado <- crime$Estado[which.max(crime$Total)]

# Verificar si la respuesta está vacía o no
if (length(estado_max_acumulado) == 0) {
  cat("No se encontró un estado con la mayor tasa de crimen acumulado en ambos años.\n")
} else {
  cat("El estado con la mayor tasa de crimen acumulado en ambos años fue:", estado_max_acumulado, "\n")
}
## No se encontró un estado con la mayor tasa de crimen acumulado en ambos años.

D

# Graficar los estados con la mayor tasa de crimen en 1983 y 1993
barplot(c(crime$y1983[which.max(crime$y1983)], crime$y1993[which.max(crime$y1993)]),
        names.arg = c("1983", "1993"),
        main = "Mayor tasa de crimen por año",
        xlab = "Año",
        ylab = "Tasa de crimen",
        col = c("skyblue", "lightgreen"))

```