#Ana Contreras y Monserrat Abdala

# Instalar el paquete 'readr' si no está instalado
if (!requireNamespace("readr", quietly = TRUE)) {
  install.packages("readr")
}

# Cargar el paquete 'readr'
library(readr)

# URL del conjunto de datos
url_dataset <- "https://raw.githubusercontent.com/selva86/datasets/master/Advertising.csv"

# Importar el conjunto de datos desde internet
data <- read_csv(url_dataset)
## New names:
## Rows: 200 Columns: 5
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," dbl
## (5): ...1, TV, radio, newspaper, sales
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`
# Ver las primeras filas del conjunto de datos
View(data)

# 1. COMPROBAR LOS SUPUESTOS DE NORMALIDAD Y HOMOGENEIDAD DE VARIANZA E INTERPRETAR.

# Comprobar normalidad de las variables
shapiro.test(data$TV)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$TV
## W = 0.94951, p-value = 1.693e-06
shapiro.test(data$radio)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$radio
## W = 0.94401, p-value = 5.198e-07
shapiro.test(data$newspaper)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$newspaper
## W = 0.9364, p-value = 1.127e-07
# Comprobar homogeneidad de varianza del modelo
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
model <- lm(sales ~ TV + radio + newspaper, data = data)
bptest(model, ~ .^2,data=data)
## 
##  studentized Breusch-Pagan test
## 
## data:  model
## BP = 98.119, df = 15, p-value = 2.961e-14
# Realizar análisis de regresión lineal múltiple
summary(model)
## 
## Call:
## lm(formula = sales ~ TV + radio + newspaper, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -8.8277 -0.8908  0.2418  1.1893  2.8292 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.938889   0.311908   9.422   <2e-16 ***
## TV           0.045765   0.001395  32.809   <2e-16 ***
## radio        0.188530   0.008611  21.893   <2e-16 ***
## newspaper   -0.001037   0.005871  -0.177     0.86    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.686 on 196 degrees of freedom
## Multiple R-squared:  0.8972, Adjusted R-squared:  0.8956 
## F-statistic: 570.3 on 3 and 196 DF,  p-value: < 2.2e-16
### INTERPRETACION: Primero, se realiza una prueba de normalidad de las variables predictoras "TV", "radio" y "newspaper" utilizando la prueba de Shapiro. Luego, se comprueba la homogeneidad de varianza del modelo utilizando la prueba de Breusch-Pagan. Finalmente, se realiza el análisis de regresión lineal múltiple utilizando el modelo ajustado y se muestra un resumen de los resultados. Este proceso ayuda a asegurar que los supuestos del modelo se cumplan y que los resultados sean confiables.

# 2. APLIQUE UN MÉTODO PARAMÉTRICO O UNO NO PARAMÉTRICO SEGÚN CORRESPONDA. SI ELIGEN PARAMÉTRICO ENTONCES DEBEN TRABAJAR CON REGRESIÓN LINEAL SIMPLE O MÚLTIPLE E INTERPRETAR R^2.

model <- lm(sales ~ TV + radio + newspaper, data=data)
summary(model)
## 
## Call:
## lm(formula = sales ~ TV + radio + newspaper, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -8.8277 -0.8908  0.2418  1.1893  2.8292 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.938889   0.311908   9.422   <2e-16 ***
## TV           0.045765   0.001395  32.809   <2e-16 ***
## radio        0.188530   0.008611  21.893   <2e-16 ***
## newspaper   -0.001037   0.005871  -0.177     0.86    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.686 on 196 degrees of freedom
## Multiple R-squared:  0.8972, Adjusted R-squared:  0.8956 
## F-statistic: 570.3 on 3 and 196 DF,  p-value: < 2.2e-16
library(ggplot2)
ggplot(data, aes(x=TV, y=sales)) +
  geom_point() +
  geom_smooth(method="lm", se=FALSE, color="red") +
  labs(title="Regression Plot", x="TV", y="Sales")
## `geom_smooth()` using formula = 'y ~ x'

### INTERPRETACION : El modelo de regresión lineal múltiple del "Advertising dataset" tiene un valor de R-cuadrado (R²) de 0,897, lo que significa que puede explicar el 89,7% de la variabilidad en las ventas. Esto indica que el modelo ajustado es muy bueno y que las tres variables predictoras, "TV", "Radio" y "Newspaper", tienen una relación fuerte y significativa con las ventas. 


# 3.  CREAR UN DATAFRAME DE DOS COLUMNAS. "Nombre_variable" Y "Tipo_variable".EN LAS FILAS SE DEBEN INCLUIR LAS OBSERVACIONES CORRESPONDIENTES DE LA VARIABLE Y SU TIPO.

# crear un vector de nombres de variables
nombre_variable <- names(data)

# crear un vector de tipos de variables
tipo_variable <- sapply(data, 
                        function(x) {
  if (is.factor(x)) {
    if (is.ordered(x)) {
      return("categórica ordinal")
    } else {
      return("categórica nominal")
    }
  } else if (is.numeric(x)) {
    if (all(x == as.integer(x))) {
      return("numérica discreta")
    } else {
      return("numérica continua")
    }
  }
})

# combinar los dos vectores en un dataframe
df <- data.frame(Nombre_variable = nombre_variable, Tipo_variable = tipo_variable)

# imprimir el dataframe
print(df)
##           Nombre_variable     Tipo_variable
## ...1                 ...1 numérica discreta
## TV                     TV numérica continua
## radio               radio numérica continua
## newspaper       newspaper numérica continua
## sales               sales numérica continua
# 4. APLICAR UN ANALISIS DE CORRELACION O ASOCIACIÓN, SEGUN CORRESPONDA.

# calcular la matriz de correlación de Pearson
correlation_matrix <- cor(data, method = "pearson")

# imprimir la matriz de correlación
print(correlation_matrix)
##                  ...1         TV       radio   newspaper       sales
## ...1       1.00000000 0.01771469 -0.11068044 -0.15494414 -0.05161625
## TV         0.01771469 1.00000000  0.05480866  0.05664787  0.78222442
## radio     -0.11068044 0.05480866  1.00000000  0.35410375  0.57622257
## newspaper -0.15494414 0.05664787  0.35410375  1.00000000  0.22829903
## sales     -0.05161625 0.78222442  0.57622257  0.22829903  1.00000000
#5. GRAFIQUEN LAS ASOCIACIONES O CORRELACI9ONES QUE ENCONTRARON E INTERPRETEN.

# instalar y cargar el paquete corrplot (si aún no está instalado)
library(corrplot)
## corrplot 0.92 loaded
library(ggcorrplot)
# crear un gráfico de la matriz de correlación
ggcorrplot(correlation_matrix, type = "lower", colors = c("#6D9EC1", "white", "#E46726"))

### INTERPRETACION: La gráfica de correlación muestra la correlación entre dos variables, con los colores y tamaños de los puntos indicando la fuerza de la correlación. Para el conjunto de datos "Publicidad", la gráfica revela una fuerte correlación positiva entre las ventas y el gasto publicitario en televisión y radio, y una correlación débil entre ventas y publicidad en periódicos. Además, existe una correlación positiva moderada entre la publicidad en televisión y radio. El gráfico ayuda a identificar patrones de correlación en el conjunto de datos, lo que sugiere que la publicidad en televisión y radio tiene un mayor impacto en las ventas que la publicidad en los periódicos. Además, sugiere que las empresas que invierten más en publicidad televisiva también tienden a invertir más en publicidad radiofónica.