Presentación del Codigo
# Cargamos las librerias necesarias
library(fabletools)
library(feasts)
library(ggplot2)
library(dplyr)
library(tidyverse)
library(reshape2)
library(fable)
library(lubridate)
library(tsibble)
library(zoo)
library(readxl)
library(tsibbledata)
library(DataExplorer)
library(fpp3)
library(textshape)
library(stats)
library(car)
library(caret)
library(WriteXLS)
library(FactoMineR)
library(pls)
library(lattice)
library(caret)
library(openxlsx)
library(corrplot)
#install.packages('MASS')
#install.packages('pls')
#install.packages('FactoMineR')
#install.packages('textshape')
#install.packages('car')
#install.packages('corrplot')
#install.packages('caret')
# CONFIGURACION INICIAL
rm(list = ls())
graphics.off()
cat("\014") # control + l (limpia consola)
# estabelcemosla ruta del archivo xlsx
ruta = "jaggia_ba_1e_NBA.xlsx"
datos = read_excel(ruta,"Average stat")
# Analizando Tipos de Datos ...
str(datos)
# Condiciones Generales del Problema
base_datos <- datos %>% filter(Season == 'Career' & Postseason == FALSE)
Name <- base_datos$Name
base_datos <- textshape::column_to_rownames(base_datos,loc = 2)
Salarios <- base_datos$Salary #salarios escalados
Salarios[is.na(Salarios)] <- 0
# Desagregando Columnas no Numericas (Solo 23 Variables)
datos_filtrado <- base_datos %>%
select(-Position,-Season,-Postseason,-Team,-Player,-Salary)
# Analizando Tipos de Datos ...
str(datos_filtrado)
# Eliminando datos Nulos
datos_filtrado <- mutate_all(datos_filtrado, ~replace(., is.na(.), 0))
# Aplicando PCA -- Datos Filtrados no NUlos!
datos_filtrado <- scale(datos_filtrado)
datos_filtrado <- data.frame(datos_filtrado)
pca <- prcomp(datos_filtrado)
print(pca)
summary(pca)
# Matriz de Correlación
biplot(pca, scale = 0, main = 'Diagrama de Componentes Principales')
plot(pca, type = 'l', main = 'Grafica de Componentes Principales')
#Ver Los Pesos de cada una de las Variables para cada uno de los CP
pca$x
# Verctor Desviación Estandar PCA
desv_stand = pca[[1]]
desv_stand
# Vertar Varianza PCA
varianza = desv_stand^2
varianza
sum(varianza)
sum(desv_stand)
acum_var <- varianza/23*100
acum_var
porcen_var = acum_var
tam_var = length(acum_var)
for (i in 2:tam_var){
acum_var[i] = acum_var[i] + acum_var[i-1]
}
acum_var
#convertir los datos de rotación de PCA a dataframe
pca_frame <- data.frame(pca$rotation)
round(pca_frame,5)
#extraer los nombre de las columnas de myData
columnas <- data.frame(colnames(pca_frame[0,]))
columnas
#crear una tabla que agregue el frame de pca despues del nombre de las columnas
pca_frame_final <- data.frame(columnas,pca_frame)
#Rotar el porcentaje de varianza y su acumulador en un dataframes
acum_var_frame <- data.frame(t(acum_var))
porcen_var_frame <- data.frame(t(porcen_var))
#Convertir porcentaje de varianza y su acumulador en una sola tabla
varianza_frame <- rbind(porcen_var_frame, acum_var_frame)
#Crear un arreglo con el nombre de las columnas de porcentaje de varianza
#y el acumulador de varianza
columnas_varianza <- data.frame(c("Variance %", "Cumulative Variance %"))
#combinas los nombres y los valores de porcentaje de varianza
#y acumulador de varianza en un frame final de varianza
varianza_frame <- cbind(columnas_varianza, varianza_frame)
#cambiar de nombres a las columnas de frame final de varianza con los
#nombre del frame final de pca
colnames(varianza_frame) <- colnames(pca_frame_final)
#agregar el frame final de varianza al frame final de pca
pca_frame_final <- rbind(pca_frame_final,varianza_frame)
#nombrar las filas del pca final con la columna name
rownames(pca_frame_final) <- pca_frame_final$name
pca_frame_final
#exportar la tabla de pca final
write.xlsx(pca_frame_final, "NBA_feature.xlsx")
#borrar la columna de name
pca_frame_final <- pca_frame_final[,-1]
pca_frame_final
#Ver los pesos de la PCA
pca_pesos <- pca$x
#Combinar los nombres de los jugadores y los pesos de los mismos
newdata <- data.frame(pca$x)
newdata_nombre <- data.frame(Name,pca$x)
newdata
#Elegir los 7 pesos principales
newdata_nombre <- newdata_nombre[,-(9:24)]
newdata <- newdata[,-(8:24)]
head(newdata_nombre)
#Exportar la tabla de jugaremos con sus pesos y renombrar el nombre a jugadores
newdata <- rename(newdata, Player = Name)
write.xlsx(newdata, "NBA_players.xlsx")
Nueva_Data <- newdata
# Realizando el Analisis de los 7 Componentes Principales
head(Nueva_Data)
modelo1 <- lm(Salarios~. , data = Nueva_Data)
summary(modelo1)
boxplot(modelo1$residuals)
modelo1$coefficients
par(mfrow=c(2,2))
plot(modelo1)
# Rediseñando el Modelo
head(Nueva_Data)
Nueva_Data_Modelo <- Nueva_Data
Nueva_Data_Modelo$PC4 <- NULL
Nueva_Data_Modelo$PC5 <- NULL
Nueva_Data_Modelo$PC7 <- NULL
modelo2 <- lm(Salarios~. , data = Nueva_Data_Modelo )
summary(modelo2)
boxplot(modelo2$residuals)
modelo2$coefficients
par(mfrow=c(2,2))
plot(modelo2)
Graficas Representativas
Diagrama de Correlación
Modelo de Regresión Lineal - 7 Componentes Principales
> summary(modelo1)
Call:
lm(formula = Salarios ~ ., data = Nueva_Data)
Residuals:
Min 1Q Median 3Q Max
-11567739 -1997608 -141454 1814543 12256955
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4736726 176500 26.837 < 2e-16 ***
PC1 -1106392 55467 -19.947 < 2e-16 ***
PC2 220369 74646 2.952 0.00332 **
PC3 457181 141209 3.238 0.00129 **
PC4 -22548 160241 -0.141 0.88816
PC5 153901 203414 0.757 0.44969
PC6 -660629 213690 -3.092 0.00212 **
PC7 -147796 221933 -0.666 0.50579
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3765000 on 447 degrees of freedom
Multiple R-squared: 0.489, Adjusted R-squared: 0.4809
F-statistic: 61.1 on 7 and 447 DF, p-value: < 2.2e-16
> modelo1$coefficients
(Intercept) PC1 PC2 PC3 PC4 PC5
4736725.61 -1106391.70 220369.16 457181.26 -22548.12 153901.10
PC6 PC7
-660628.58 -147796.44
Redefiniendo - Modelo de Regresión Lineal
> summary(modelo2)
Call:
lm(formula = Salarios ~ ., data = Nueva_Data_Modelo)
Residuals:
Min 1Q Median 3Q Max
-11353541 -2029775 -175004 1909529 11841551
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4736726 176115 26.896 < 2e-16 ***
PC1 -1106392 55346 -19.991 < 2e-16 ***
PC2 220369 74483 2.959 0.00325 **
PC3 457181 140900 3.245 0.00126 **
PC6 -660629 213223 -3.098 0.00207 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3757000 on 450 degrees of freedom
Multiple R-squared: 0.4878, Adjusted R-squared: 0.4832
F-statistic: 107.1 on 4 and 450 DF, p-value: < 2.2e-16
> modelo2$coefficients
(Intercept) PC1 PC2 PC3 PC6
4736725.6 -1106391.7 220369.2 457181.3 -660628.6
Diagrama del Diablo