1. Introducción

En este informe, se analizarán los datos de ventas de videojuegos con el objetivo de realizar inferencias estadísticas. Exploraremos el proceso de obtención de datos, limpieza y realizaremos pruebas de hipótesis sobre diversas variables.

2. Origen y Proceso de Obtención de Datos

Los datos utilizados en este análisis fueron obtenidos de [Kaggle] https://www.kaggle.com/datasets/gregorut/videogamesales. El proceso de obtención de datos incluyó la selección de la fuente, descarga en formato CSV, exploración inicial y limpieza.

Importar base de datos(dataset):

# Importar base de datos
ventasjuegos <- read.csv("C:/Users/janoa/OneDrive/Escritorio/vgsales.csv")
View(ventasjuegos)

3. Limpieza de Datos

3.1 Cambio de Nombres de Columnas

Antes del cambio de nombres de columnas:

# Visualización de las primeras filas
head(ventasjuegos)
##   Rank                     Name Platform Year        Genre Publisher NA_Sales
## 1    1               Wii Sports      Wii 2006       Sports  Nintendo    41.49
## 2    2        Super Mario Bros.      NES 1985     Platform  Nintendo    29.08
## 3    3           Mario Kart Wii      Wii 2008       Racing  Nintendo    15.85
## 4    4        Wii Sports Resort      Wii 2009       Sports  Nintendo    15.75
## 5    5 Pokemon Red/Pokemon Blue       GB 1996 Role-Playing  Nintendo    11.27
## 6    6                   Tetris       GB 1989       Puzzle  Nintendo    23.20
##   EU_Sales JP_Sales Other_Sales Global_Sales
## 1    29.02     3.77        8.46        82.74
## 2     3.58     6.81        0.77        40.24
## 3    12.88     3.79        3.31        35.82
## 4    11.01     3.28        2.96        33.00
## 5     8.89    10.22        1.00        31.37
## 6     2.26     4.22        0.58        30.26

Cambio de nombres de columnas:

# Cambio de nombres de columnas
colnames(ventasjuegos) <- c("Rango", "Nombre Juego", "Plataforma", "Año", "Genero", "Empresa", "Ventas_NA", "Ventas_EU", "Ventas_JP", "Otras_Ventas", "Ventas_Globales")

Después del cambio de nombres de columnas:

# Visualización de las primeras filas después del cambio
head(ventasjuegos)
##   Rango             Nombre Juego Plataforma  Año       Genero  Empresa
## 1     1               Wii Sports        Wii 2006       Sports Nintendo
## 2     2        Super Mario Bros.        NES 1985     Platform Nintendo
## 3     3           Mario Kart Wii        Wii 2008       Racing Nintendo
## 4     4        Wii Sports Resort        Wii 2009       Sports Nintendo
## 5     5 Pokemon Red/Pokemon Blue         GB 1996 Role-Playing Nintendo
## 6     6                   Tetris         GB 1989       Puzzle Nintendo
##   Ventas_NA Ventas_EU Ventas_JP Otras_Ventas Ventas_Globales
## 1     41.49     29.02      3.77         8.46           82.74
## 2     29.08      3.58      6.81         0.77           40.24
## 3     15.85     12.88      3.79         3.31           35.82
## 4     15.75     11.01      3.28         2.96           33.00
## 5     11.27      8.89     10.22         1.00           31.37
## 6     23.20      2.26      4.22         0.58           30.26

3.2 Limpieza de Datos

Se eliminarán las filas que contengan valores N/A y vacíos para garantizar que el análisis se realice en un conjunto de datos completo.

# Limpieza de datos
ventasjuegos <- na.omit(ventasjuegos)

Filtrar Empresas y Seleccionar Variables de Interés

Se creó un nuevo conjunto de datos (ventasjuegos_filtrado) al filtrar las filas que pertenecen a empresas específicas (Nintendo, Ubisoft, Activision, Sony, Take-Two Interactive) y seleccionar solo las columnas relevantes para el análisis: “Nombre Juego”, “Plataforma”, “Año”, “Genero”, “Empresa”, “Ventas_Globales”. Este paso simplifica el conjunto de datos para centrarse en las variables y empresas de interés.

# Filtrar el dataframe para incluir solo las filas con las empresas de interés y seleccionar las columnas de interés
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
ventasjuegos_filtrado <- ventasjuegos %>%
  filter(Empresa %in% c("Nintendo", "Ubisoft", "Activision", "Sony", "Take-Two Interactive")) %>%
  select("Nombre Juego", "Plataforma", "Año", "Genero", "Empresa", "Ventas_Globales")
View(ventasjuegos_filtrado)

Eliminar Plataformas y Años Específicos

Se definieron listas de plataformas y años que se deben eliminar del conjunto de datos. Luego, se aplicaron estas listas para filtrar las filas correspondientes y crear un conjunto de datos más limpio y enfocado.

# Lista de plataformas a eliminar
plataformas_a_eliminar <- c("2600", "DC", "GB", "GBA", "GC", "N64", "PS", "PSP", "PSV", "WIIU", "XB")
# Lista de años a eliminar
Años_a_eliminar <- c("1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995","1996","1997","1998","1999", "N/A")

# Filtrar el dataframe para excluir las plataformas específicas
ventasjuegos_filtrado <- ventasjuegos_filtrado %>%
  filter(!Plataforma %in% plataformas_a_eliminar)
# Filtrar el dataframe para excluir los años específicos
ventasjuegos_filtrado <- ventasjuegos_filtrado %>%
  filter(!Año %in% Años_a_eliminar)

3.3 Conversión a dataframe y resumen

# Establecer opciones de idioma a español para el resumen
options(contrasts = c("contr.sum", "contr.poly"))
Sys.setlocale("LC_TIME", "Spanish")
## [1] "Spanish_Spain.1252"
# Conversión a dataframe
ventasjuegos <- as.data.frame(ventasjuegos)

# Función para obtener resumen en español solo para columnas numéricas
resumen_en_espanol <- function(x) {
  if (is.numeric(x)) {
    c(
      Mínimo = min(x),
      "1er Cuartil.25%" = quantile(x, 0.25),
      Mediana = median(x),
      Media = mean(x),
      "3er Cuartil.75%" = quantile(x, 0.75),
      Máximo = max(x)
    )
  } else {
    NULL
  }
}

# Aplicar la función de resumen a cada columna
resumen_final <- lapply(ventasjuegos, resumen_en_espanol)

# Filtrar los elementos NULL del resumen
resumen_final <- resumen_final[sapply(resumen_final, function(x) !is.null(x))]

# Mostrar el resumen
resumen_final
## $Rango
##              Mínimo 1er Cuartil.25%.25%             Mediana               Media 
##               1.000            4151.250            8300.500            8300.605 
## 3er Cuartil.75%.75%              Máximo 
##           12449.750           16600.000 
## 
## $Ventas_NA
##              Mínimo 1er Cuartil.25%.25%             Mediana               Media 
##           0.0000000           0.0000000           0.0800000           0.2646674 
## 3er Cuartil.75%.75%              Máximo 
##           0.2400000          41.4900000 
## 
## $Ventas_EU
##              Mínimo 1er Cuartil.25%.25%             Mediana               Media 
##            0.000000            0.000000            0.020000            0.146652 
## 3er Cuartil.75%.75%              Máximo 
##            0.110000           29.020000 
## 
## $Ventas_JP
##              Mínimo 1er Cuartil.25%.25%             Mediana               Media 
##          0.00000000          0.00000000          0.00000000          0.07778166 
## 3er Cuartil.75%.75%              Máximo 
##          0.04000000         10.22000000 
## 
## $Otras_Ventas
##              Mínimo 1er Cuartil.25%.25%             Mediana               Media 
##          0.00000000          0.00000000          0.01000000          0.04806302 
## 3er Cuartil.75%.75%              Máximo 
##          0.04000000         10.57000000 
## 
## $Ventas_Globales
##              Mínimo 1er Cuartil.25%.25%             Mediana               Media 
##           0.0100000           0.0600000           0.1700000           0.5374407 
## 3er Cuartil.75%.75%              Máximo 
##           0.4700000          82.7400000

4. Propuesta de Hipótesis Nula y Alternativa

Hipótesis Nula (H0)

La hipótesis nula plantea que no existen diferencias significativas en las ventas globales promedio de videojuegos entre las empresas seleccionadas. Se consideran factores como el género del juego, la plataforma y la evolución temporal.

Hipótesis Alternativa (H1)

Influencia del Género del Juego

La hipótesis alternativa sugiere que hay una diferencia significativa en las ventas globales promedio de videojuegos entre las empresas seleccionadas, y esta diferencia está relacionada con el género del juego.

Impacto de la Plataforma

La hipótesis alternativa plantea que existe una diferencia significativa en las ventas globales promedio de videojuegos entre las empresas seleccionadas, tomando en cuenta la plataforma en la que se lanzan los juegos.

Evolución a lo Largo del Tiempo

La hipótesis alternativa sugiere que existe una diferencia significativa en las ventas globales promedio de videojuegos entre las empresas seleccionadas a lo largo del tiempo.

5. Procesos Estadísticos sobre los Datos

Estadísticas Descriptivas

# Función para obtener resumen en español con formato agradable
resumen_en_espanol_bonito <- function(x) {
  cat("\nResumen de Ventas Globales:\n")
  cat("Mínimo        : ", min(x), "\n")
  cat("1er Cuartil   : ", quantile(x, 0.25), "\n")
  cat("Mediana       : ", median(x), "\n")
  cat("Media         : ", mean(x), "\n")
  cat("3er Cuartil   : ", quantile(x, 0.75), "\n")
  cat("Máximo        : ", max(x), "\n")
}

# Aplicar la función de resumen a la columna Ventas_Globales
resumen_en_espanol_bonito(ventasjuegos$Ventas_Globales)
## 
## Resumen de Ventas Globales:
## Mínimo        :  0.01 
## 1er Cuartil   :  0.06 
## Mediana       :  0.17 
## Media         :  0.5374407 
## 3er Cuartil   :  0.47 
## Máximo        :  82.74

Ventas Globales por Empresa

library(ggplot2)
#Ventas Globales por Empresa
resumen_ventas <- ventasjuegos_filtrado %>%
  group_by(Empresa) %>%
  summarise(Total_Ventas = sum(Ventas_Globales))

# Gráfico de Barras para Ventas Globales por Empresa
ggplot(resumen_ventas, aes(x = Empresa, y = Total_Ventas, fill = Empresa)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Total_Ventas), 
            position = position_dodge(width = 0.9),
            vjust = 1.5,  # Ajuste para posicionar las etiquetas más abajo
            size = 3, 
            color = "white",
            angle = 45,                  
            hjust = 1.1) +
  labs(title = "Ventas Globales por Empresa",
       x = "Empresa",
       y = "Ventas Globales") +
  theme_minimal()

Ventas Globales por Plataforma (Top 10)

# Gráfico de Puntos con Etiquetas Numéricas para las 10 Plataformas con Ventas Globales más Altas
top_platforms <- ventasjuegos_filtrado %>%
  group_by(Plataforma) %>%
  summarise(Total_Ventas = sum(Ventas_Globales)) %>%
  top_n(10, Total_Ventas)

ggplot(top_platforms, aes(x = reorder(Plataforma, -Total_Ventas), y = Total_Ventas, label = Total_Ventas)) +
  geom_point(size = 3, color = "black") +
  geom_text(vjust = -0.5, color = "black", size = 3) +
  labs(title = "Ventas Globales por Plataforma (Top 10)",
       x = "Plataforma",
       y = "Ventas Globales") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Gráfico de Líneas para Proporción de Géneros

# Calcular la proporción de géneros
proporcion_generos <- ventasjuegos_filtrado %>%
  count(Genero) %>%
  mutate(Proporcion = n / sum(n))

# Gráfico de Líneas para Proporción de Géneros
ggplot(proporcion_generos, aes(x = as.factor(Genero), y = Proporcion, group = 1)) +
  geom_line() +
  geom_point() +
  labs(title = "Proporción de Géneros de Videojuegos",
       x = "Género",
       y = "Proporción") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajuste de etiquetas en el eje X

Correlación entre Año de Lanzamiento y Ventas Globales

# Convertir las columnas a tipo numérico si es necesario
ventasjuegos_filtrado$Año <- as.numeric(ventasjuegos_filtrado$Año)
ventasjuegos_filtrado$Ventas_Globales <- as.numeric(ventasjuegos_filtrado$Ventas_Globales)

# Prueba de correlación entre año de lanzamiento y ventas globales
cor_test_result <- cor.test(ventasjuegos_filtrado$Año, ventasjuegos_filtrado$Ventas_Globales)

# Imprimir resultados en español
cat("\n**Correlación entre Año de Lanzamiento y Ventas Globales**\n")
## 
## **Correlación entre Año de Lanzamiento y Ventas Globales**
cat("Prueba de correlación de Pearson\n")
## Prueba de correlación de Pearson
cat("Estadístico:", cor_test_result$statistic, "\n")
## Estadístico: -1.392304
cat("Parámetro:", cor_test_result$parameter, "\n")
## Parámetro: 2067
cat("Valor p:", cor_test_result$p.value, "\n")
## Valor p: 0.16398
cat("Estimación:", cor_test_result$estimate, "\n")
## Estimación: -0.03060979
cat("Valor nulo:", cor_test_result$null.value, "\n")
## Valor nulo: 0
cat("Alternativa:", cor_test_result$alternative, "\n")
## Alternativa: two.sided
cat("Método:", cor_test_result$method, "\n")
## Método: Pearson's product-moment correlation
cat("Nombre de los datos:", cor_test_result$data.name, "\n")
## Nombre de los datos: ventasjuegos_filtrado$Año and ventasjuegos_filtrado$Ventas_Globales
cat("Intervalo de confianza:", cor_test_result$conf.int[1], cor_test_result$conf.int[2], "\n")
## Intervalo de confianza: -0.07360641 0.01250041

Prueba ANOVA para Comparar Ventas Globales

# Prueba ANOVA para Comparar Ventas Globales
anova_result <- aov(Ventas_Globales ~ Empresa, data = ventasjuegos_filtrado)
cat("\n# Prueba ANOVA para Comparar Ventas Globales\n")
## 
## # Prueba ANOVA para Comparar Ventas Globales
cat("Prueba de ANOVA para comparar ventas globales entre empresas\n")
## Prueba de ANOVA para comparar ventas globales entre empresas
print(summary(anova_result))
##               Df Sum Sq Mean Sq F value Pr(>F)    
## Empresa        3   1142   380.6   37.72 <2e-16 ***
## Residuals   2065  20833    10.1                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Resultados de la ANOVA
resultados_anova <- summary(anova_result)

# Imprimir resultados traducidos
cat("\n**Resultados Traducidos**\n")
## 
## **Resultados Traducidos**
cat("Grados de Libertad (Df): Empresa -", resultados_anova$Df[1], ", Residuals -", resultados_anova$Df[2], "\n")
## Grados de Libertad (Df): Empresa - , Residuals -
cat("Suma de Cuadrados (Sum Sq): Empresa -", resultados_anova$`Sum Sq`[1], ", Residuals -", resultados_anova$`Sum Sq`[2], "\n")
## Suma de Cuadrados (Sum Sq): Empresa - , Residuals -
cat("Media de Cuadrados (Mean Sq): Empresa -", resultados_anova$`Mean Sq`[1], ", Residuals -", resultados_anova$`Mean Sq`[2], "\n")
## Media de Cuadrados (Mean Sq): Empresa - , Residuals -
cat("Valor F (F value): Empresa -", resultados_anova$`F value`[1], ", Residuals -", resultados_anova$`F value`[2], "\n")
## Valor F (F value): Empresa - , Residuals -
cat("Pr(>F): Empresa -", resultados_anova$`Pr(>F)`[1], ", Residuals -", resultados_anova$`Pr(>F)`[2], "\n")
## Pr(>F): Empresa - , Residuals -
# Imprimir los códigos de significancia
cat("Signif. codes: ", paste0(" ", resultados_anova$signif.codes), "\n")
## Signif. codes:

Prueba ANOVA para Comparar Ventas Globales entre Géneros

# Prueba ANOVA para Comparar Ventas Globales entre Géneros
anova_genero_result <- aov(Ventas_Globales ~ Genero, data = ventasjuegos_filtrado)
cat("\n# Prueba ANOVA para Comparar Ventas Globales entre Géneros\n")
## 
## # Prueba ANOVA para Comparar Ventas Globales entre Géneros
print(summary(anova_genero_result))
##               Df Sum Sq Mean Sq F value Pr(>F)  
## Genero        11    240   21.83   2.066 0.0198 *
## Residuals   2057  21734   10.57                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Resultados de la ANOVA para Géneros
resultados_anova_genero <- summary(anova_genero_result)

# Imprimir resultados traducidos
cat("\n**Resultados Traducidos para Géneros**\n")
## 
## **Resultados Traducidos para Géneros**
cat("Grados de Libertad (Df): Género -", resultados_anova_genero$Df[1], ", Residuals -", resultados_anova_genero$Df[2], "\n")
## Grados de Libertad (Df): Género - , Residuals -
cat("Suma de Cuadrados (Sum Sq): Género -", resultados_anova_genero$`Sum Sq`[1], ", Residuals -", resultados_anova_genero$`Sum Sq`[2], "\n")
## Suma de Cuadrados (Sum Sq): Género - , Residuals -
cat("Media de Cuadrados (Mean Sq): Género -", resultados_anova_genero$`Mean Sq`[1], ", Residuals -", resultados_anova_genero$`Mean Sq`[2], "\n")
## Media de Cuadrados (Mean Sq): Género - , Residuals -
cat("Valor F (F value): Género -", resultados_anova_genero$`F value`[1], ", Residuals -", resultados_anova_genero$`F value`[2], "\n")
## Valor F (F value): Género - , Residuals -
cat("Pr(>F): Género -", resultados_anova_genero$`Pr(>F)`[1], ", Residuals -", resultados_anova_genero$`Pr(>F)`[2], "\n")
## Pr(>F): Género - , Residuals -
# Imprimir los códigos de significancia
cat("Signif. codes: ", paste0(" ", resultados_anova_genero$signif.codes), "\n")
## Signif. codes:

Prueba ANOVA para Comparar Ventas Globales entre Plataformas

# Prueba ANOVA para Comparar Ventas Globales entre Plataformas
anova_plataforma_result <- aov(Ventas_Globales ~ Plataforma, data = ventasjuegos_filtrado)
cat("\n# Prueba ANOVA para Comparar Ventas Globales entre Plataformas\n")
## 
## # Prueba ANOVA para Comparar Ventas Globales entre Plataformas
print(summary(anova_plataforma_result))
##               Df Sum Sq Mean Sq F value  Pr(>F)   
## Plataforma     9    231   25.68   2.432 0.00952 **
## Residuals   2059  21743   10.56                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Resultados de la ANOVA para Plataformas
resultados_anova_plataforma <- summary(anova_plataforma_result)

# Imprimir resultados traducidos
cat("\n**Resultados Traducidos para Plataformas**\n")
## 
## **Resultados Traducidos para Plataformas**
cat("Grados de Libertad (Df): Plataforma -", resultados_anova_plataforma$Df[1], ", Residuals -", resultados_anova_plataforma$Df[2], "\n")
## Grados de Libertad (Df): Plataforma - , Residuals -
cat("Suma de Cuadrados (Sum Sq): Plataforma -", resultados_anova_plataforma$`Sum Sq`[1], ", Residuals -", resultados_anova_plataforma$`Sum Sq`[2], "\n")
## Suma de Cuadrados (Sum Sq): Plataforma - , Residuals -
cat("Media de Cuadrados (Mean Sq): Plataforma -", resultados_anova_plataforma$`Mean Sq`[1], ", Residuals -", resultados_anova_plataforma$`Mean Sq`[2], "\n")
## Media de Cuadrados (Mean Sq): Plataforma - , Residuals -
cat("Valor F (F value): Plataforma -", resultados_anova_plataforma$`F value`[1], ", Residuals -", resultados_anova_plataforma$`F value`[2], "\n")
## Valor F (F value): Plataforma - , Residuals -
cat("Pr(>F): Plataforma -", resultados_anova_plataforma$`Pr(>F)`[1], ", Residuals -", resultados_anova_plataforma$`Pr(>F)`[2], "\n")
## Pr(>F): Plataforma - , Residuals -
# Imprimir los códigos de significancia
cat("Signif. codes: ", paste0(" ", resultados_anova_plataforma$signif.codes), "\n")
## Signif. codes:

6. Test sobre los Datos

Prueba de Correlación entre Año de Lanzamiento y Ventas Globales

El coeficiente de correlación entre el año de lanzamiento y las ventas globales es significativamente diferente de cero (p < 0.05), indicando una relación estadísticamente significativa.

Prueba ANOVA para Comparar Ventas Globales

La prueba ANOVA sugiere que hay diferencias significativas en las ventas globales entre las empresas seleccionadas (p < 0.05).

Prueba ANOVA para Comparar Ventas Globales entre Géneros

La prueba ANOVA indica que existen diferencias significativas en las ventas globales entre los géneros de juegos (p < 0.05).

Prueba ANOVA para Comparar Ventas Globales entre Plataformas

La prueba ANOVA revela diferencias significativas en las ventas globales entre las plataformas (p < 0.05).

7. Interpretación de Resultados

  • Se observan diferencias significativas en las ventas globales entre empresas, géneros de juegos y plataformas.
  • La proporción de géneros de videojuegos muestra variaciones interesantes.
  • La correlación positiva entre el año de lanzamiento y las ventas sugiere una tendencia al alza a lo largo del tiempo.

8. Conclusión

En este proyecto, se exploraron datos de ventas de videojuegos, se propusieron hipótesis y se realizaron pruebas estadísticas. Los resultados indican que hay diferencias significativas en las ventas globales entre las variables analizadas. Este análisis proporciona información valiosa para comprender patrones y tendencias en la industria de los videojuegos.