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

R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

#Ejercicio 2.1

# 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.

Including Plots

You can also embed plots, for example:

#Ejercicio 2.1
#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")

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

#Ejercicio 2.1
#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
#Ejercicio 2.2 a)#Generar datos de ejemplo (reemplaza esto con tus propios datos)
set.seed(123)
datos <- rnorm(1000, mean = 10, sd = 2)

# Cargar la librería necesaria para gráficos
library(ggplot2)

# Crear un histograma
histograma <- ggplot(data.frame(x = datos), aes(x = x)) +
  geom_histogram(aes(y = ..density..), fill = "skyblue", color = "black", bins = 30) +
  geom_density(alpha = 0.5, fill = "orange") +
  labs(title = "Histograma y gráfico de densidad", x = "Valores", y = "Densidad")

# Mostrar el gráfico
print(histograma)
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

#Ejercicio 2.2 b)# Generar datos de ejemplo (reemplaza esto con tus propios datos)
set.seed(123)
datos <- c(rnorm(50, mean = 10, sd = 2), 25)  # Introducir un outlier

# Crear el diagrama de caja
boxplot(datos, main = "Diagrama de caja", ylab = "Valores")

# Identificar los outliers
outliers <- boxplot.stats(datos)$out

if (length(outliers) > 0) {
  cat("Los outliers son:", outliers, "\n")
  
  # Ordenar los outliers
  outliers_ordenados <- sort(outliers)
  
  # Segundo menor outlier
  segundo_menor_outlier <- outliers_ordenados[2]
  cat("El segundo menor outlier es:", segundo_menor_outlier)
} else {
  cat("No hay outliers en los datos.")
}
## Los outliers son: 25 
## El segundo menor outlier es: NA
#Ejercicio 2.2 c)#  Generar datos de ejemplo (reemplaza esto con tus propios datos)
set.seed(123)
datos <- rnorm(100, mean = 10, sd = 2)

# Calcular los estadísticos del diagrama de caja
boxplot_stats <- boxplot.stats(datos)

# Obtener los valores de la primera bisagra (bisagra inferior) y la cuarta bisagra (bisagra superior)
primera_bisagra <- boxplot_stats$stats[2]
cuarta_bisagra <- boxplot_stats$stats[4]

# Filtrar los datos para conservar solo los que están por encima de la primera bisagra y por debajo de la cuarta
brightness.sin <- datos[datos > primera_bisagra & datos < cuarta_bisagra]

# Imprimir los resultados
cat("La primera bisagra es:", primera_bisagra, "\n")
## La primera bisagra es: 9.006645
cat("La cuarta bisagra es:", cuarta_bisagra, "\n")
## La cuarta bisagra es: 11.39
cat("La nueva variable brightness.sin contiene los valores que no son considerados atípicos.")
## La nueva variable brightness.sin contiene los valores que no son considerados atípicos.
#Ejercicio 2.3 a)
# Cargar el paquete MASS
library(MASS)

# Ver la estructura de la base de datos 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 ...
#Ejercicio 2.3 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")

#Ejercicio 2.4 a)
# Datos de ejemplo (puedes reemplazarlos con tus propios datos)
peso_cerebro <- c(120, 130, 140, 150, 160)  # Peso del cerebro en gramos
peso_corporal <- c(50, 55, 60, 65, 70)      # Peso corporal en kilogramos

# Calcula la relación entre el peso del cerebro y el peso corporal
relacion_peso <- peso_cerebro / peso_corporal

# Muestra los resultados
cat("Relación entre el peso del cerebro y el peso corporal:\n")
## Relación entre el peso del cerebro y el peso corporal:
print(relacion_peso)
## [1] 2.400000 2.363636 2.333333 2.307692 2.285714
#Ejercicio 2.4b )

# Ejemplo de datos (puedes reemplazar estos valores con tus propios datos)
peso_corporal <- c(2, 5, 6, 3, 4)  # Peso corporal en kilogramos
peso_cerebro <- c(1, 7, 3, 2, 1)  # Peso del cerebro en gramos

# Crear el gráfico de dispersión
plot(peso_corporal, peso_cerebro,
     main="Relación entre Peso Corporal y Peso del Cerebro",
     xlab="Peso Corporal (kg)",
     ylab="Peso del Cerebro (g)",
     pch=19, col="blue")

# Agregar una línea de regresión (opcional)
abline(lm(peso_cerebro ~ peso_corporal), col="red")

# Ejercicio 2.4 c)

# Ejemplo de datos (puedes reemplazar estos valores con tus propios datos)
peso_corporal <- c(2, 5, 6, 3, 4)  # Peso corporal en kilogramos
peso_cerebro <- c(1, 7, 3, 2, 1)  # Peso del cerebro en gramos

# Transformar los datos mediante la función log
log_peso_corporal <- log(peso_corporal)
log_peso_cerebro <- log(peso_cerebro)

# Crear el gráfico de dispersión con los datos transformados
plot(log_peso_corporal, log_peso_cerebro,
     main="Relación entre log(Peso Corporal) y log(Peso del Cerebro)",
     xlab="log(Peso Corporal)",
     ylab="log(Peso del Cerebro)",
     pch=19, col="blue")

# Agregar una línea de regresión (opcional)
abline(lm(log_peso_cerebro ~ log_peso_corporal), col="red")

#Ejercicio 2.5 a)

# Instala o carga el paquete UsingR (si aún no lo tienes instalado)
# install.packages("UsingR")
library(UsingR)

# Carga la base de datos emissions
data(emissions)

# Explora la estructura de la base de datos
str(emissions)
## 'data.frame':    26 obs. of  3 variables:
##  $ GDP      : num  8083000 3080000 1740000 1320000 1242000 ...
##  $ perCapita: num  29647 24409 21197 22381 21010 ...
##  $ CO2      : num  6750 1320 1740 550 675 540 2000 700 370 480 ...
# Visualiza las primeras filas de la base de datos
head(emissions)
##                   GDP perCapita  CO2
## UnitedStates  8083000     29647 6750
## Japan         3080000     24409 1320
## Germany       1740000     21197 1740
## France        1320000     22381  550
## UnitedKingdom 1242000     21010  675
## Italy         1240000     21856  540
# Estudia la relación entre las variables GDP, perCapita y CO2
# Puedes usar gráficos de dispersión, correlaciones u otros métodos

# Ejemplo: Gráfico de dispersión entre GDP y CO2
plot(emissions$GDP, emissions$CO2,
     main="Relación entre GDP y Emisiones de CO2",
     xlab="GDP (Producto Interno Bruto)",
     ylab="CO2 (Emisiones de CO2)",
     pch=19, col="blue")

# Ejemplo: Correlación entre perCapita y CO2
cor(emissions$perCapita, emissions$CO2)
## [1] 0.2757962
# También puedes ajustar modelos de regresión para predecir las emisiones de CO2
# a partir de las otras variables.

# ¡Explora más y diviértete analizando los datos! 📊🌍👍
#Ejercicio 2.5 b)

# Carga la base de datos emissions (si aún no lo has hecho)
library(UsingR)
data(emissions)

# Crear un modelo de regresión lineal
model <- lm(CO2 ~ GDP + perCapita, data = emissions)

# Resumen del modelo
summary(model)
## 
## 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
# Coeficientes del modelo
coef(model)
##   (Intercept)           GDP     perCapita 
##  5.099797e+02  8.406227e-04 -3.039138e-02
# Predicciones para nuevas observaciones
new_data <- data.frame(GDP = c(5000, 8000), perCapita = c(50, 80))
predicted_CO2 <- predict(model, newdata = new_data)

# Visualización de los resultados
plot(emissions$GDP, emissions$CO2, pch = 19, col = "blue",
     main = "Relación entre GDP y Emisiones de CO2",
     xlab = "GDP (Producto Interno Bruto)",
     ylab = "CO2 (Emisiones de CO2)")
abline(model, col = "red", lwd = 2)
## Warning in abline(model, col = "red", lwd = 2): only using the first two of 3
## regression coefficients
points(new_data$GDP, predicted_CO2, pch = 19, col = "green")
legend("topright", legend = c("Datos observados", "Línea de regresión", "Predicciones"),
       col = c("blue", "red", "green"), pch = 19)

#Ejercicio 2.5 c)
# Carga la base de datos emissions (si aún no lo has hecho)
library(UsingR)
data(emissions)

# Crea un modelo de regresión lineal con los outliers
model_with_outliers <- lm(CO2 ~ GDP + perCapita, data = emissions)

# Identifica los outliers utilizando la distancia de Cook
outliers <- which(cooks.distance(model_with_outliers) > 4/nrow(emissions))

# Imprime los índices de los outliers
cat("Índices de los outliers:", outliers, "\n")
## Índices de los outliers: 1 2 7
# Elimina los outliers del conjunto de datos
emissions_no_outliers <- emissions[-outliers, ]

# Crea un nuevo modelo sin los outliers
model_no_outliers <- lm(CO2 ~ GDP + perCapita, data = emissions_no_outliers)

# Resumen del nuevo modelo
summary(model_no_outliers)
## 
## Call:
## lm(formula = CO2 ~ GDP + perCapita, data = emissions_no_outliers)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -357.01  -72.86  -17.64   44.02  519.82 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.056e+02  1.123e+02   1.831   0.0821 .  
## GDP          7.151e-04  8.823e-05   8.106 9.51e-08 ***
## perCapita   -1.083e-02  6.385e-03  -1.697   0.1053    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 189.5 on 20 degrees of freedom
## Multiple R-squared:  0.7699, Adjusted R-squared:  0.7469 
## F-statistic: 33.45 on 2 and 20 DF,  p-value: 4.166e-07
# Coeficientes del nuevo modelo
coef(model_no_outliers)
##   (Intercept)           GDP     perCapita 
##  2.055512e+02  7.151113e-04 -1.083457e-02
# Predicciones para nuevas observaciones sin outliers
new_data_no_outliers <- data.frame(GDP = c(5000, 8000), perCapita = c(50, 80))
predicted_CO2_no_outliers <- predict(model_no_outliers, newdata = new_data_no_outliers)

# Visualiza los resultados sin outliers
plot(emissions_no_outliers$GDP, emissions_no_outliers$CO2, pch = 19, col = "blue",
     main = "Relación entre GDP y Emisiones de CO2 (Sin Outliers)",
     xlab = "GDP (Producto Interno Bruto)",
     ylab = "CO2 (Emisiones de CO2)")
abline(model_no_outliers, col = "red", lwd = 2)
## Warning in abline(model_no_outliers, col = "red", lwd = 2): only using the
## first two of 3 regression coefficients
points(new_data_no_outliers$GDP, predicted_CO2_no_outliers, pch = 19, col = "green")
legend("topright", legend = c("Datos Observados", "Línea de Regresión", "Predicciones"),
       col = c("blue", "red", "green"), pch = 19)

#Ejercicio 2.6 a)
# Instala el paquete MASS si aún no lo has instalado
if (!requireNamespace("MASS", quietly = TRUE)) {
  install.packages("MASS")
}

# Carga el paquete MASS
library(MASS)

# Supongamos que 'anorexia' es tu marco de datos
# Crearé un marco de datos de ejemplo para demostración
anorexia <- data.frame(
  Treat = c("Cont", "CBT", "FT"),
  Prewt = c(120, 110, 115),
  Postwt = c(130, 125, 120)
)

# Ajusta un modelo lineal
model <- lm(Postwt ~ Treat + Prewt, data = anorexia)

# Realiza un análisis de varianza (ANOVA) para comparar los tratamientos
anova_result <- anova(model)
## Warning in anova.lm(model): ANOVA F-tests on an essentially perfect fit are
## unreliable
# Imprime los resultados
print(anova_result)
## Analysis of Variance Table
## 
## Response: Postwt
##           Df Sum Sq Mean Sq F value Pr(>F)
## Treat      2     50      25     NaN    NaN
## Residuals  0      0     NaN
# Si el valor p es menor que el nivel de significancia (por ejemplo, 0.05),
# podemos concluir que hay diferencias significativas entre los tratamientos.

# También puedes calcular estadísticas descriptivas para cada tratamiento:
summary(anorexia$Postwt)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   120.0   122.5   125.0   125.0   127.5   130.0
#Ejercicio 2.6 b)

# Supongamos que 'anorexia' es tu marco de datos con las columnas 'Treat', 'Prewt' y 'Postwt'
# Crearé un marco de datos de ejemplo para demostración
anorexia <- data.frame(
  Treat = c("Cont", "CBT", "FT"),
  Prewt = c(120, 110, 115),
  Postwt = c(130, 125, 120)
)

# Calcula la diferencia de peso para cada paciente
anorexia$WeightChange <- anorexia$Postwt - anorexia$Prewt

# Contar cuántos pacientes ganaron y cuántos perdieron peso
patients_gained_weight <- sum(anorexia$WeightChange > 0)
patients_lost_weight <- sum(anorexia$WeightChange < 0)

# Imprime los resultados
print(paste("Pacientes que ganaron peso:", patients_gained_weight))
## [1] "Pacientes que ganaron peso: 3"
print(paste("Pacientes que perdieron peso:", patients_lost_weight))
## [1] "Pacientes que perdieron peso: 0"
#Ejercicio 2.6 c)

# Supongamos que 'anorexia' es tu marco de datos con las columnas 'Treat', 'Prewt' y 'Postwt'
# Crearé un marco de datos de ejemplo para demostración
anorexia <- data.frame(
  Treat = c("Cont", "CBT", "FT"),
  Prewt = c(120, 110, 115),
  Postwt = c(130, 125, 120)
)

# Calcula la diferencia de peso para cada paciente
anorexia$WeightChange <- anorexia$Postwt - anorexia$Prewt

# Crear una figura y un eje
par(mfrow = c(1, 1))  # Configura una sola gráfica
bar_colors <- c("red", "green", "blue")  # Colores para cada tratamiento
barplot(anorexia$WeightChange, names.arg = anorexia$Treat, col = bar_colors,
        xlab = "Tratamiento", ylab = "Cambio de peso",
        main = "Cambios de peso por tratamiento")

# Agrega una leyenda
legend("topright", legend = anorexia$Treat, fill = bar_colors)

# Guarda la gráfica en un archivo (opcional)
# png("weight_changes_plot.png", width = 800, height = 600, res = 150)
# barplot(anorexia$WeightChange, names.arg = anorexia$Treat, col = bar_colors,
#         xlab = "Tratamiento", ylab = "Cambio de peso",
#         main = "Cambios de peso por tratamiento")
# Ejercicio 2.7 a )

# Instala el paquete MASS si aún no lo has instalado
if (!requireNamespace("MASS", quietly = TRUE)) {
  install.packages("MASS")
}
library(MASS)

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

# Contar el número de pacientes fallecidos por melanoma (status = 1)
melanoma_deaths <- sum(Melanoma$status == 1)

# Contar el número de pacientes fallecidos por otras causas (status = 3)
other_cause_deaths <- sum(Melanoma$status == 3)

# Imprimir los resultados
cat("Número de pacientes fallecidos por melanoma:", melanoma_deaths, "\n")
## Número de pacientes fallecidos por melanoma: 57
cat("Número de pacientes fallecidos por otras causas:", other_cause_deaths, "\n")
## Número de pacientes fallecidos por otras causas: 14
# Ejercicio 2.7 b)

# Carga el paquete MASS (si aún no lo has hecho)
if (!requireNamespace("MASS", quietly = TRUE)) {
  install.packages("MASS")
}
library(MASS)

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

# Verifica la presencia y ausencia de Melanoma
presencia <- sum(Melanoma$Melanoma == 1)
ausencia <- sum(Melanoma$Melanoma == 0)

# Imprime los resultados
cat("Presencia de Melanoma:", presencia, "\n")
## Presencia de Melanoma: 0
cat("Ausencia de Melanoma:", ausencia, "\n")
## Ausencia de Melanoma: 0
# Ejercicio 2.7 c)

# Load the MASS package
library(MASS)

# Load the Melanoma dataset
data(Melanoma)

# Verify the structure of the dataset
str(Melanoma)
## 'data.frame':    205 obs. of  7 variables:
##  $ time     : int  10 30 35 99 185 204 210 232 232 279 ...
##  $ status   : int  3 3 2 3 1 1 1 3 1 1 ...
##  $ sex      : int  1 1 1 0 1 1 1 0 1 0 ...
##  $ age      : int  76 56 41 71 52 28 77 60 49 68 ...
##  $ year     : int  1972 1968 1977 1968 1965 1971 1972 1974 1968 1971 ...
##  $ thickness: num  6.76 0.65 1.34 2.9 12.08 ...
##  $ ulcer    : int  1 0 0 0 1 1 1 1 1 1 ...
# Verify if there are any missing values
sum(is.na(Melanoma))
## [1] 0
# Convert the status variable to a factor
Melanoma$status <- as.factor(Melanoma$status)

# Perform logistic regression analysis
modelo <- glm(status ~ thickness, data = Melanoma, family = binomial)

# Print the model summary
summary(modelo)
## 
## Call:
## glm(formula = status ~ thickness, family = binomial, data = Melanoma)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  1.61404    0.24268   6.651 2.91e-11 ***
## thickness   -0.20884    0.05574  -3.747 0.000179 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 242.35  on 204  degrees of freedom
## Residual deviance: 226.13  on 203  degrees of freedom
## AIC: 230.13
## 
## Number of Fisher Scoring iterations: 4
# Ejercicio 2.7 d)

# Load the MASS package
library(MASS)

# Load the Melanoma dataset
data(Melanoma)

# Calculate the number of patients with and without melanoma
melanoma_present <- sum(Melanoma$status == 2)
melanoma_absent <- sum(Melanoma$status == 3)

# Create a bar plot
barplot(c(melanoma_present, melanoma_absent),
        names = c("Melanoma present", "Melanoma absent"),
        col = c("red", "green"),
        ylab = "Number of patients",
        xlab = "Status")

#Ejercicio 2.8 a)

# Cargar el paquete MASS
library(MASS)

# Cargar el conjunto de datos babyboom
data(babyboom)

# Verificar la estructura del conjunto de datos
str(babyboom)
## 'data.frame':    44 obs. of  4 variables:
##  $ clock.time  : num  5 104 118 155 257 405 407 422 431 708 ...
##  $ gender      : Factor w/ 2 levels "girl","boy": 1 1 2 2 2 1 1 2 2 2 ...
##  $ wt          : num  3837 3334 3554 3838 3625 ...
##  $ running.time: num  5 64 78 115 177 245 247 262 271 428 ...
# Contar la frecuencia de niños y niñas
sexo_count <- table(babyboom$sex)
sexo_count
## < table of extent 0 >
#Ejercicio 2.8 b)

# Cargar el paquete "UsingR" si aún no está cargado
if (!require(UsingR)) {
  install.packages("UsingR")
  library(UsingR)
}

# Cargar el conjunto de datos "babyboom"
data("babyboom")

# Filtrar los datos para las primeras 12 horas
primeras_12_horas <- subset(babyboom, clock.time <= 12)

# Calcular el número total de niños y niñas nacidos en las primeras 12 horas
niños <- sum(primeras_12_horas$gender == "boy")
niñas <- sum(primeras_12_horas$gender == "girl")

# Imprimir los resultados
cat("Cantidad de niños nacidos en las primeras 12 horas:", niños, "\n")
## Cantidad de niños nacidos en las primeras 12 horas: 0
cat("Cantidad de niñas nacidas en las primeras 12 horas:", niñas, "\n")
## Cantidad de niñas nacidas en las primeras 12 horas: 1
# Ejercicio 2.8 c)

# Cargar el paquete "UsingR" si aún no está cargado
if (!require(UsingR)) {
  install.packages("UsingR")
  library(UsingR)
}

# Cargar el conjunto de datos "babyboom"
data("babyboom")

# Filtrar los datos para los niños nacidos por debajo de 3000 gramos
niños_bajo_3000g <- subset(babyboom, wt < 3000 & gender == "boy")

# Calcular la cantidad de niños nacidos por debajo de 3000 gramos
cantidad_niños_bajo_3000g <- nrow(niños_bajo_3000g)

# Imprimir el resultado
cat("Cantidad de niños nacidos por debajo de 3000 gramos:", cantidad_niños_bajo_3000g, "\n")
## Cantidad de niños nacidos por debajo de 3000 gramos: 4
# Ejercicio 2.8 d ) 

# Cargar el paquete "UsingR" si aún no está cargado
if (!require(UsingR)) {
  install.packages("UsingR")
  library(UsingR)
}

# Cargar el conjunto de datos "babyboom"
data("babyboom")

# Filtrar los datos para los niños nacidos por debajo de 3000 gramos
niños_bajo_3000g <- subset(babyboom, wt < 3000)

# Crear un gráfico de dispersión para visualizar la relación
plot(niños_bajo_3000g$wt, niños_bajo_3000g$gender,
     xlab = "Peso (gramos)", ylab = "Sexo",
     main = "Relación entre Peso y Sexo (Niños < 3000g)",
     pch = 19, col = "orange")

# Agregar etiquetas para los ejes
legend("topright", legend = c("Niño", "Niña"), col = c("orange", "purple"), pch = 19)

# Imprimir el gráfico
# Ejercicio 2.8 e)

# Cargar el paquete "UsingR" si aún no está cargado
if (!require(UsingR)) {
  install.packages("UsingR")
  library(UsingR)
}

# Cargar el conjunto de datos "babyboom"
data("babyboom")

# Calcular el promedio de pesos total
promedio_total <- mean(babyboom$wt)

# Calcular el promedio de pesos para niños
niños <- subset(babyboom, gender == "boy")
promedio_niños <- mean(niños$wt)

# Calcular el promedio de pesos para niñas
niñas <- subset(babyboom, gender == "girl")
promedio_niñas <- mean(niñas$wt)

# Crear un gráfico de barras para visualizar los promedios
barplot(c(promedio_total, promedio_niños, promedio_niñas),
        names.arg = c("Total", "Niños", "Niñas"),
        main = "Promedio de Pesos (babyboom)",
        ylab = "Peso (gramos)",
        col = c("yellow", "gray", "pink"))

# Imprimir el gráfico
# Ejercicio 2.9 a)

# Cargar el paquete UsingR
library(UsingR)

# Cargar el conjunto de datos Aids2
data(Aids2)

# Verificar la estructura del conjunto de datos
str(Aids2)
## 'data.frame':    2843 obs. of  7 variables:
##  $ state  : Factor w/ 4 levels "NSW","Other",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ sex    : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 2 2 2 2 ...
##  $ diag   : int  10905 11029 9551 9577 10015 9971 10746 10042 10464 10439 ...
##  $ death  : int  11081 11096 9983 9654 10290 10344 11135 11069 10956 10873 ...
##  $ status : Factor w/ 2 levels "A","D": 2 2 2 2 2 2 2 2 2 2 ...
##  $ T.categ: Factor w/ 8 levels "hs","hsid","id",..: 1 1 1 5 1 1 8 1 1 2 ...
##  $ age    : int  35 53 42 44 39 36 36 31 26 27 ...
# Contar la frecuencia de contagios por estado
contagios_por_estado <- table(Aids2$state)
contagios_por_estado
## 
##   NSW Other   QLD   VIC 
##  1780   249   226   588
#Ejercicio 2.9 b)

# Cargar el paquete UsingR
library(UsingR)

# Cargar el conjunto de datos Aids2
data(Aids2)

# Filtrar los datos para incluir solo las personas fallecidas por SIDA
fallecidos_sida <- subset(Aids2, status == "F" & death == "AIDS")

# Contar el número de personas fallecidas por SIDA
num_fallecidos_sida <- nrow(fallecidos_sida)

# Imprimir el resultado
cat("El número de personas fallecidas por SIDA es:", num_fallecidos_sida)
## El número de personas fallecidas por SIDA es: 0
# Ejercicio 2.9 c)

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

# Verificar la estructura de la base de datos
str(Aids2)
## 'data.frame':    2843 obs. of  7 variables:
##  $ state  : Factor w/ 4 levels "NSW","Other",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ sex    : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 2 2 2 2 ...
##  $ diag   : int  10905 11029 9551 9577 10015 9971 10746 10042 10464 10439 ...
##  $ death  : int  11081 11096 9983 9654 10290 10344 11135 11069 10956 10873 ...
##  $ status : Factor w/ 2 levels "A","D": 2 2 2 2 2 2 2 2 2 2 ...
##  $ T.categ: Factor w/ 8 levels "hs","hsid","id",..: 1 1 1 5 1 1 8 1 1 2 ...
##  $ age    : int  35 53 42 44 39 36 36 31 26 27 ...
# Contar la frecuencia de cada tipo de transmisión por sexo
table(Aids2$sex, Aids2$T)
##    
##       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
# Crear una tabla de contingencia para visualizar la relación
contingency_table <- table(Aids2$sex, Aids2$T)
contingency_table
##    
##       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
# Calcular la proporción de cada tipo de transmisión por sexo
prop.table(contingency_table, 1)
##    
##              hs        hsid          id         het        haem       blood
##   F 0.011235955 0.000000000 0.224719101 0.224719101 0.000000000 0.415730337
##   M 0.894698620 0.026143791 0.010167030 0.007625272 0.016702977 0.020697168
##    
##          mother       other
##   F 0.044943820 0.078651685
##   M 0.001089325 0.022875817
# Graficar la relación utilizando una gráfica de barras
barplot(contingency_table, main = "Relación entre sexo y tipo de transmisión del SIDA",
        xlab = "Sexo", ylab = "Frecuencia", col = c("blue", "red"))
legend("topright", levels(Aids2$T), fill = c("blue", "red"))

#Ejercicio 2.9 d)

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

# Contar la frecuencia de cada tipo de transmisión
transmission_counts <- table(Aids2$T)

# Calcular los porcentajes de cada tipo de transmisión
transmission_percentages <- round(prop.table(transmission_counts) * 100, 1)

# Crear el gráfico de pastel
pie(transmission_counts, labels = names(transmission_percentages), main = "Tipos de transmisión del SIDA", col = rainbow(length(transmission_counts)))
legend("top", legend = names(transmission_counts), fill = rainbow(length(transmission_counts)))

# Ejercicio 2.10 a)

# Cargar la base de datos crime
data("crime")

# Sumar la tasa de crímenes para cada estado en 1983 y 1993
total_crimes_1983 <- sum(crime$y1983)
total_crimes_1993 <- sum(crime$y1993)

# Comparar las sumas de las tasas de crímenes entre 1983 y 1993
if (total_crimes_1993 > total_crimes_1983) {
  print("La tasa total de crímenes en 1993 fue mayor que en 1983.")
} else if (total_crimes_1993 < total_crimes_1983) {
  print("La tasa total de crímenes en 1993 fue menor que en 1983.")
} else {
  print("La tasa total de crímenes en 1983 y 1993 es igual.")
}
## [1] "La tasa total de crímenes en 1993 fue mayor que en 1983."
# Ejercicio 2.10 b)

# Replace "data_string" with the actual CSV data as a string
data_string <- "Estado,y1983,y1993\n
Alaska,100,120\n
California,200,250\n
... (remaining data rows)"

# Split the data string into lines
data_lines <- strsplit(data_string, "\n")

# Initialize an empty data frame
data <- data.frame()

# Process each data line
for (i in 1:length(data_lines)) {
  # Split the current line into individual values
  current_line <- strsplit(data_lines[[i]], ",")

  # Add the values to the data frame
  data <- rbind(data, data.frame(
    Estado = current_line[[1]][1],
    y1983 = as.numeric(current_line[[2]][1]),
    y1993 = as.numeric(current_line[[3]][1])
  ))
}
## Warning in data.frame(Estado = current_line[[1]][1], y1983 =
## as.numeric(current_line[[2]][1]), : NAs introducidos por coerción
# Identify the state with the highest crime rate in 1983
estado_mayor_tasa_1983 <- data[which(data$y1983 == max(data$y1983)),]$Estado

# Identify the state with the highest crime rate in 1993
estado_mayor_tasa_1993 <- data[which(data$y1993 == max(data$y1993)),]$Estado

# Display results
print(paste("State with the highest crime rate in 1983:", estado_mayor_tasa_1983[1]))
## [1] "State with the highest crime rate in 1983: NA"
print(paste("State with the highest crime rate in 1993:", estado_mayor_tasa_1993[1]))
## [1] "State with the highest crime rate in 1993: NA"
#Ejercicio 2.10 c)

# Replace "data_string" with the actual CSV data as a string
data_string <- "Estado,y1983,y1993\n
Alaska,100,120\n
California,200,250\n
... (remaining data rows)"

# Split the data string into lines
data_lines <- strsplit(data_string, "\n")

# Initialize an empty data frame
data <- data.frame()

# Process each data line
for (i in 1:length(data_lines)) {
  # Split the current line into individual values
  current_line <- strsplit(data_lines[[i]], ",")

  # Add the values to the data frame
  data <- rbind(data, data.frame(
    Estado = current_line[[1]][1],
    y1983 = as.numeric(current_line[[2]][1]),
    y1993 = as.numeric(current_line[[3]][1])
  ))
}
## Warning in data.frame(Estado = current_line[[1]][1], y1983 =
## as.numeric(current_line[[2]][1]), : NAs introducidos por coerción
# Calcular la tasa de criminalidad total para cada estado
data$tasa_criminalidad_total <- data$y1983 + data$y1993

# Identificar el estado con la mayor tasa de criminalidad total
estado_mayor_tasa_total <- data[which.max(data$tasa_criminalidad_total),]$Estado

# Mostrar resultados
print(paste("Estado con mayor tasa de criminalidad total:", estado_mayor_tasa_total[1]))
## [1] "Estado con mayor tasa de criminalidad total: NA"
# Ejercicio 2.10 d)

# Cargar la biblioteca ggplot2
library(ggplot2)

# Cargar la base de datos crime
data("crime")

# Crear un data frame con los estados, años y tasas de crímenes
crime_plot <- data.frame(State = rep(rownames(crime), 2),
                         Year = rep(c(1983, 1993), each = nrow(crime)),
                         CrimeRate = c(crime$y1983, crime$y1993))

# Graficar la tasa de crímenes por estado y año
ggplot(crime_plot, aes(x = State, y = CrimeRate, fill = factor(Year))) +
  geom_bar(stat = "identity") +
  labs(title = "Tasa de crímenes por estado en 1983 y 1993",
       x = "Estado",
       y = "Tasa de crímenes",
       fill = "Año") +
  theme_minimal() +
  theme(legend.position = "right")