FORM es una empresa con más de 10 años B2B, que surge a partir de la necesidad de las empresas de adquirir empaques que agreguen valor a la cadena de suministro, considerando tanto la protección de los productos como las necesidades productivas, operativas y de almacenamiento. Cabe mencionar que la empresa tiene un alto enfoque hacia el segmento automotriz como cartera de cliente principal.
library(tidyverse)
library(ggplot2)
library(foreign)
library(dplyr)
library(forcats)
library(janitor)
library(Hmisc)
library(psych)
library(naniar)
library(dlookr)
library(kableExtra)
library(readr)
library(corrplot)
library(jtools)
library(lmtest)
library(car)
library(olsrr)
library(gmodels)
library(factoextra)
library(plotrix)
library(tidyr)
library(knitr)
library(pollster)
library(epiDisplay)
library(modeest)
library(RColorBrewer)
library(forecast)
library(ggfortify)
library(ggalluvial)
El área de Recursos Humanos y Cultura Form, se encarga de la gestión de movimientos salariales, evaluaciones para cambios de área, reclutamiento y selección, organización de eventos y/o actividades de comunicación y desarrollo organizacional y sobre todo, la atención directa al colaborador al 100%.
La primer base de datos analizada en este caso, es la de recursos humanos de FORM, la cual esta compuesta por dos secciones, una de colaboradores, y otra de empleados que ya estan dados de baja de la compañía. Se analizarán los datos estadísticos de las personas que colaboran en FORM.
bdcol <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/BaseDatosL RH_Colaboradores.csv")
bdbaj <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/BaseD_Limpia RH_ Bajas .csv")
summary(bdcol)
## numero_de_empleado nombre_completo edad genero
## Min. : 1.00 Length:113 Min. :18.00 Length:113
## 1st Qu.: 31.00 Class :character 1st Qu.:26.00 Class :character
## Median : 63.00 Mode :character Median :34.00 Mode :character
## Mean : 75.86 Mean :36.07
## 3rd Qu.:127.00 3rd Qu.:45.00
## Max. :169.00 Max. :73.00
## fecha_de_alta antiguedad BAJA puesto
## Length:113 Min. : 0.000 Min. :0.0000 Length:113
## Class :character 1st Qu.: 0.000 1st Qu.:0.0000 Class :character
## Mode :character Median : 0.000 Median :0.0000 Mode :character
## Mean : 1.425 Mean :0.3451
## 3rd Qu.: 2.000 3rd Qu.:0.0000
## Max. :12.000 Max. :3.0000
## departamento mano_de_obra salario_diario colonia
## Length:113 Length:113 Min. :144.4 Length:113
## Class :character Class :character 1st Qu.:176.7 Class :character
## Mode :character Mode :character Median :180.7 Mode :character
## Mean :181.4
## 3rd Qu.:180.7
## Max. :441.4
## municipio
## Length:113
## Class :character
## Mode :character
##
##
##
str(bdcol)
## 'data.frame': 113 obs. of 13 variables:
## $ numero_de_empleado: int 1 2 3 4 5 6 7 8 9 10 ...
## $ nombre_completo : chr "NICOLAS MARTINEZ DE LOERA" "MARIANA DE LEON MORENO" "JOSE LUIS HERNANDEZ CERVANTES" "MARIA CAZARES MORALES" ...
## $ edad : int 67 43 73 32 57 38 55 26 27 37 ...
## $ genero : chr "MASCULINO" "FEMENINO" "MASCULINO" "FEMENINO" ...
## $ fecha_de_alta : chr "01/07/10" "01/07/11" "22/11/11" "30/01/13" ...
## $ antiguedad : int 12 11 11 9 8 8 7 6 5 5 ...
## $ BAJA : int 0 0 0 0 0 0 0 0 0 0 ...
## $ puesto : chr "Supervisor de Máquin" "Supervisor de pegado" "Externo" "SUPERVISORA" ...
## $ departamento : chr "Produccion Cartón MDL" "Produccion Cartón MDL" "Externo" "Produccion Cartón MC" ...
## $ mano_de_obra : chr "Indirecto" "Indirecto" "Indirecto" "Indirecto" ...
## $ salario_diario : num 177 177 177 337 441 ...
## $ colonia : chr "UNIDAD LABORAL" "SANTA TERESITA" "VILLAS DE HUINALA" "PUEBLO NUEVO" ...
## $ municipio : chr "SAN NICOLAS DE LOS G" "APODACA" "APODACA" "APODACA" ...
summary(bdbaj)
## nombre edad genero fecha_de_alta
## Length:237 Min. : 0.00 Length:237 Length:237
## Class :character 1st Qu.:23.00 Class :character Class :character
## Mode :character Median :29.00 Mode :character Mode :character
## Mean :30.52
## 3rd Qu.:37.00
## Max. :61.00
## motivo_de_baja dias_de_trabajo baja puesto_que_desempeña
## Length:237 Min. : 0.00 Length:237 Length:237
## Class :character 1st Qu.: 9.00 Class :character Class :character
## Mode :character Median : 21.00 Mode :character Mode :character
## Mean : 83.42
## 3rd Qu.: 49.00
## Max. :1966.00
## salario_imss colonia municipio estado
## Min. :144.4 Length:237 Length:237 Length:237
## 1st Qu.:180.7 Class :character Class :character Class :character
## Median :180.7 Mode :character Mode :character Mode :character
## Mean :178.6
## 3rd Qu.:180.7
## Max. :500.0
## estado_civil
## Length:237
## Class :character
## Mode :character
##
##
##
str(bdbaj)
## 'data.frame': 237 obs. of 13 variables:
## $ nombre : chr "MARIO VALDEZ ORTIZ" "ISABEL BARRIOS MENDEZ" "MARIA ELIZABETH GOMEZ HERNANDEZ" "ALONDRA ABIGAIL ESCARCIA GOMEZ" ...
## $ edad : int 32 36 23 21 29 46 29 31 50 19 ...
## $ genero : chr "MASCULINO" "FEMENINO" "FEMENINO" "FEMENINO" ...
## $ fecha_de_alta : chr "09/03/20" "09/11/21" "10/11/21" "10/11/21" ...
## $ motivo_de_baja : chr "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" ...
## $ dias_de_trabajo : int 628 60 59 59 51 37 37 31 18 224 ...
## $ baja : chr "27/11/21" "08/01/22" "08/01/22" "08/01/22" ...
## $ puesto_que_desempeña: chr "DISEÑO" "AYUDANTE GENERAL" "AYUDANTE GENERAL" "AYUDANTE GENERAL" ...
## $ salario_imss : num 500 152 152 152 152 ...
## $ colonia : chr "SAN NICOLAS DE LOS G" "COLINAS DEL AEROPÑUERTO" "PUEBLO NUEVO" "PUEBLO NUEVO" ...
## $ municipio : chr "SAN NICOLAS DE LOS G" "PESQUERIA" "APODACA" "APODACA" ...
## $ estado : chr "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" ...
## $ estado_civil : chr "SOLTERO" "UNIÓN LIBRE" "CASADO" "SOLTERO" ...
Técnica 1. Cambiar de caracter a formato fecha para facilitar código de tiempo
bdcol$fecha_de_alta<-as.Date(bdcol$fecha_de_alta,format="%y/%m/%d")
bdbaj$fecha_de_alta<-as.Date(bdbaj$fecha_de_alta,format="%y/%m/%d")
bdbaj$baja<-as.Date(bdbaj$baja,format="%y/%m/%d")
Técnica 2. Eliminar NA’s y sustituir con 0’s
sum(is.na(bdcol))
## [1] 0
bdcol[is.na(bdcol)]<-0
bdcol <- na.omit(bdcol)
sum(is.na(bdbaj))
## [1] 0
bdbaj[is.na(bdbaj)]<-0
bdbaj <- na.omit(bdbaj)
Técnica 3. Convertir variables
bdcol$genero<-as.factor(bdcol$genero)
bdcol$puesto<-as.factor(bdcol$puesto)
bdcol$departamento<-as.factor(bdcol$departamento)
bdcol$municipio<-as.factor(bdcol$municipio)
str(bdcol)
## 'data.frame': 113 obs. of 13 variables:
## $ numero_de_empleado: int 1 2 3 4 5 6 7 8 9 10 ...
## $ nombre_completo : chr "NICOLAS MARTINEZ DE LOERA" "MARIANA DE LEON MORENO" "JOSE LUIS HERNANDEZ CERVANTES" "MARIA CAZARES MORALES" ...
## $ edad : int 67 43 73 32 57 38 55 26 27 37 ...
## $ genero : Factor w/ 2 levels "FEMENINO","MASCULINO": 2 1 2 1 1 2 1 2 2 1 ...
## $ fecha_de_alta : Date, format: "2001-07-10" "2001-07-11" ...
## $ antiguedad : int 12 11 11 9 8 8 7 6 5 5 ...
## $ BAJA : int 0 0 0 0 0 0 0 0 0 0 ...
## $ puesto : Factor w/ 29 levels "AY. GENERAL",..: 27 28 10 29 29 8 7 4 3 7 ...
## $ departamento : Factor w/ 22 levels "","Ay.flexo",..: 18 18 13 17 8 4 8 19 4 10 ...
## $ mano_de_obra : chr "Indirecto" "Indirecto" "Indirecto" "Indirecto" ...
## $ salario_diario : num 177 177 177 337 441 ...
## $ colonia : chr "UNIDAD LABORAL" "SANTA TERESITA" "VILLAS DE HUINALA" "PUEBLO NUEVO" ...
## $ municipio : Factor w/ 9 levels "APODACA","CAÑADA BLANCA",..: 9 1 1 1 1 8 1 1 8 9 ...
bdbaj$genero<-as.factor(bdbaj$genero)
bdbaj$puesto_que_desempeña<-as.factor(bdbaj$puesto_que_desempeña)
bdbaj$municipio<-as.factor(bdbaj$municipio)
bdbaj$estado<-as.factor(bdbaj$estado)
bdbaj$estado_civil<-as.factor(bdbaj$estado_civil)
str(bdbaj)
## 'data.frame': 237 obs. of 13 variables:
## $ nombre : chr "MARIO VALDEZ ORTIZ" "ISABEL BARRIOS MENDEZ" "MARIA ELIZABETH GOMEZ HERNANDEZ" "ALONDRA ABIGAIL ESCARCIA GOMEZ" ...
## $ edad : int 32 36 23 21 29 46 29 31 50 19 ...
## $ genero : Factor w/ 2 levels "FEMENINO","MASCULINO": 2 1 1 1 1 1 1 2 2 2 ...
## $ fecha_de_alta : Date, format: "2009-03-20" "2009-11-21" ...
## $ motivo_de_baja : chr "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" ...
## $ dias_de_trabajo : int 628 60 59 59 51 37 37 31 18 224 ...
## $ baja : Date, format: "2027-11-21" "2008-01-22" ...
## $ puesto_que_desempeña: Factor w/ 31 levels "ANALISTA DE NOMINAS /AUX DE R.H.",..: 15 9 9 9 9 9 9 9 9 4 ...
## $ salario_imss : num 500 152 152 152 152 ...
## $ colonia : chr "SAN NICOLAS DE LOS G" "COLINAS DEL AEROPÑUERTO" "PUEBLO NUEVO" "PUEBLO NUEVO" ...
## $ municipio : Factor w/ 13 levels "APODACA","CADEREYTA",..: 10 7 1 1 1 1 1 5 4 1 ...
## $ estado : Factor w/ 3 levels "COAHUILA","NUEVO LEÓN",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ estado_civil : Factor w/ 4 levels "CASADO","DIVORCIADO",..: 3 4 1 3 3 3 4 4 3 3 ...
¿Cuántos registros y variables tiene la base de datos?
dim(bdcol)
## [1] 113 13
dim(bdbaj)
## [1] 237 13
Clasificación de variables
Colaboradores
Variablerhc<-c("`numero_de_empleado`","`nombre_completo`","`edad`","`genero`", "`fecha_de_alta`","`antiguedad`","`BAJA`","`puesto`","`departamento`","`mano_de_obra`","`salario_diario`","`colonia`","`municipio`")
Typerhc<-c("cuantitativo (discreta)", "cualitativo","cuantitativo (discreto)", "cualitativo","cuantitativo (continuo)","cuantitativo (discreto)","cuantitativo (discreto)","cualitativo","cualitativo", "cualitativo", "cuantitativo (continuo)","cualitativo", "cualitativo")
Escalarhc <- c("razon", "nominal", "razon", "nominal","ordinal", "razon", "razon", "nominal", "nominal", "nominal", "intervalo", "nominal", "nominal" )
tablerhc<-data.frame(Variablerhc,Typerhc,Escalarhc)
knitr::kable(tablerhc)
| Variablerhc | Typerhc | Escalarhc |
|---|---|---|
numero_de_empleado
|
cuantitativo (discreta) | razon |
nombre_completo
|
cualitativo | nominal |
edad
|
cuantitativo (discreto) | razon |
genero
|
cualitativo | nominal |
fecha_de_alta
|
cuantitativo (continuo) | ordinal |
antiguedad
|
cuantitativo (discreto) | razon |
BAJA
|
cuantitativo (discreto) | razon |
puesto
|
cualitativo | nominal |
departamento
|
cualitativo | nominal |
mano_de_obra
|
cualitativo | nominal |
salario_diario
|
cuantitativo (continuo) | intervalo |
colonia
|
cualitativo | nominal |
municipio
|
cualitativo | nominal |
Bajas
Variablerhb<-c("`nombre`","`edad`","`genero`","`fecha_de_alta`", "`motivo_de_baja`","`dias_De_trabajo`","`baja`","`puesto_que_desempeña`","`salario_imss`","`colonia`","`municipio`","`estado`","`estado_civil`")
Typerhb<-c("cualitativo", "cuantitativo (discreto)","cualitativo", "cuantitativo (discreto)","cualitativo","cuantitativo (discreto)","cuantitativo (discreto)","cualitativo","cuantitativo (continuo)", "cualitativo", "cuanlitativo","cualitativo", "cualitativo")
Escalarhb <- c("nominal", "razon", "nominal", "razon","nominal", "razon", "razon", "nominal", "intervalo", "nominal", "nominal", "nominal", "nominal" )
tablerhb<-data.frame(Variablerhb,Typerhb,Escalarhb)
knitr::kable(tablerhb)
| Variablerhb | Typerhb | Escalarhb |
|---|---|---|
nombre
|
cualitativo | nominal |
edad
|
cuantitativo (discreto) | razon |
genero
|
cualitativo | nominal |
fecha_de_alta
|
cuantitativo (discreto) | razon |
motivo_de_baja
|
cualitativo | nominal |
dias_De_trabajo
|
cuantitativo (discreto) | razon |
baja
|
cuantitativo (discreto) | razon |
puesto_que_desempeña
|
cualitativo | nominal |
salario_imss
|
cuantitativo (continuo) | intervalo |
colonia
|
cualitativo | nominal |
municipio
|
cuanlitativo | nominal |
estado
|
cualitativo | nominal |
estado_civil
|
cualitativo | nominal |
Tabla de frecuencia
Se realizó una tabla de frecuencia de la variable género con el objetivo de validar las frecuencias de salario diario por cada colaborador.
proportion1 <- prop.table(table(bdcol$salario_diario,bdcol$genero))
proportion1 %>%
kbl() %>%
kable_styling()
| FEMENINO | MASCULINO | |
|---|---|---|
| 144.45 | 0.0265487 | 0.0000000 |
| 151.61 | 0.0619469 | 0.0353982 |
| 151.67 | 0.0088496 | 0.0265487 |
| 152.86 | 0.0088496 | 0.0000000 |
| 175.79 | 0.0000000 | 0.0088496 |
| 176.72 | 0.0619469 | 0.1504425 |
| 180.68 | 0.3008850 | 0.2212389 |
| 181.68 | 0.0088496 | 0.0000000 |
| 184.68 | 0.0088496 | 0.0000000 |
| 185.68 | 0.0088496 | 0.0000000 |
| 208.65 | 0.0088496 | 0.0000000 |
| 240.71 | 0.0088496 | 0.0000000 |
| 240.75 | 0.0000000 | 0.0088496 |
| 260.01 | 0.0088496 | 0.0000000 |
| 279.61 | 0.0000000 | 0.0088496 |
| 337.05 | 0.0088496 | 0.0000000 |
| 441.37 | 0.0088496 | 0.0000000 |
Tabla cruzada
Posterior a la tabla de frecuencia, se realizó una tabla cruzada donde se visualizó como es la relación respecto a la variable de salario diario por género en la empresa
proportion1 %>%
kbl() %>%
kable_material (c("striped","hover"))
| FEMENINO | MASCULINO | |
|---|---|---|
| 144.45 | 0.0265487 | 0.0000000 |
| 151.61 | 0.0619469 | 0.0353982 |
| 151.67 | 0.0088496 | 0.0265487 |
| 152.86 | 0.0088496 | 0.0000000 |
| 175.79 | 0.0000000 | 0.0088496 |
| 176.72 | 0.0619469 | 0.1504425 |
| 180.68 | 0.3008850 | 0.2212389 |
| 181.68 | 0.0088496 | 0.0000000 |
| 184.68 | 0.0088496 | 0.0000000 |
| 185.68 | 0.0088496 | 0.0000000 |
| 208.65 | 0.0088496 | 0.0000000 |
| 240.71 | 0.0088496 | 0.0000000 |
| 240.75 | 0.0000000 | 0.0088496 |
| 260.01 | 0.0088496 | 0.0000000 |
| 279.61 | 0.0000000 | 0.0088496 |
| 337.05 | 0.0088496 | 0.0000000 |
| 441.37 | 0.0088496 | 0.0000000 |
location <- CrossTable(bdcol$salario_diario, bdcol$genero, prop.t=TRUE, prop.r=TRUE, prop.c=TRUE)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 113
##
##
## | bdcol$genero
## bdcol$salario_diario | FEMENINO | MASCULINO | Row Total |
## ---------------------|-----------|-----------|-----------|
## 144.45 | 3 | 0 | 3 |
## | 1.177 | 1.381 | |
## | 1.000 | 0.000 | 0.027 |
## | 0.049 | 0.000 | |
## | 0.027 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## 151.61 | 7 | 4 | 11 |
## | 0.190 | 0.223 | |
## | 0.636 | 0.364 | 0.097 |
## | 0.115 | 0.077 | |
## | 0.062 | 0.035 | |
## ---------------------|-----------|-----------|-----------|
## 151.67 | 1 | 3 | 4 |
## | 0.622 | 0.730 | |
## | 0.250 | 0.750 | 0.035 |
## | 0.016 | 0.058 | |
## | 0.009 | 0.027 | |
## ---------------------|-----------|-----------|-----------|
## 152.86 | 1 | 0 | 1 |
## | 0.392 | 0.460 | |
## | 1.000 | 0.000 | 0.009 |
## | 0.016 | 0.000 | |
## | 0.009 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## 175.79 | 0 | 1 | 1 |
## | 0.540 | 0.633 | |
## | 0.000 | 1.000 | 0.009 |
## | 0.000 | 0.019 | |
## | 0.000 | 0.009 | |
## ---------------------|-----------|-----------|-----------|
## 176.72 | 7 | 17 | 24 |
## | 2.738 | 3.212 | |
## | 0.292 | 0.708 | 0.212 |
## | 0.115 | 0.327 | |
## | 0.062 | 0.150 | |
## ---------------------|-----------|-----------|-----------|
## 180.68 | 34 | 25 | 59 |
## | 0.145 | 0.170 | |
## | 0.576 | 0.424 | 0.522 |
## | 0.557 | 0.481 | |
## | 0.301 | 0.221 | |
## ---------------------|-----------|-----------|-----------|
## 181.68 | 1 | 0 | 1 |
## | 0.392 | 0.460 | |
## | 1.000 | 0.000 | 0.009 |
## | 0.016 | 0.000 | |
## | 0.009 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## 184.68 | 1 | 0 | 1 |
## | 0.392 | 0.460 | |
## | 1.000 | 0.000 | 0.009 |
## | 0.016 | 0.000 | |
## | 0.009 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## 185.68 | 1 | 0 | 1 |
## | 0.392 | 0.460 | |
## | 1.000 | 0.000 | 0.009 |
## | 0.016 | 0.000 | |
## | 0.009 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## 208.65 | 1 | 0 | 1 |
## | 0.392 | 0.460 | |
## | 1.000 | 0.000 | 0.009 |
## | 0.016 | 0.000 | |
## | 0.009 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## 240.71 | 1 | 0 | 1 |
## | 0.392 | 0.460 | |
## | 1.000 | 0.000 | 0.009 |
## | 0.016 | 0.000 | |
## | 0.009 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## 240.75 | 0 | 1 | 1 |
## | 0.540 | 0.633 | |
## | 0.000 | 1.000 | 0.009 |
## | 0.000 | 0.019 | |
## | 0.000 | 0.009 | |
## ---------------------|-----------|-----------|-----------|
## 260.01 | 1 | 0 | 1 |
## | 0.392 | 0.460 | |
## | 1.000 | 0.000 | 0.009 |
## | 0.016 | 0.000 | |
## | 0.009 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## 279.61 | 0 | 1 | 1 |
## | 0.540 | 0.633 | |
## | 0.000 | 1.000 | 0.009 |
## | 0.000 | 0.019 | |
## | 0.000 | 0.009 | |
## ---------------------|-----------|-----------|-----------|
## 337.05 | 1 | 0 | 1 |
## | 0.392 | 0.460 | |
## | 1.000 | 0.000 | 0.009 |
## | 0.016 | 0.000 | |
## | 0.009 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## 441.37 | 1 | 0 | 1 |
## | 0.392 | 0.460 | |
## | 1.000 | 0.000 | 0.009 |
## | 0.016 | 0.000 | |
## | 0.009 | 0.000 | |
## ---------------------|-----------|-----------|-----------|
## Column Total | 61 | 52 | 113 |
## | 0.540 | 0.460 | |
## ---------------------|-----------|-----------|-----------|
##
##
kbl(location) %>%
kable_classic()
|
|
|
|
De esta forma, es posible observar que el salario con mayor frecuencia tanto en hombres como mujeres es de $180.68.
En la tabla se presentan los datos estadísticos descriptivos de las diversas variables de la base, donde se puede observar que el promedio del salario diario de colaboradores es de $181. Mientras que el resto de las variables tienen una tendencia a ser datos cualitativos, los cuales se podrán conocer más a detalle en las siguientes gráficas.
describe (bdcol)
## # A tibble: 5 × 26
## descri…¹ n na mean sd se_mean IQR skewn…² kurto…³ p00 p01
## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 numero_… 113 0 75.9 53.9 5.07 96 0.400 -1.24 1 2.12
## 2 edad 113 0 36.1 12.8 1.21 19 0.558 -0.538 18 19
## 3 antigue… 113 0 1.42 2.52 0.237 2 2.43 5.98 0 0
## 4 BAJA 113 0 0.345 0.961 0.0904 0 2.45 4.05 0 0
## 5 salario… 113 0 181. 34.6 3.26 3.96 4.96 31.9 144. 144.
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## # p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## # p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## # variable names ¹described_variables, ²skewness, ³kurtosis
En el caso de las bajas, se observa que el promedio de días trabajados son 84, por lo que eso estima su trabajo antes de salirse, y su salario promedio por parte de IMSS es de $179, ligeramente menor que el salario promedio diario de colaboradores.
describe (bdbaj)
## # A tibble: 3 × 26
## described_…¹ n na mean sd se_mean IQR skewn…² kurto…³ p00 p01
## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 edad 237 0 30.5 10.0 0.651 14 0.541 0.216 0 18
## 2 dias_de_tra… 237 0 83.4 227. 14.7 40 5.40 33.2 0 0
## 3 salario_imss 237 0 179. 25.4 1.65 0 9.51 115. 144. 152.
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## # p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## # p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## # variable names ¹described_variables, ²skewness, ³kurtosis
Histograma
Continuando con los gráficos, para el siguiente histograma, se analizó la edad y la frecuencia que tiene. En este caso, se puede observar que la edad de los empleados con mayor presencia dentro de la empresa, es de 20-40 años.
hist(bdcol$edad, freq=TRUE, col='Orange', main="Histograma Edad",xlab="Edad en Años")
Gráfica de Pie
En la siguiente gráfica se puede observar la cantidad de personas que pertenecen al género femenino vs masculino, siendo las mujeres las que mayor porcentaje tienen de formar parte de la empresa FORM.
pie(prop.table(table(bdcol$genero)),col=c("orange","lightsteelblue"),main="Genero", ylab ="Frecuencias",las=1)
Bar Plots
En la siguiente gráfica de barras, se puede observar la cantidad de género por antigüedad, visualizando que existen mas hombres con mayor antigüedad en la empresa FORM.
ggplot(bdcol, aes(genero,antiguedad,fill=genero)) +
geom_bar(stat = "identity") +
scale_fill_brewer () + ggtitle(" Antiguedad por Genero")
En esta otra gráfica de barras, se muestra la cantidad de salario (IMSS) que ganan tanto los hombres como mujeres dependiendo de su estado civil, visualizando que los solteros son quienes representan el mayor porcentaje, mayoritariamente mujeres.
ggplot(bdbaj, aes(x=genero, y=salario_imss, fill=genero)) +
geom_bar(stat="identity") +
facet_grid(~estado_civil) + scale_fill_brewer()
El área comercial y de servicio al cliente es la encargada de establecer la metodología mediante la cual se lleva a cabo el proceso comercial de Form en sus diferentes etapas:
Delivery Plan muestra las entregas que ya estan fijas con cliente en cantidad y fecha, adicional plasmando la proyección a futuro. En este caso, la segunda base de datos analizada es esta, la cual contiene los clientes, fechas y unidades. Se analizarán los datos estadísticos de las entregas.
bdplan <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Delivery Plan BD FINAL.csv")
summary(bdplan)
## CLIENTE.PLANTA PROYECTO ID.ODOO ITEM
## Length:231 Length:231 Length:231 Length:231
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## JUNIO JULIO AGOSTO SEPTIEMBRE
## Min. : 0.00 Min. : 0.0 Min. : 0.00 Min. : 0
## 1st Qu.: 0.00 1st Qu.: 0.0 1st Qu.: 0.00 1st Qu.: 0
## Median : 0.00 Median : 0.0 Median : 0.00 Median : 0
## Mean : 29.06 Mean : 135.9 Mean : 77.45 Mean : 81
## 3rd Qu.: 0.00 3rd Qu.: 0.0 3rd Qu.: 0.00 3rd Qu.: 0
## Max. :1280.00 Max. :13120.0 Max. :3200.00 Max. :3200
## OCTUBRE NOVIEMBRE DICIEMBRE ene.22
## Min. : 0.0 Min. : 0.00 Min. : 0.0 Min. : 0.00
## 1st Qu.: 0.0 1st Qu.: 0.00 1st Qu.: 0.0 1st Qu.: 0.00
## Median : 0.0 Median : 0.00 Median : 0.0 Median : 0.00
## Mean : 62.0 Mean : 89.69 Mean : 100.4 Mean : 82.37
## 3rd Qu.: 11.5 3rd Qu.: 4.00 3rd Qu.: 1.5 3rd Qu.: 26.50
## Max. :3200.0 Max. :6400.00 Max. :6400.0 Max. :3200.00
## Feb.22 Mar.22 abr.22 May.22
## Min. : 0.0 Min. : 0.0 Min. : 0.0 Min. : 0.0
## 1st Qu.: 0.0 1st Qu.: 0.0 1st Qu.: 0.0 1st Qu.: 0.0
## Median : 0.0 Median : 0.0 Median : 0.0 Median : 0.0
## Mean : 103.5 Mean : 153.9 Mean : 186.5 Mean : 187.6
## 3rd Qu.: 0.0 3rd Qu.: 20.0 3rd Qu.: 24.0 3rd Qu.: 22.0
## Max. :9600.0 Max. :9600.0 Max. :16354.0 Max. :17665.0
## Jun.22 Jul.22 ago.22 Sep.22
## Min. : 0.0 Min. : 0.0 Min. : 0.0 Min. : 0.0
## 1st Qu.: 0.0 1st Qu.: 0.0 1st Qu.: 0.0 1st Qu.: 0.0
## Median : 0.0 Median : 0.0 Median : 0.0 Median : 0.0
## Mean : 171.2 Mean : 316.9 Mean : 131.5 Mean : 272.3
## 3rd Qu.: 1.0 3rd Qu.: 15.5 3rd Qu.: 0.0 3rd Qu.: 0.0
## Max. :11050.0 Max. :25900.0 Max. :13200.0 Max. :29379.0
## OCTUBRE.22 Nov.22 dic.22 ene.23
## Min. : 0.0 Min. : 0.000 Min. : 0.000 Min. : 0.0000
## 1st Qu.: 0.0 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.0000
## Median : 0.0 Median : 0.000 Median : 0.000 Median : 0.0000
## Mean : 120.9 Mean : 2.113 Mean : 1.225 Mean : 0.5974
## 3rd Qu.: 0.0 3rd Qu.: 0.000 3rd Qu.: 0.000 3rd Qu.: 0.0000
## Max. :16421.0 Max. :324.000 Max. :276.000 Max. :138.0000
## Feb.23 Mar.23 TOTAL.MESES
## Min. :0 Min. :0 Min. : 0
## 1st Qu.:0 1st Qu.:0 1st Qu.: 16
## Median :0 Median :0 Median : 115
## Mean :0 Mean :0 Mean : 2306
## 3rd Qu.:0 3rd Qu.:0 3rd Qu.: 724
## Max. :0 Max. :0 Max. :136754
str(bdplan)
## 'data.frame': 231 obs. of 27 variables:
## $ CLIENTE.PLANTA: chr "STB3" "STB4" "STB5" "STB6" ...
## $ PROYECTO : chr "CANASTILLA GRIS" "Caja inter chica" "CHAROLA G09" "" ...
## $ ID.ODOO : chr "15.785" "" "19.12" "19.211" ...
## $ ITEM : chr "CABLE SET CAJA BACK UP CANASTILLA" "Caja intercompañía chica" "CHAROLA G09 915898 " "MOTOR GEAR BOX" ...
## $ JUNIO : int 0 0 0 0 0 0 0 0 0 192 ...
## $ JULIO : int 140 0 0 0 0 300 0 0 0 463 ...
## $ AGOSTO : int 530 0 0 0 0 0 0 50 0 226 ...
## $ SEPTIEMBRE : int 0 0 0 0 0 0 0 0 0 0 ...
## $ OCTUBRE : int 200 0 0 0 0 0 0 0 0 0 ...
## $ NOVIEMBRE : int 0 0 0 0 0 0 0 0 0 0 ...
## $ DICIEMBRE : int 150 184 75 1 0 0 9 0 0 0 ...
## $ ene.22 : int 230 125 126 0 0 0 0 0 0 0 ...
## $ Feb.22 : int 500 55 10 1 0 0 0 0 0 0 ...
## $ Mar.22 : int 0 55 5 0 0 0 0 0 0 0 ...
## $ abr.22 : int 0 0 0 1 0 400 0 0 0 0 ...
## $ May.22 : int 0 0 15 3 0 0 0 0 0 0 ...
## $ Jun.22 : int 200 0 5 2 100 0 0 0 0 0 ...
## $ Jul.22 : int 900 0 10 5 100 0 0 0 0 0 ...
## $ ago.22 : int 1000 0 0 3 0 0 0 0 0 0 ...
## $ Sep.22 : int 0 0 5 4 0 0 0 0 0 0 ...
## $ OCTUBRE.22 : int 0 0 50 6 0 0 0 0 0 0 ...
## $ Nov.22 : int 0 0 125 7 0 0 0 0 0 0 ...
## $ dic.22 : int 0 0 0 7 0 0 0 0 0 0 ...
## $ ene.23 : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Feb.23 : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Mar.23 : int 0 0 0 0 0 0 0 0 0 0 ...
## $ TOTAL.MESES : int 3850 419 426 40 200 700 9 50 0 881 ...
Técnica 1. Acondicionar nombres a formato óptimo para R
bdplan <- clean_names(bdplan)
Técnica 2 Utilizar Pivote para unir los pedidos programados en una sola columna
bdplan <- bdplan %>% dplyr::rename(cliente=cliente_planta,
A_jun_21=junio,
B_jul_21=julio,
C_ago_21=agosto,
D_sep_21=septiembre,
E_oct_21=octubre,
F_nov_21=noviembre,
G_dic_21=diciembre,
H_ene_22=ene_22,
I_feb_22=feb_22,
J_mar_22=mar_22,
K_abr_22=abr_22,
L_may_22=may_22,
M_jun_22=jun_22,
N_jul_22=jul_22,
O_ago_22=ago_22,
P_sep_22=sep_22,
Q_oct_22=octubre_22,
R_nov_22=nov_22,
S_dic_22=dic_22,
T_ene_23=ene_23,
U_feb_23=feb_23,
V_mar_23=feb_23
)
colnames(bdplan)
## [1] "cliente" "proyecto" "id_odoo" "item" "A_jun_21"
## [6] "B_jul_21" "C_ago_21" "D_sep_21" "E_oct_21" "F_nov_21"
## [11] "G_dic_21" "H_ene_22" "I_feb_22" "J_mar_22" "K_abr_22"
## [16] "L_may_22" "M_jun_22" "N_jul_22" "O_ago_22" "P_sep_22"
## [21] "Q_oct_22" "R_nov_22" "S_dic_22" "T_ene_23" "V_mar_23"
## [26] "mar_23" "total_meses"
bdplan <- pivot_longer(bdplan, cols=5:14, names_to = "Mes", values_to = "Unidades")
str(bdplan)
## tibble [2,310 × 19] (S3: tbl_df/tbl/data.frame)
## $ cliente : chr [1:2310] "STB3" "STB3" "STB3" "STB3" ...
## $ proyecto : chr [1:2310] "CANASTILLA GRIS" "CANASTILLA GRIS" "CANASTILLA GRIS" "CANASTILLA GRIS" ...
## $ id_odoo : chr [1:2310] "15.785" "15.785" "15.785" "15.785" ...
## $ item : chr [1:2310] "CABLE SET CAJA BACK UP CANASTILLA" "CABLE SET CAJA BACK UP CANASTILLA" "CABLE SET CAJA BACK UP CANASTILLA" "CABLE SET CAJA BACK UP CANASTILLA" ...
## $ K_abr_22 : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
## $ L_may_22 : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
## $ M_jun_22 : int [1:2310] 200 200 200 200 200 200 200 200 200 200 ...
## $ N_jul_22 : int [1:2310] 900 900 900 900 900 900 900 900 900 900 ...
## $ O_ago_22 : int [1:2310] 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 ...
## $ P_sep_22 : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
## $ Q_oct_22 : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
## $ R_nov_22 : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
## $ S_dic_22 : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
## $ T_ene_23 : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
## $ V_mar_23 : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
## $ mar_23 : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
## $ total_meses: int [1:2310] 3850 3850 3850 3850 3850 3850 3850 3850 3850 3850 ...
## $ Mes : chr [1:2310] "A_jun_21" "B_jul_21" "C_ago_21" "D_sep_21" ...
## $ Unidades : int [1:2310] 0 140 530 0 200 0 150 230 500 0 ...
Técnica 3 Eliminación de ceros en la base de datos para eliminar rengoles/clientes sin registros
bd1 <- filter(bdplan, Unidades>0)
Eliminación de variables irrelevantes. En este caso, dado que previamente se unieron (merge) las variables de mes, solo se considera necesaria la variables de cliente, fecha y unidades.
bd2 <- bd1
bd2 <- subset (bd1, select = -c (proyecto, id_odoo, item, K_abr_22, L_may_22, M_jun_22,N_jul_22,O_ago_22, P_sep_22, Q_oct_22, R_nov_22, S_dic_22, T_ene_23, V_mar_23, mar_23, total_meses))
summary(bd2)
## cliente Mes Unidades
## Length:590 Length:590 Min. : 1.0
## Class :character Class :character 1st Qu.: 30.0
## Mode :character Mode :character Median : 80.0
## Mean : 358.4
## 3rd Qu.: 300.0
## Max. :13120.0
¿Cuántos registros y variables tiene la base de datos?
dim(bd2)
## [1] 590 3
Clasificación de variables
Variableplan<-c("`cliente`","`mes`","`unidades`")
Typeplan<-c("cualitativo", "cualitativo","cuantitativo (discreto)")
Escalaplan <- c("nominal", "ordinal", "razon")
tableplan<-data.frame(Variableplan,Typeplan,Escalaplan)
knitr::kable(tableplan)
| Variableplan | Typeplan | Escalaplan |
|---|---|---|
cliente
|
cualitativo | nominal |
mes
|
cualitativo | ordinal |
unidades
|
cuantitativo (discreto) | razon |
En la tabla se presentan los datos estadísticos descriptivos en específico para la variable de Unidades, donde se puede observar que el promedio para los clientes es de 358, con una desviación estándar de 1003, por lo que existe un amplio rango de datos entre las unidades.
describe (bd2)
## # A tibble: 1 × 26
## described_…¹ n na mean sd se_mean IQR skewn…² kurto…³ p00 p01
## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Unidades 590 0 358. 1003. 41.3 270 7.51 73.0 1 1
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## # p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## # p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## # variable names ¹described_variables, ²skewness, ³kurtosis
Bar Plots
En la siguiente gráfica, se puede inferir que el mes con mayor número de piezas programadas fué julio del 2021, sin embargo, se puede detectar un comportamiento a la alza a partir de los ultimos meses hasta el primer Q del siguiente año; por lo que se puede concluir que durante el último cuarto y primero del siguiente año, es cuando existe mayor demanda para FORM en contexto de piezas programadas.
ggplot(bd2, aes(Mes,Unidades)) +
geom_bar(stat = "identity") +
scale_fill_brewer() + ggtitle("Unidades por mes")
Time Series Plot
Con la siguiente gráfica, podemos corroborar la hipótesis de que existen picos de pedidos durante la segunda mitad del año, así como a finales de año y principios del siguiente, donde se trata de un comportamiento a la alza en ese sentido.
ggplot(bd2, aes(x = Mes, y = Unidades, group = cliente)) +
geom_line()+
ggtitle("Pedidos por Cliente")
El área comercial y de servicio al cliente es la encargada de establecer la metodología mediante la cual se lleva a cabo el proceso comercial de Form en sus diferentes etapas:
Delivery Performance es el resultado del Delivery Plan sobre las entregas, por lo que, en este caso la tercera base de datos analizada es está, la cual contiene información sobre los clientes y las diferencias entre pedidos.
performance <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/FORM - Delivery Performance.csv")
summary(performance)
## Target Cliente Vueltas Plan.arrival
## Min. :1 Length:1440 Min. :1.00 Min. : 0.000
## 1st Qu.:1 Class :character 1st Qu.:1.00 1st Qu.: 0.000
## Median :1 Mode :character Median :1.50 Median : 4.000
## Mean :1 Mean :1.75 Mean : 6.625
## 3rd Qu.:1 3rd Qu.:2.25 3rd Qu.:10.750
## Max. :1 Max. :3.00 Max. :20.000
## Real.arrival Real.departure Diference Date
## Min. : 0.000 Min. : 0.000 Min. :-14.3500 Length:1440
## 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.0000 Class :character
## Median : 0.000 Median : 0.000 Median : 0.0000 Mode :character
## Mean : 3.823 Mean : 4.142 Mean : 0.3155
## 3rd Qu.: 8.000 3rd Qu.: 9.000 3rd Qu.: 0.8000
## Max. :23.500 Max. :24.500 Max. : 20.0000
str (performance)
## 'data.frame': 1440 obs. of 8 variables:
## $ Target : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Cliente : chr "PRINTEL " "MAHLE" "MAHLE" "MAHLE" ...
## $ Vueltas : int 1 1 2 3 1 1 2 3 1 1 ...
## $ Plan.arrival : num 16 8 9 20 0 0 0 0 16 8 ...
## $ Real.arrival : num 16 8 9 20 0 0 0 0 16 8 ...
## $ Real.departure: num 19.3 8.55 10 21 0 0 0 0 18.1 9 ...
## $ Diference : num 3.3 0.55 1 1 0 0 0 0 2.1 1 ...
## $ Date : chr "02/01/22" "02/01/22" "02/01/22" "02/01/22" ...
Técnica 1. Remover valores irrelevantes
Eliminar columnas
performance <-subset (performance, select =-c(Target))
Técnica 2. Convertir tipos de datos
Se realizó esta tecnica debido a que la base de datos provee los estimados de entrega para los diferentes clientes, por lo que es sumamente importante mantener las fechas con su respectivo tipo de variable.
Cambiar de caracter a fecha
performance$Date <-as.Date(performance$Date,format ="%d/%m/%Y")
tibble(performance)
## # A tibble: 1,440 × 7
## Cliente Vueltas Plan.arrival Real.arrival Real.depart…¹ Difer…² Date
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <date>
## 1 "PRINTEL " 1 16 16 19.3 3.3 0022-01-02
## 2 "MAHLE" 1 8 8 8.55 0.55 0022-01-02
## 3 "MAHLE" 2 9 9 10 1 0022-01-02
## 4 "MAHLE" 3 20 20 21 1 0022-01-02
## 5 "MAGNA" 1 0 0 0 0 0022-01-02
## 6 "VARROC" 1 0 0 0 0 0022-01-02
## 7 "VARROC" 2 0 0 0 0 0022-01-02
## 8 "VARROC" 3 0 0 0 0 0022-01-02
## 9 "PRINTEL " 1 16 16 18.1 2.1 0022-01-03
## 10 "MAHLE" 1 8 8 9 1 0022-01-03
## # … with 1,430 more rows, and abbreviated variable names ¹Real.departure,
## # ²Diference
Técnica 3. Valores faltantes
Se realizó esta técnica con la finalidad de conocer si en la base de datos existen NA o similares que no sean validos para la información de los registros.
#¿Tenemos NA en la base de datos?
sum(is.na(performance))
## [1] 0
#¿Tenemos NA por variable?
sapply(performance,function(x)sum(is.na(x)))
## Cliente Vueltas Plan.arrival Real.arrival Real.departure
## 0 0 0 0 0
## Diference Date
## 0 0
#En caso de tener, borrar los registros NA
performance <- na.omit(performance)
summary(performance)
## Cliente Vueltas Plan.arrival Real.arrival
## Length:1440 Min. :1.00 Min. : 0.000 Min. : 0.000
## Class :character 1st Qu.:1.00 1st Qu.: 0.000 1st Qu.: 0.000
## Mode :character Median :1.50 Median : 4.000 Median : 0.000
## Mean :1.75 Mean : 6.625 Mean : 3.823
## 3rd Qu.:2.25 3rd Qu.:10.750 3rd Qu.: 8.000
## Max. :3.00 Max. :20.000 Max. :23.500
## Real.departure Diference Date
## Min. : 0.000 Min. :-14.3500 Min. :0022-01-02
## 1st Qu.: 0.000 1st Qu.: 0.0000 1st Qu.:0022-02-23
## Median : 0.000 Median : 0.0000 Median :0022-04-17
## Mean : 4.142 Mean : 0.3155 Mean :0022-04-16
## 3rd Qu.: 9.000 3rd Qu.: 0.8000 3rd Qu.:0022-06-08
## Max. :24.500 Max. : 20.0000 Max. :0022-07-23
¿Cuántos registros y variables tiene la base de datos?
dim(performance)
## [1] 1440 7
Clasificación de variables
variablesper <- c("`Cliente`","`Vueltas`","`Plan.arrival`","`Real.arrival`","`Plan.departure`","`Diference`","`Date`")
tiposper <- c("cualitativo ", "cuantitativo (discreto) ", "cuantitativo (continuo) ", "cuantitativo (continuo) ", "cuantitativo (continuo) ", "cuantitativo (continuo) ", "cualitativo ")
escalasper <- c("nominal", "razon", "razon", "razon", "razon", "razon", "ordinal")
tableper <- data.frame (variablesper, tiposper, escalasper)
knitr::kable(tableper)
| variablesper | tiposper | escalasper |
|---|---|---|
Cliente
|
cualitativo | nominal |
Vueltas
|
cuantitativo (discreto) | razon |
Plan.arrival
|
cuantitativo (continuo) | razon |
Real.arrival
|
cuantitativo (continuo) | razon |
Plan.departure
|
cuantitativo (continuo) | razon |
Diference
|
cuantitativo (continuo) | razon |
Date
|
cualitativo | ordinal |
Tabla de frecuencia
Se realizó una tabla de frecuencia de la variable plan arrival con el objetivo de validar las frecuencias en el estimado de llegada para cada uno de los clientes.
proportion3 <- prop.table(table(performance$Cliente,performance$Plan.arrival))
proportion3 %>%
kbl() %>%
kable_styling()
| 0 | 8 | 9 | 16 | 20 | |
|---|---|---|---|---|---|
| MAGNA | 0.125 | 0.000 | 0.000 | 0.000 | 0.000 |
| MAHLE | 0.000 | 0.125 | 0.125 | 0.000 | 0.125 |
| PRINTEL | 0.000 | 0.000 | 0.000 | 0.125 | 0.000 |
| VARROC | 0.375 | 0.000 | 0.000 | 0.000 | 0.000 |
Tabla cruzada
Posterior a la tabla de frecuencia, se realizó una tabla cruzada donde se visualizó como es la proporcion respecto a la variable de las estimaciones de llegada de pedidos por cada cliente.
proportion3 %>%
kbl() %>%
kable_material (c("striped","hover"))
| 0 | 8 | 9 | 16 | 20 | |
|---|---|---|---|---|---|
| MAGNA | 0.125 | 0.000 | 0.000 | 0.000 | 0.000 |
| MAHLE | 0.000 | 0.125 | 0.125 | 0.000 | 0.125 |
| PRINTEL | 0.000 | 0.000 | 0.000 | 0.125 | 0.000 |
| VARROC | 0.375 | 0.000 | 0.000 | 0.000 | 0.000 |
location3 <- CrossTable(performance$Cliente, performance$Plan.arrival, prop.t=TRUE, prop.r=TRUE, prop.c=TRUE)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 1440
##
##
## | performance$Plan.arrival
## performance$Cliente | 0 | 8 | 9 | 16 | 20 | Row Total |
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
## MAGNA | 180 | 0 | 0 | 0 | 0 | 180 |
## | 90.000 | 22.500 | 22.500 | 22.500 | 22.500 | |
## | 1.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.125 |
## | 0.250 | 0.000 | 0.000 | 0.000 | 0.000 | |
## | 0.125 | 0.000 | 0.000 | 0.000 | 0.000 | |
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
## MAHLE | 0 | 180 | 180 | 0 | 180 | 540 |
## | 270.000 | 187.500 | 187.500 | 67.500 | 187.500 | |
## | 0.000 | 0.333 | 0.333 | 0.000 | 0.333 | 0.375 |
## | 0.000 | 1.000 | 1.000 | 0.000 | 1.000 | |
## | 0.000 | 0.125 | 0.125 | 0.000 | 0.125 | |
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
## PRINTEL | 0 | 0 | 0 | 180 | 0 | 180 |
## | 90.000 | 22.500 | 22.500 | 1102.500 | 22.500 | |
## | 0.000 | 0.000 | 0.000 | 1.000 | 0.000 | 0.125 |
## | 0.000 | 0.000 | 0.000 | 1.000 | 0.000 | |
## | 0.000 | 0.000 | 0.000 | 0.125 | 0.000 | |
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
## VARROC | 540 | 0 | 0 | 0 | 0 | 540 |
## | 270.000 | 67.500 | 67.500 | 67.500 | 67.500 | |
## | 1.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.375 |
## | 0.750 | 0.000 | 0.000 | 0.000 | 0.000 | |
## | 0.375 | 0.000 | 0.000 | 0.000 | 0.000 | |
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
## Column Total | 720 | 180 | 180 | 180 | 180 | 1440 |
## | 0.500 | 0.125 | 0.125 | 0.125 | 0.125 | |
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
##
##
kbl(location3) %>%
kable_classic()
|
|
|
|
De esta forma, se puede visualizar que el cliente VARROC tiene la mayor frecuencia de llegada planeada de pedidos en 0, por lo que será importante evaluar su desempeño de pedidos.
En la tabla se presentan los datos estadísticos descriptivos de las diversas variables de la base, donde se puede observar que el promedio de las vueltas es de 1.75, mostrando un indicador adecuado respecto a las entregas de los pedidos.
Respecto al performance directo de los pedidos, la llegada planeada tiene un promedio de 6.6, la llegada real de 3.8 y la salida real de 4.4; mostrando que el estimado de la llegada es mayor que lo que realmente esta sucediendo en la empresa.
La diferencia es una variable que relaciona la variación entre la entrada y salida real de los pedidos, mostrando un promedio de 0.32, por lo que no indica alguna preocupación evidente.
describe.by (performance)
## vars n mean sd median trimmed mad min max range skew
## Cliente* 1 1440 2.75 1.09 2.5 2.81 1.48 1.00 4.0 3.00 -0.07
## Vueltas 2 1440 1.75 0.83 1.5 1.69 0.74 1.00 3.0 2.00 0.49
## Plan.arrival 3 1440 6.62 7.50 4.0 5.78 5.93 0.00 20.0 20.00 0.61
## Real.arrival 4 1440 3.82 6.51 0.0 2.33 0.00 0.00 23.5 23.50 1.51
## Real.departure 5 1440 4.14 6.95 0.0 2.60 0.00 0.00 24.5 24.50 1.43
## Diference 6 1440 0.32 0.92 0.0 0.21 0.00 -14.35 20.0 34.35 2.73
## Date 7 1440 NaN NA NA NaN NA Inf -Inf -Inf NA
## kurtosis se
## Cliente* -1.44 0.03
## Vueltas -1.37 0.02
## Plan.arrival -1.13 0.20
## Real.arrival 0.95 0.17
## Real.departure 0.69 0.18
## Diference 210.27 0.02
## Date NA NA
Dispersión plot
En dicha gráfica de boxplot se presenta como se encuentran posicionados los datos de la base, tanto el estimado (Plan arrival), como la llegada real (real arrival) y la salida real (real departure) de los pedidos realizados por todos los clientes, visualizando que las llegadas reales son menores a las planeadas, por lo que FORM deberá evaluar su desempeño.
Delivery <- data.frame(performance$Cliente, performance$Plan.arrival, performance$Real.arrival, performance$Real.departure, performance$Date)
colnames(Delivery)<-c('Cliente', 'Plan.arrival', 'Real.arrival', 'Real.departure', 'Date')
Realarrival_boxplot = subset(Delivery, select =-c (Cliente, Date))
boxplot(Realarrival_boxplot,data=data,main="Deliverys",
col=heat.colors (ncol(trees)))
Bar Plot
En la siguiente gráfica se puede observar el desempeño de las llegadas reales de los pedidos por cliente, validando que MAHLE es el que tiene mayor promedio, siendo este mayor a 8; manteniendo un filtro de color que indican las vueltas en la logística, siendo de 2. Por lo que es importante validar para FORM, una mayor distribución de los pedidos entre otros clientes, para evitar depender de solo 1 o 2.
Realarrival<-performance %>%
dplyr::select(Cliente,Real.arrival,Vueltas) %>% group_by(Cliente) %>%
dplyr::summarise(across(everything(),mean,na.rm=TRUE)) %>% arrange(desc(Real.arrival))
ggplot(Realarrival, aes(x=reorder(Cliente, Real.arrival), y=Real.arrival, fill=(Vueltas))) +
geom_bar(stat="identity")+
coord_flip()+
guides(fill=guide_legend(reverse=FALSE))
Gráficos de normalidad
Observando las diversas variables en la base de datos, se decidió utilizar la variable de diferencia (entre la llegada real y la salida real) para conocer su comportamiento, validando que la mayoria de estas diferencias tienen una distribucion normal, en un rango de entre 2 y -2, a excepción de 3 datos atipicos, por lo que, la diferencia entre las llegadas y salidas de los pedidos suelen mantener un control estándar.
plot_normality(performance,Diference, col='#FF7F24')
El área de Producción se encarga de establecer la metodología para verificar el cumplimiento de los requisitos del producto durante todas y cada una de las etapas del proceso productivo, de acuerdo con criterios de aceptación establecidos. Y con esto, la liberación de los productos una vez validados por el/los responsables del proceso.
Su alcance aplica tanto para productos terminados, como para productos en cada etapa del proceso productivo (desde el recibo de materia prima para inicio de proceso, fabricación hasta la entrega del producto a PT).
En este caso, la cuarta base de datos analizada es la de Producción donde se muestra informacioón sobre el producto, sus tiempos de proceso y lugares de origen en la misma empresa, a lo cual se analizarán sus datos estadísticos.
produccion <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/produccion.csv")
summary(produccion)
## fecha no cliente id_form
## Length:5411 Min. : 1.00 Length:5411 Length:5411
## Class :character 1st Qu.: 23.00 Class :character Class :character
## Mode :character Median : 46.00 Mode :character Mode :character
## Mean : 48.55
## 3rd Qu.: 72.00
## Max. :121.00
##
## producto piezas_prog tiempo_minutos hora_fin
## Length:5411 Length:5411 Length:5411 Length:5411
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## estacion_arranque laminas_procesadas inicio_setup fin_inicio_su
## Length:5411 Length:5411 Length:5411 Length:5411
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## inicio_proceso fin_proceso tiempo_calidad tiempo_materiales
## Length:5411 Length:5411 Length:5411 Min. : 0.000
## Class :character Class :character Class :character 1st Qu.: 0.000
## Mode :character Mode :character Mode :character Median : 0.000
## Mean : 4.568
## 3rd Qu.: 6.000
## Max. :60.000
## NA's :5152
## merma
## Length:5411
## Class :character
## Mode :character
##
##
##
##
str(produccion)
## 'data.frame': 5411 obs. of 17 variables:
## $ fecha : chr "15/07/22" "15/07/22" "15/07/22" "15/07/22" ...
## $ no : int 1 2 3 4 5 6 7 8 9 10 ...
## $ cliente : chr "STABILUS 1" "STABILUS 1" "STABILUS 1" "STABILUS 1" ...
## $ id_form : chr "" "N.A." "CORTE." "ST-026-13892" ...
## $ producto : chr "STABOMAT 643920. CAJA IMP. CORTE. AZUL.PC0011. ( 2 Pza/Caja)." "KR55006. CAJA IMP. AZUL. CORTE. ( 1 pieza)." "241B KIT. EXPORT. INSERTO CON INSERTO. CORTE para Troquel." "MOPAR GDE. 754549. CAJA IMP. NEGRA. PC0022. ( PC0043: solo si autoriza Calidad). ( 1 Pieza). CORTE." ...
## $ piezas_prog : chr "200" "100" "216" "100" ...
## $ tiempo_minutos : chr "20" "15" "20" "10" ...
## $ hora_fin : chr "9:20" "9:35" "9:55" "10:05" ...
## $ estacion_arranque : chr "C1" "C1" "C1" "C1" ...
## $ laminas_procesadas: chr "402" "134" "110" "100" ...
## $ inicio_setup : chr "9:05" "10:05" "9:40" "11.2" ...
## $ fin_inicio_su : chr "9.1" "10:16" "9:43" "11:26" ...
## $ inicio_proceso : chr "9:12" "10.17" "9:45" "11:30" ...
## $ fin_proceso : chr "10:04" "11:05" "9.57" "11:49" ...
## $ tiempo_calidad : chr "1" "1" "1" "1" ...
## $ tiempo_materiales : int NA NA NA 7 NA NA NA NA NA NA ...
## $ merma : chr "" "" "" "" ...
Técnica 1 Eliminar columnas que no se utilizarán
prod2 <- subset(produccion,select = -c (no, id_form, producto, hora_fin, inicio_setup, fin_inicio_su, inicio_proceso, fin_proceso, tiempo_materiales, merma))
str(prod2)
## 'data.frame': 5411 obs. of 7 variables:
## $ fecha : chr "15/07/22" "15/07/22" "15/07/22" "15/07/22" ...
## $ cliente : chr "STABILUS 1" "STABILUS 1" "STABILUS 1" "STABILUS 1" ...
## $ piezas_prog : chr "200" "100" "216" "100" ...
## $ tiempo_minutos : chr "20" "15" "20" "10" ...
## $ estacion_arranque : chr "C1" "C1" "C1" "C1" ...
## $ laminas_procesadas: chr "402" "134" "110" "100" ...
## $ tiempo_calidad : chr "1" "1" "1" "1" ...
Técnica 2. Convertir valor de variables
prod2$piezas_prog<-as.numeric(prod2$piezas_prog)
prod2$tiempo_minutos<-as.numeric(prod2$tiempo_minutos)
prod2$laminas_procesadas<-as.numeric(prod2$laminas_procesadas)
prod2$tiempo_calidad<-as.numeric(prod2$tiempo_calidad)
prod2$cliente<-as.factor(prod2$cliente)
prod2$estacion_arranque<-as.factor(prod2$estacion_arranque)
colSums(is.na(prod2))
## fecha cliente piezas_prog tiempo_minutos
## 0 0 830 3332
## estacion_arranque laminas_procesadas tiempo_calidad
## 0 2208 2919
Técnica 3 Cambiamos los na´s por la mediana
prod2<-prod2 %>% mutate(piezas_prog=ifelse(is.na(piezas_prog),median(piezas_prog,na.rm=T),piezas_prog))
prod2<-prod2 %>% mutate(tiempo_minutos=ifelse(is.na(tiempo_minutos),median(tiempo_minutos,na.rm=T),tiempo_minutos))
prod2<-prod2 %>% mutate(laminas_procesadas=ifelse(is.na(laminas_procesadas),median(laminas_procesadas,na.rm=T),laminas_procesadas))
prod2<-prod2 %>% mutate(tiempo_calidad=ifelse(is.na(tiempo_calidad),median(tiempo_calidad,na.rm=T),tiempo_calidad))
Técnica 4 Convertimos la fecha a formato de fecha
prod2$fecha<-as.Date(prod2$fecha,format="%m/%d/%Y")
summary(prod2)
## fecha cliente piezas_prog tiempo_minutos
## Min. :0022-01-09 STABILUS 1:1635 Min. : 0.0 Min. : 0.3854
## 1st Qu.:0022-07-09 TRMX : 981 1st Qu.: 25.0 1st Qu.: 20.0000
## Median :0022-08-04 STABILUS 3: 923 Median : 60.0 Median : 20.0000
## Mean :0022-07-11 YANFENG : 646 Mean : 111.9 Mean : 21.1835
## 3rd Qu.:0022-08-10 DENSO : 524 3rd Qu.: 150.0 3rd Qu.: 20.0000
## Max. :0022-12-09 VARROC : 395 Max. :2000.0 Max. :150.0000
## NA's :3412 (Other) : 307
## estacion_arranque laminas_procesadas tiempo_calidad
## : 546 Min. : 0.00 Min. : 0.000
## 0 : 478 1st Qu.: 0.00 1st Qu.: 1.000
## TROQUEL : 422 Median : 11.00 Median : 1.000
## CAJAS : 331 Mean : 47.98 Mean : 1.046
## ROTATIVA: 270 3rd Qu.: 28.50 3rd Qu.: 1.000
## C3 : 263 Max. :1263.00 Max. :48.000
## (Other) :3101
¿Cuántos registros y variables tiene la base de datos?
dim(prod2)
## [1] 5411 7
Clasificación de variables
variablespro <- c("`fecha`","`cliente`","`piezas_prog`","`tiempo_minutos`","`estacion_arranque`","`laminas_procesadas`","`tiempo_calidad`")
tipospro <- c("cuantitativo (discreto) ", "cualitativo ", "cuantitativo (discreto) ", "cuantitativo (continuo) ", "cualitativo", "cuantitativo (discreto) ", "cuantitativo (continuo)")
escalaspro <- c("razon", "nominal", "razon", "intervalo", "nominal", "razon", "razon")
tablepro <- data.frame (variablespro, tipospro, escalaspro)
knitr::kable(tablepro)
| variablespro | tipospro | escalaspro |
|---|---|---|
fecha
|
cuantitativo (discreto) | razon |
cliente
|
cualitativo | nominal |
piezas_prog
|
cuantitativo (discreto) | razon |
tiempo_minutos
|
cuantitativo (continuo) | intervalo |
estacion_arranque
|
cualitativo | nominal |
laminas_procesadas
|
cuantitativo (discreto) | razon |
tiempo_calidad
|
cuantitativo (continuo) | razon |
En la tabla se presentan los datos estadísticos descriptivos para las diversas variables de la base de datos, en donde se puede observar que el promedio de piezas programadas es de 112, mientras que el de laminas procesadas es de 48. Por otro lado, se visualiza que el tiempo promedio de calidad es 1.05 con una desviación estándar de 1.71, por lo que la mayoría del tiempo de calidad para los clientes se encuentra dentro del mismo rango.
describe.by (prod2)
## vars n mean sd median trimmed mad min max
## fecha 1 1999 NaN NA NA NaN NA Inf -Inf
## cliente* 2 5411 6.97 2.61 7 6.98 1.48 1.00 12
## piezas_prog 3 5411 111.95 143.38 60 82.02 59.30 0.00 2000
## tiempo_minutos 4 5411 21.18 9.45 20 20.10 0.00 0.39 150
## estacion_arranque* 5 5411 226.05 144.05 326 238.00 43.00 1.00 356
## laminas_procesadas 6 5411 47.98 100.83 11 23.57 16.31 0.00 1263
## tiempo_calidad 7 5411 1.05 1.71 1 0.94 0.00 0.00 48
## range skew kurtosis se
## fecha -Inf NA NA NA
## cliente* 11.00 0.07 0.23 0.04
## piezas_prog 2000.00 3.31 18.74 1.95
## tiempo_minutos 149.61 4.85 36.43 0.13
## estacion_arranque* 355.00 -0.64 -1.37 1.96
## laminas_procesadas 1263.00 4.40 31.85 1.37
## tiempo_calidad 48.00 14.05 269.32 0.02
Gráfica de pie
En la siguiente gráfica es posible observar la variedad de clientes que actualmente FORM tiene y con los que tiene una programación de piezas importantes, siendo STABILUS 1 el de mayor proporción.
pie(prop.table(table(prod2$cliente)),col=c("#7FFFD4","#FF7F50","#CAFF70","#FFD700","#B2DFEE","#FFAEB9", "#FFA07A","#B3EE3A","#FF3E96", "#DDA0DD", "red"),main="Clientes de FORM",las=1)
Scatter Plot
En la siguiente gráfica se puede observar la dispersión de las piezas programadas vs las laminas procesadas, en donde se puede observar que en cuanto menos piezas programadas, más laminas procesadas, y viceversa. Por lo que, será importante considerar que tipo de material/ producto es más importante para FORM.
plot(prod2$piezas_prog,prod2$laminas_procesadas, col="orange", xlab="Piezas Programadas",ylab="Laminas Procesadas")
En la gráfica a continuación, es posible observar la relación de las laminas procesadas vs el tiempo en minutos, en donde se visualiza que la empresa mantiene una estabilidad en hacer un intervalo pequeño de laminas procesadas para mantener un tiempo en minutos bajo.
plot(prod2$laminas_procesadas,prod2$tiempo_minutos, col="lightsteelblue", xlab="Laminas Programadas",ylab="Tiempo en minutos")
Bar Plots
En la siguiente gráfica se muestra la cantidad de laminas procesadas por cliente, en donde es posible observar que el cliente STABILUS 1 es al que mayor surtido en producción de laminas le suministran.
Cliente <- data.frame(prod2$cliente,prod2$laminas_procesadas)
colnames(Cliente)<-c('Cliente','Laminas')
ggplot(data = Cliente, aes (x=Cliente, y=Laminas)) +
geom_bar(stat = "identity", fill="orange") + scale_fill_grey() +
labs(title = "Laminas por cliente",
x = "Cliente")
La merma es la pérdida de material que experimentan las existencias (stock). En esta quinta base de datos analizada se muestra información sobre la cantidad de kilos de merma que se producen en FORM, a lo cual se analizarán sus datos estadísticos.
merma <- read.csv("/Users/Karen/Downloads/FORM - Merma.csv")
summary(merma)
## Fecha Mes Kilos
## Length:50 Length:50 Min. : 790
## Class :character Class :character 1st Qu.:3178
## Mode :character Mode :character Median :3925
## Mean :3709
## 3rd Qu.:4232
## Max. :6140
str(merma)
## 'data.frame': 50 obs. of 3 variables:
## $ Fecha: chr "11/01/22" "11/01/22" "22/01/22" "22/01/22" ...
## $ Mes : chr "ENERO" "ENERO" "ENERO" "ENERO" ...
## $ Kilos: int 5080 3810 2990 2680 3650 4380 3870 3590 3410 3930 ...
Técnica 1 Cambiar de caracter a fecha
Se utilizó esta técnica debido a que la base contiene el dato de fecha y es necesario convertirlo para evaluar el periodo de tiempo de la información
merma$Fecha <-as.Date(merma$Fecha,format ="%d/%m/%Y")
tibble(merma)
## # A tibble: 50 × 3
## Fecha Mes Kilos
## <date> <chr> <int>
## 1 0022-01-11 ENERO 5080
## 2 0022-01-11 ENERO 3810
## 3 0022-01-22 ENERO 2990
## 4 0022-01-22 ENERO 2680
## 5 0022-02-18 FEBRERO 3650
## 6 0022-02-18 FEBRERO 4380
## 7 0022-02-18 FEBRERO 3870
## 8 0022-02-18 FEBRERO 3590
## 9 0022-02-18 FEBRERO 3410
## 10 0022-02-24 FEBRERO 3930
## # … with 40 more rows
Técnica 2 Borrar registros faltantes
Se utilizó esta técnica debido a que es importante considerar si la base no tiene alguna registro NA o cero que pueda afectar la visualización de los datos
#¿Tenemos NA en la base de datos?
sum(is.na(merma))
## [1] 0
#¿Tenemos NA por variable?
sapply(merma,function(x)sum(is.na(x)))
## Fecha Mes Kilos
## 0 0 0
#En caso de tener, borrar los registros NA
merma <- na.omit(merma)
summary(merma)
## Fecha Mes Kilos
## Min. :0022-01-11 Length:50 Min. : 790
## 1st Qu.:0022-03-12 Class :character 1st Qu.:3178
## Median :0022-05-24 Mode :character Median :3925
## Mean :0022-05-25 Mean :3709
## 3rd Qu.:0022-08-10 3rd Qu.:4232
## Max. :0022-09-21 Max. :6140
¿Cuántos registros y variables tiene la base de datos?
dim(merma)
## [1] 50 3
Clasificación de variables
variablesmer <- c("`Fecha`","`Mes`","`Kilos`")
tiposmer <- c("cualitativo", "cualitativo","cuantitativo (continuo)")
escalasmer <- c("ordinal", "ordinal", "razon")
tablemer <- data.frame (variablesmer, tiposmer, escalasmer)
knitr::kable(tablemer)
| variablesmer | tiposmer | escalasmer |
|---|---|---|
Fecha
|
cualitativo | ordinal |
Mes
|
cualitativo | ordinal |
Kilos
|
cuantitativo (continuo) | razon |
En la tabla se presentan los datos estadísticos descriptivos en específico para la variable Kilos, en donde es posible observar que el promedio de 3709 con una desviación estándar de 1024, por lo que existe una amplia dispersión en la cantidad de kilos de merma producidos.
describe (merma)
## # A tibble: 1 × 26
## described_…¹ n na mean sd se_mean IQR skewn…² kurto…³ p00 p01
## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Kilos 50 0 3709. 1024. 145. 1055 -0.997 2.17 790 800.
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## # p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## # p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## # variable names ¹described_variables, ²skewness, ³kurtosis
Gráfica de pie
En dicha gráfica de pie, se puede observar la cantidad de kilos de merma por mes, donde se observa que en Agosto 2022 fue el mes con mayor merma, no obstante, en Mayo tambien hubo una carga grande, aunque con menores cantidades a nivel total.
Kilos1 <- data.frame(merma$Mes,merma$Kilos)
colnames(Kilos1)<-c('Mes','Kilos')
ggplot(Kilos1,aes(x=Kilos, y=Mes, fill=Kilos))+
geom_bar(stat = "identity",color="blue")+
coord_polar(theta="y")
Time Series Plot
Como se puede observar en la siguiente gráfica, una vez más se comprueba que el mes con más merma fue el mes de Agosto del 2022 y el mes con menos merma fue Septiembre ´22, pero como todavía no había concluido el mes de Septiembre al momento de descargar la base de datos, podemos decir que Enero fue el mes con menos merma.
Kilos <- data.frame(merma$Fecha,merma$Kilos)
colnames(Kilos)<-c('Fecha','Kilos')
ggplot(data = Kilos, aes (x=Fecha, y=Kilos)) +
geom_point(stat = "identity", col="orange") + scale_fill_grey() +
labs(title = "Kilos de merma",
x = "2022")
Gráficos de normalidad
En las siguientes gráficas de normalidad, se utilizo la variable de kilos de merma con la finaliad de observar su dispersión, visualizando que la mayoría de merma producida sigue una distribución normal, y se encuentra dentro del mismo rango, a excepción de algunos datos atípicos.
plot_normality(merma,Kilos, col="orange")
El scrap es el sobrante de la fabricación y consumo de materiales. En esta sexta base de datos analizada, se muestra información sobre la cantidad de scrap producido en FORM, asi como las diversas areas de donde proviene; con lo cual se analizarán sus datos estadísticos.
scrap <- read.csv("/Users/Karen/Downloads/FORM - Scrap.csv")
summary (scrap)
## Referencia Fecha Hora Producto
## Length:250 Length:250 Length:250 Length:250
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Cantidad Unidad.de.medida Ubicación.de.origen Ubicación.de.desecho
## Min. : 0.0 Length:250 Length:250 Length:250
## 1st Qu.: 1.0 Class :character Class :character Class :character
## Median : 2.0 Mode :character Mode :character Mode :character
## Mean : 6.7
## 3rd Qu.: 7.0
## Max. :96.0
## Estado
## Length:250
## Class :character
## Mode :character
##
##
##
str (scrap)
## 'data.frame': 250 obs. of 9 variables:
## $ Referencia : chr "SP/08731" "SP/08730" "SP/08729" "SP/08728" ...
## $ Fecha : chr "31/08/2022" "31/08/2022" "31/08/2022" "31/08/2022" ...
## $ Hora : chr "14:55:40" "14:49:25" "13:49:29" "9:30:07" ...
## $ Producto : chr "[BACKFRAME 60% CUELLO ARMADO] 18805. 60% Backframe. Cuello Armado." "[N61506747 CAJA] N61506747. Kit. Caja." "[N61506729 SEPARADOR] N61506729. Kit. Separador." "[341332 DIVISOR - U611 & U625] 341332. U611. U625. Divisor Troquelado." ...
## $ Cantidad : int 2 1 1 31 1 1 1 9 2 1 ...
## $ Unidad.de.medida : chr "Unidad(es)" "Unidad(es)" "Unidad(es)" "Unidad(es)" ...
## $ Ubicación.de.origen : chr "SAB/Calidad/Entrega de PT" "SAB/Calidad/Entrega de PT" "SAB/Calidad/Entrega de PT" "SAB/Pre-Production" ...
## $ Ubicación.de.desecho: chr "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" ...
## $ Estado : chr "Hecho" "Hecho" "Hecho" "Hecho" ...
Técnica 1 Convertir tipos de datos
Cambiar de caracter a fecha
scrap$Fecha <-as.Date(scrap$Fecha,format ="%d/%m/%Y")
tibble(scrap)
## # A tibble: 250 × 9
## Referencia Fecha Hora Produ…¹ Canti…² Unida…³ Ubica…⁴ Ubica…⁵ Estado
## <chr> <date> <chr> <chr> <int> <chr> <chr> <chr> <chr>
## 1 SP/08731 2022-08-31 14:55:40 [BACKF… 2 Unidad… SAB/Ca… Virtua… Hecho
## 2 SP/08730 2022-08-31 14:49:25 [N6150… 1 Unidad… SAB/Ca… Virtua… Hecho
## 3 SP/08729 2022-08-31 13:49:29 [N6150… 1 Unidad… SAB/Ca… Virtua… Hecho
## 4 SP/08728 2022-08-31 9:30:07 [34133… 31 Unidad… SAB/Pr… Virtua… Hecho
## 5 SP/08727 2022-08-31 9:28:44 [DIVIS… 1 Unidad… SAB/Pr… Virtua… Hecho
## 6 SP/08726 2022-08-31 9:28:23 [DIVIS… 1 Unidad… SAB/Pr… Virtua… Hecho
## 7 SP/08725 2022-08-31 9:27:12 [CHARO… 1 Unidad… SAB/Pr… Virtua… Hecho
## 8 SP/08724 2022-08-31 9:26:45 [CELDA… 9 Unidad… SAB/Pr… Virtua… Hecho
## 9 SP/08723 2022-08-31 9:26:24 [TAPA … 2 Unidad… SAB/Pr… Virtua… Hecho
## 10 SP/08722 2022-08-31 9:25:55 [CAJA … 1 Unidad… SAB/Pr… Virtua… Hecho
## # … with 240 more rows, and abbreviated variable names ¹Producto, ²Cantidad,
## # ³Unidad.de.medida, ⁴Ubicación.de.origen, ⁵Ubicación.de.desecho
Técnica 2 Valores faltantes
#¿Tenemos NA en la base de datos?
sum(is.na(scrap))
## [1] 0
#¿Tenemos NA por variable?
sapply(scrap,function(x)sum(is.na(x)))
## Referencia Fecha Hora
## 0 0 0
## Producto Cantidad Unidad.de.medida
## 0 0 0
## Ubicación.de.origen Ubicación.de.desecho Estado
## 0 0 0
#En caso de tener, borrar los registros NA
scrap <- na.omit(scrap)
summary(scrap)
## Referencia Fecha Hora Producto
## Length:250 Min. :2022-08-01 Length:250 Length:250
## Class :character 1st Qu.:2022-08-11 Class :character Class :character
## Mode :character Median :2022-08-19 Mode :character Mode :character
## Mean :2022-08-17
## 3rd Qu.:2022-08-25
## Max. :2022-08-31
## Cantidad Unidad.de.medida Ubicación.de.origen Ubicación.de.desecho
## Min. : 0.0 Length:250 Length:250 Length:250
## 1st Qu.: 1.0 Class :character Class :character Class :character
## Median : 2.0 Mode :character Mode :character Mode :character
## Mean : 6.7
## 3rd Qu.: 7.0
## Max. :96.0
## Estado
## Length:250
## Class :character
## Mode :character
##
##
##
¿Cuántos registros y variables tiene la base de datos?
dim(scrap)
## [1] 250 9
Clasificación de variables
variablesscra <- c("`Referencia`","`Fecha`","`Hora`", "`Producto`", "`Cantidad`", "`Unidad de medida`","`Ubicacion de origen`", "`Ubicacion de desecho`", "`Estado`")
tiposscra <- c("cualitativo", "cualitativo","cuantitativo", "cualitativo", "cuantitativo (discreto)", "cualitativo", "cualitativo", "cualitativo", "cualitativo")
escalasscra <- c("nominal", "ordinal", "ordinal", "nominal", "razon", "nominal", "nominal", "nominal", "nominal")
tablescra <- data.frame (variablesscra, tiposscra, escalasscra)
knitr::kable(tablescra)
| variablesscra | tiposscra | escalasscra |
|---|---|---|
Referencia
|
cualitativo | nominal |
Fecha
|
cualitativo | ordinal |
Hora
|
cuantitativo | ordinal |
Producto
|
cualitativo | nominal |
Cantidad
|
cuantitativo (discreto) | razon |
Unidad de medida
|
cualitativo | nominal |
Ubicacion de origen
|
cualitativo | nominal |
Ubicacion de desecho
|
cualitativo | nominal |
Estado
|
cualitativo | nominal |
En la tabla se presentan los datos estadisticos descriptivos en específico para la variable Cantidad, donde se puede observar que el promedio de scrap es de 6.7 con una desviación estándar de 11.8, por lo que no existe tanta dispersión en el rango de datos, y la mayoría de scrap se encuentra en estas cantidades.
describe (scrap)
## # A tibble: 1 × 26
## described_…¹ n na mean sd se_mean IQR skewn…² kurto…³ p00 p01
## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Cantidad 250 0 6.7 11.8 0.749 6 4.17 21.8 0 1
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## # p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## # p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## # variable names ¹described_variables, ²skewness, ³kurtosis
Gráfica de pie
En la siguiente gráfica se puede observar la proporción de las ubicaciones de origen del scrap, siendo SAB Pre producción el area donde mayor scrap se produce.
pie(prop.table(table(scrap$Ubicación.de.origen)),col=c("#BFEFFF","#FFEC8B","#FFA07A"),main="Ubicacion de origen",las=1)
Dispersion Plot
En la siguiente gráfica se observa que muchos de los pedidos están en pre-producción, debido a que hay una mayor cantidad de puntos azules en toda la gráfica. Pedidos con más de 25 unidades siempre están en pre-producción, mientras que los pedidos de Post producción y entrega de PT están en órdenes menores de 25 unidades.
ggplot(scrap, aes(x=Fecha, y=Cantidad, colour=Ubicación.de.origen)) + geom_point()
Bar plots
En el caso de la siguiente gráfica, se puede observar la cantidad de scrap durante el mes de Agosto 2022, en donde se visualiza que hubo una mayor cantidad en la semana del 22 al 29 de Agosto.
Cantidad1 <- data.frame(scrap$Fecha,scrap$Cantidad)
colnames(Cantidad1)<-c('Fecha','Cantidad')
ggplot(data = Cantidad1, aes (x=Fecha, y=Cantidad)) +
geom_bar(stat = "identity", fill="#FFA07A") + scale_fill_grey() +
labs(title = "Cantidad de scrap",
x = "2022")
La base de datos externa utilizada en este caso fue proporcionada por Bureau Transports, en donde se visualiza la producción de autos en Estados Unidos durante 2000 a 2020. De igual forma, se utilizaron otras bases obtenidas del Banco Mundial para recabar datos como la inflación, el índice de Pobreza, el PIB per Capita en USA, y la tasa de desempleo. Asi mismo, fue utilizada la base de datos de Passport para obtener la cantidad de autopartes fabricadas en Estados Unidos durante el mismo periodo de tiempo.
#file.choose()
externa1 <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Base EUA nueva.csv")
summary (externa1)
## Year Production Inflacion Pobreza
## Length:21 Min. : 5710 Min. :-0.360 Min. :0.7000
## Class :character 1st Qu.:10336 1st Qu.: 1.590 1st Qu.:1.0000
## Mode :character Median :11260 Median : 2.130 Median :1.0000
## Mean :10705 Mean : 2.126 Mean :0.9857
## 3rd Qu.:11960 3rd Qu.: 2.850 3rd Qu.:1.0000
## Max. :12774 Max. : 3.840 Max. :1.2000
## PIB Poblacion Desempleo Autopartes
## Min. :36330 Min. :282162411 Min. :3.670 Min. :300543
## 1st Qu.:44123 1st Qu.:295516599 1st Qu.:4.620 1st Qu.:466904
## Median :48651 Median :309327143 Median :5.530 Median :501311
## Mean :50062 Mean :308023794 Mean :5.985 Mean :518449
## 3rd Qu.:56763 3rd Qu.:320738994 3rd Qu.:7.370 3rd Qu.:601972
## Max. :65095 Max. :331501080 Max. :9.630 Max. :668450
str (externa1)
## 'data.frame': 21 obs. of 8 variables:
## $ Year : chr "01/01/2000" "01/01/2001" "01/01/2002" "01/01/2003" ...
## $ Production: num 12774 11425 12280 12087 11960 ...
## $ Inflacion : num 3.38 2.83 1.59 2.27 2.68 3.39 3.23 2.85 3.84 -0.36 ...
## $ Pobreza : num 0.7 0.7 0.7 1 1 1 1 1 1 1 ...
## $ PIB : num 36330 37134 37998 39490 41725 ...
## $ Poblacion : num 2.82e+08 2.85e+08 2.88e+08 2.90e+08 2.93e+08 ...
## $ Desempleo : num 3.99 4.73 5.78 5.99 5.53 5.08 4.62 4.62 5.78 9.25 ...
## $ Autopartes: num 466904 425152 470493 493732 491839 ...
Técnica 1 Convertir tipos de datos
Cambiar de caracter a fecha
externa1$Year <-as.Date(externa1$Year,format ="%d/%m/%Y")
tibble(externa1)
## # A tibble: 21 × 8
## Year Production Inflacion Pobreza PIB Poblacion Desempleo Autopartes
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2000-01-01 12774. 3.38 0.7 36330. 282162411 3.99 466904
## 2 2001-01-01 11425. 2.83 0.7 37134. 284968955 4.73 425152
## 3 2002-01-01 12280. 1.59 0.7 37998. 287625193 5.78 470493
## 4 2003-01-01 12087. 2.27 1 39490. 290107933 5.99 493732
## 5 2004-01-01 11960. 2.68 1 41725. 292805298 5.53 491839
## 6 2005-01-01 11947. 3.39 1 44123. 295516599 5.08 502939
## 7 2006-01-01 11260. 3.23 1 46302 298379912 4.62 501311
## 8 2007-01-01 10752. 2.85 1 48050. 301231207 4.62 498481
## 9 2008-01-01 8672. 3.84 1 48570. 304093966 5.78 409349
## 10 2009-01-01 5710. -0.36 1 47195. 306771529 9.25 300543
## # … with 11 more rows
Técnica 2 Valores faltantes
Se realizó esta técnica con la finalidad de conocer si en la base de datos existen NA o similares que no sean validos para la información
#¿Tenemos NA en la base de datos?
sum(is.na(externa1))
## [1] 0
#¿Tenemos NA por variable?
sapply(externa1,function(x)sum(is.na(x)))
## Year Production Inflacion Pobreza PIB Poblacion Desempleo
## 0 0 0 0 0 0 0
## Autopartes
## 0
#En caso de tener, borrar los registros NA
externa1 <- na.omit(externa1)
summary(externa1)
## Year Production Inflacion Pobreza
## Min. :2000-01-01 Min. : 5710 Min. :-0.360 Min. :0.7000
## 1st Qu.:2005-01-01 1st Qu.:10336 1st Qu.: 1.590 1st Qu.:1.0000
## Median :2010-01-01 Median :11260 Median : 2.130 Median :1.0000
## Mean :2009-12-31 Mean :10705 Mean : 2.126 Mean :0.9857
## 3rd Qu.:2015-01-01 3rd Qu.:11960 3rd Qu.: 2.850 3rd Qu.:1.0000
## Max. :2020-01-01 Max. :12774 Max. : 3.840 Max. :1.2000
## PIB Poblacion Desempleo Autopartes
## Min. :36330 Min. :282162411 Min. :3.670 Min. :300543
## 1st Qu.:44123 1st Qu.:295516599 1st Qu.:4.620 1st Qu.:466904
## Median :48651 Median :309327143 Median :5.530 Median :501311
## Mean :50062 Mean :308023794 Mean :5.985 Mean :518449
## 3rd Qu.:56763 3rd Qu.:320738994 3rd Qu.:7.370 3rd Qu.:601972
## Max. :65095 Max. :331501080 Max. :9.630 Max. :668450
¿Cuántos registros y variables tiene la base de datos?
dim(externa1)
## [1] 21 8
Clasificación de variables
Las variables en esta base de datos corresponden a la producción de autos en Estados Unidos, asi como indicadores generales como la inflación, índice de Pobreza, el PIB per Capita, la población, el desempleo, y la fabricación de autopartes en USA durante el periodo de tiempo de los años 2000 a 2020.
Variableex <- c("`Year`", "`Production`", "`Inflacion`", "`Pobreza`", "`PIB`", "`Poblacion`", "`Desempleo`", "`Autopartes`")
Tipoex <- c("Cuantitativa (discreta)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (discreta)","Cuantitativa (continua)","Cuantitativa (discreta)")
Escalaex <- c("Razon", "Intervalo", "Intervalo", "Intervalo", "Intervalo", "Razon", "Intervalo", "Razon")
Tableex <- data.frame (Variableex, Tipoex, Escalaex)
knitr::kable(Tableex)
| Variableex | Tipoex | Escalaex |
|---|---|---|
Year
|
Cuantitativa (discreta) | Razon |
Production
|
Cuantitativa (continua) | Intervalo |
Inflacion
|
Cuantitativa (continua) | Intervalo |
Pobreza
|
Cuantitativa (continua) | Intervalo |
PIB
|
Cuantitativa (continua) | Intervalo |
Poblacion
|
Cuantitativa (discreta) | Razon |
Desempleo
|
Cuantitativa (continua) | Intervalo |
Autopartes
|
Cuantitativa (discreta) | Razon |
En la tabla se presentan los datos estadisticos descriptivos para todas las variables de la base de datos externa USA, en donde es posible observar, que el promedio de producción es de 10705 a lo largo de los años, mientras que la inflación es de 2.13, el índice de Pobreza de 0.99, y el PIB per Capita de 50062 el cual ha tenido una desviación estandar de 8794 arrojando que tiene gran dispersión durante el periodo de tiempo de 2000 a 2020 en Estados Unidos.
Aunado a eso, la poblacion de USA mantiene un promedio de 308023794, la tasa de desempleo de 5.99, y el promedio de la fabricación de autopartes en Estados Unidos es de 518448.
describe.by (externa1)
## vars n mean sd median trimmed
## Year 1 21 NaN NA NA NaN
## Production 2 21 10705.32 1790.45 11260.28 10959.09
## Inflacion 3 21 2.13 1.07 2.13 2.21
## Pobreza 4 21 0.99 0.14 1.00 0.99
## PIB 5 21 50062.14 8794.35 48650.64 49983.46
## Poblacion 6 21 308023794.00 15330004.55 309327143.00 308325722.06
## Desempleo 7 21 5.99 1.84 5.53 5.84
## Autopartes 8 21 518448.57 97397.31 501311.00 521264.41
## mad min max range skew kurtosis
## Year NA Inf -Inf -Inf NA NA
## Production 1225.74 5710.29 12773.71 7063.42 -1.22 0.66
## Inflacion 1.04 -0.36 3.84 4.20 -0.51 -0.36
## Pobreza 0.00 0.70 1.20 0.50 -0.72 0.37
## PIB 10268.50 36329.96 65094.80 28764.84 0.07 -1.21
## Poblacion 20377761.75 282162411.00 331501080.00 49338669.00 -0.14 -1.38
## Desempleo 1.35 3.67 9.63 5.96 0.66 -0.97
## Autopartes 109651.61 300543.00 668450.00 367907.00 -0.14 -0.75
## se
## Year NA
## Production 390.71
## Inflacion 0.23
## Pobreza 0.03
## PIB 1919.08
## Poblacion 3345281.25
## Desempleo 0.40
## Autopartes 21253.84
Bar plot
En la siguiente gráfica es posible observar la cantidad de autos producidos en Estados Unidos a lo largo del periodo de tiempo de los años 2000 al 2020. Como observación, en el año 2009, se ve la notaria baja en producción debido a la crisis económica de ese mismo año en USA.
Produccion <- data.frame(externa1$Production, externa1$Year)
colnames(Produccion)<-c('Produccion','Año')
ggplot(data = Produccion, aes (x=Año, y=Produccion)) +
geom_bar(stat = "identity", fill="orange") + scale_fill_grey() +
labs(title = "Produccion de autos en USA ",
y="Autos")
En la siguiente gráfica se muestra la correlación entre todas las variables de la base de datos, visualizando que existe cierta relación entre la variable dependiente Producción y la fabricación de autopartes; asi como algunas correlaciones entre las mismas variables independientes como Población y Pobreza.
USA<-subset(externa1,select=-c(Year))
corrplot(cor(USA),type='upper',order='hclust',addCoef.col='black')
El primer modelo predictivo, en este caso, analiza la variable dependiente siendo la Producción de autos en Estados Unidos, mientras que para las variables exploratorias se toman en cuenta la inflación, el índice de pobreza, el PIB per Capita, la población, la tasa de desempleo, y la fabricación de autopartes en Estados Unidos.
regresion <- lm(Production~ Inflacion + Pobreza + PIB + Poblacion + Desempleo + Autopartes, data=externa1)
summary (regresion)
##
## Call:
## lm(formula = Production ~ Inflacion + Pobreza + PIB + Poblacion +
## Desempleo + Autopartes, data = externa1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -353.2 -195.4 2.9 151.9 513.4
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.535e+03 1.192e+04 0.380 0.7095
## Inflacion 5.299e+01 7.411e+01 0.715 0.4864
## Pobreza -3.493e+02 5.939e+02 -0.588 0.5658
## PIB -2.616e-01 8.870e-02 -2.949 0.0106 *
## Poblacion 2.454e-05 5.586e-05 0.439 0.6672
## Desempleo -9.185e+01 9.657e+01 -0.951 0.3577
## Autopartes 2.409e-02 1.538e-03 15.661 2.87e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 267.2 on 14 degrees of freedom
## Multiple R-squared: 0.9844, Adjusted R-squared: 0.9777
## F-statistic: 147.3 on 6 and 14 DF, p-value: 7.853e-12
Aquí podemos observar que las variables con mayor significancia son fabricación de autopartes y el PIB, por lo que se realizará un segundo modelo, utilizando dichas variables y la de Desempleo, con la finalidad de observar si mejora la confiabilidad del modelo, la cual actualmente tiene una R2 de 0.97.
regresion5 <- lm(Production~ PIB + Desempleo + Autopartes, data=externa1)
summary (regresion5)
##
## Call:
## lm(formula = Production ~ PIB + Desempleo + Autopartes, data = externa1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -410.80 -136.13 -21.07 121.91 530.30
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.940e+03 5.138e+02 19.347 5.15e-13 ***
## PIB -2.261e-01 1.143e-02 -19.781 3.58e-13 ***
## Desempleo -7.518e+01 4.499e+01 -1.671 0.113
## Autopartes 2.418e-02 1.217e-03 19.868 3.33e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 249.3 on 17 degrees of freedom
## Multiple R-squared: 0.9835, Adjusted R-squared: 0.9806
## F-statistic: 338.1 on 3 and 17 DF, p-value: 2.385e-15
datos_nuevos <- data.frame(PIB=47195, Desempleo =5, Autopartes=636320)
predict(regresion5,datos_nuevos)
## 1
## 14277.62
De esta forma, podemos visualizar que el modelo de regresión mejoró su confiabilidad con una R2 de 0.98, y que sin duda, la fabricación de autopartes es la variable que mayor signficancia tiene con una tendencia positiva, por lo que, es posible decir que mientras mayor fabricación de autopartes haya, mayor producción de autos.
No obstante, otra de las variables que resultó con gran significancia fue el PIB, pero con una tendencia negativa, por lo que tambien sería posible decir que mientras menor PIB per Capita, mayor producción de autos. Sin embargo, a esta variable, es importante evaluar el contexto histórico en el país, debido a que usualmente el PIB siempre va en crecimiento y no demuestra una variación.
effect_plot(regresion5,pred=Autopartes,interval=TRUE)
De esta forma, es importante para FORM conocer el desempeño de la industria a lo largo del tiempo y estar al tanto de su comportamiento.
La base de datos externa utilizada en este caso fue proporcionada por INEGI, en donde se visualiza la producción y exportaciones de autos en México durante 2005 a 2021. De igual forma, se utilizaron otras bases obtenidas del Banco Mundial para recabar datos como la inflación y el PIB en México.
#file.choose()
externaMex <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Base externa Mexico.csv")
summary (externaMex)
## Año Produccion Exportaciones Inflacion
## Length:17 Min. :577.0 Min. : 1586 Min. :2.720
## Class :character 1st Qu.:646.0 1st Qu.: 3885 1st Qu.:3.630
## Mode :character Median :686.0 Median : 5384 Median :3.990
## Mean :729.4 Mean : 6610 Mean :4.161
## 3rd Qu.:735.0 3rd Qu.: 7173 3rd Qu.:4.900
## Max. :995.0 Max. :15941 Max. :6.040
## PIB
## Min. :8.775e+11
## 1st Qu.:1.058e+12
## Median :1.159e+12
## Mean :1.131e+12
## 3rd Qu.:1.222e+12
## Max. :1.315e+12
str (externaMex)
## 'data.frame': 17 obs. of 5 variables:
## $ Año : chr "01/01/2005" "01/01/2006" "01/01/2007" "01/01/2008" ...
## $ Produccion : int 577 631 685 735 680 693 702 640 620 646 ...
## $ Exportaciones: int 1586 1704 2291 3106 3885 4254 4439 5340 5384 5787 ...
## $ Inflacion : num 3.99 3.63 3.97 5.12 5.3 4.16 3.41 4.11 3.81 4.02 ...
## $ PIB : num 8.77e+11 9.75e+11 1.05e+12 1.11e+12 9.00e+11 ...
Técnica 1 Convertir tipos de datos
Cambiar de caracter a fecha
externaMex$Año <-as.Date(externaMex$Año,format ="%d/%m/%Y")
tibble(externaMex)
## # A tibble: 17 × 5
## Año Produccion Exportaciones Inflacion PIB
## <date> <int> <int> <dbl> <dbl>
## 1 2005-01-01 577 1586 3.99 8.77e11
## 2 2006-01-01 631 1704 3.63 9.75e11
## 3 2007-01-01 685 2291 3.97 1.05e12
## 4 2008-01-01 735 3106 5.12 1.11e12
## 5 2009-01-01 680 3885 5.3 9.00e11
## 6 2010-01-01 693 4254 4.16 1.06e12
## 7 2011-01-01 702 4439 3.41 1.18e12
## 8 2012-01-01 640 5340 4.11 1.20e12
## 9 2013-01-01 620 5384 3.81 1.27e12
## 10 2014-01-01 646 5787 4.02 1.32e12
## 11 2015-01-01 669 6636 2.72 1.17e12
## 12 2016-01-01 686 6016 2.82 1.08e12
## 13 2017-01-01 705 7173 6.04 1.16e12
## 14 2018-01-01 841 9358 4.9 1.22e12
## 15 2019-01-01 995 14449 3.64 1.27e12
## 16 2020-01-01 956 15017 3.4 1.09e12
## 17 2021-01-01 938 15941 5.69 1.29e12
Técnica 2 Valores faltantes
Se realizó esta técnica con la finalidad de conocer si en la base de datos existen NA o similares que no sean validos para la información
#¿Tenemos NA en la base de datos?
sum(is.na(externaMex))
## [1] 0
#¿Tenemos NA por variable?
sapply(externaMex,function(x)sum(is.na(x)))
## Año Produccion Exportaciones Inflacion PIB
## 0 0 0 0 0
#En caso de tener, borrar los registros NA
externaMex <- na.omit(externaMex)
summary(externaMex)
## Año Produccion Exportaciones Inflacion
## Min. :2005-01-01 Min. :577.0 Min. : 1586 Min. :2.720
## 1st Qu.:2009-01-01 1st Qu.:646.0 1st Qu.: 3885 1st Qu.:3.630
## Median :2013-01-01 Median :686.0 Median : 5384 Median :3.990
## Mean :2012-12-31 Mean :729.4 Mean : 6610 Mean :4.161
## 3rd Qu.:2017-01-01 3rd Qu.:735.0 3rd Qu.: 7173 3rd Qu.:4.900
## Max. :2021-01-01 Max. :995.0 Max. :15941 Max. :6.040
## PIB
## Min. :8.775e+11
## 1st Qu.:1.058e+12
## Median :1.159e+12
## Mean :1.131e+12
## 3rd Qu.:1.222e+12
## Max. :1.315e+12
¿Cuántos registros y variables tiene la base de datos?
dim(externaMex)
## [1] 17 5
Clasificación de variables
Las variables en esta base de datos corresponden a la producción y exportaciones de autos en México, asi como indicadores generales como la inflación, y el PIB durante el periodo de tiempo de los años 2005 a 2021.
VariableMe <- c("`Año`", "`Produccion`", "`Exportaciones`", "`Inflacion`", "`PIB`")
TipoMe <- c("Cuantitativa (discreta)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)")
EscalaMe <- c("Razon", "Razon", "Razon", "Intervalo", "Intervalo")
TableMe <- data.frame (VariableMe, TipoMe, EscalaMe)
knitr::kable(TableMe)
| VariableMe | TipoMe | EscalaMe |
|---|---|---|
Año
|
Cuantitativa (discreta) | Razon |
Produccion
|
Cuantitativa (continua) | Razon |
Exportaciones
|
Cuantitativa (continua) | Razon |
Inflacion
|
Cuantitativa (continua) | Intervalo |
PIB
|
Cuantitativa (continua) | Intervalo |
En la tabla se presentan los datos estadísticos descriptivos para todas las variables de la base de datos externa en México, en donde es posible observar, que el promedio de producción es de 729 a lo largo de los años, mientras que las exportaciones e 6610, la inflación de 4.16 y el PIB de 1180489601957 en México de 2005 a 2021.
describe.by (externaMex)
## vars n mean sd median trimmed
## Año 1 17 NaN NA NA NaN
## Produccion 2 17 7.293500e+02 1.25080e+02 6.860000e+02 7.218000e+02
## Exportaciones 3 17 6.609760e+03 4.53556e+03 5.384000e+03 6.322600e+03
## Inflacion 4 17 4.160000e+00 9.50000e-01 3.990000e+00 4.130000e+00
## PIB 5 17 1.130942e+12 1.31478e+11 1.158913e+12 1.135545e+12
## mad min max range skew kurtosis
## Año NA Inf -Inf -Inf NA NA
## Produccion 6.820000e+01 5.770000e+02 9.950000e+02 4.18000e+02 1.00 -0.46
## Exportaciones 2.652370e+03 1.586000e+03 1.594100e+04 1.43550e+04 0.94 -0.46
## Inflacion 8.600000e-01 2.720000e+00 6.040000e+00 3.32000e+00 0.44 -0.89
## PIB 1.499083e+11 8.774762e+11 1.315351e+12 4.37875e+11 -0.41 -0.96
## se
## Año NA
## Produccion 3.03400e+01
## Exportaciones 1.10004e+03
## Inflacion 2.30000e-01
## PIB 3.18881e+10
Bar plot
En la siguiente gráfica es posible observar la cantidad de autos producidos en México a lo largo del periodo de tiempo de los años 2005 al 2021, en donde se observa que la producción ha ido en constante crecimiento.
Produccion <- data.frame(externaMex$Produccion, externaMex$Año)
colnames(Produccion)<-c('Produccion','Año')
ggplot(data = Produccion, aes (x=Año, y=Produccion)) +
geom_bar(stat = "identity", fill="lightsteelblue") + scale_fill_grey() +
labs(title = "Producción de autos en Mexico ",
y="Autos")
En la siguiente gráfica se muestra la correlación entre todas las variables de la base de datos, visualizando que existe cierta relación entre la variable dependiente Producción y las exportaciones; asi como algunas correlaciones entre las mismas variables independientes como Exportaciones y PIB.
Mexico<-subset(externaMex,select=-c(Año))
corrplot(cor(Mexico),type='upper',order='hclust',addCoef.col='black')
El primer modelo predictivo, en este caso, analiza la variable dependiente siendo la producción de autos en México, mientras que para las variables exploratorias se toman en cuenta las exportaciones de autos, la inflación, y el PIB en México.
regresion3 <- lm(Produccion~ Exportaciones + Inflacion + PIB, data=externaMex)
summary (regresion3)
##
## Call:
## lm(formula = Produccion ~ Exportaciones + Inflacion + PIB, data = externaMex)
##
## Residuals:
## Min 1Q Median 3Q Max
## -51.89 -43.69 -17.72 44.84 91.50
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.892e+02 1.411e+02 4.885 0.000298 ***
## Exportaciones 2.736e-02 3.566e-03 7.671 3.53e-06 ***
## Inflacion 7.130e+00 1.424e+01 0.501 0.624896
## PIB -1.506e-10 1.224e-10 -1.231 0.240094
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 53.7 on 13 degrees of freedom
## Multiple R-squared: 0.8503, Adjusted R-squared: 0.8157
## F-statistic: 24.61 on 3 and 13 DF, p-value: 1.237e-05
datos_nuevos3 <- data.frame(Exportaciones= 6272, Inflacion=4, PIB=1180489601957)
predict(regresion3,datos_nuevos3)
## 1
## 711.5047
De esta forma, se puede observar que la unica variable con signficancia para la variable dependiente son las exportaciones, explicado en un modelo con R2 de 0.81.
El modelo mantiene una tendencia positiva, por lo que, es posible decir que mientras mayores exportaciones hayan, mayor producción de autos; no obstante, es importante evaluar que la confiabilidad del modelo no es tan alta.
effect_plot(regresion3,pred=Exportaciones,interval=TRUE)
La base de datos externa muestra una visualización de las ventas de autos en Estados Unidos durante los últimos años, la cual fue proporcionada por Bureau Transports y se utilizará para realizar pronósticos a futuro sobre la misma.
externa2 <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Pron EUA.csv")
Scar plot
En la siguiente gráfica es posible observar la cantidad de autos vendidos en USA a lo largo del periodo de tiempo de 2000 a 2020, en donde es evidente la caída durante la crisis económica del 2009 y el impacto del Covid en 2020.
Ventas <- data.frame(externa2$Sales, externa2$Year)
colnames(Ventas)<-c('Ventas','Año')
ggplot(data = Ventas, aes (x=Año, y=Ventas)) +
geom_point(stat = "identity", col="orange") + scale_fill_grey() +
labs(title = "Ventas de autos en USA",
y="Autos")
Con el pronóstico realizado, podemos ver que las ventas de autos en USA tendrán una caída en el 2021 y otra más en el 2022; no obstante, se recuperarán para el 2023. Esto es un gran insight para FORM, quienes necesitarán prepararse contra dicha posible caída.
aa<-externa2$Sales
a1 <- ts(data = aa, start = c(2000,1), frequency = 1)
modelo <- auto.arima(a1)
modelo
## Series: a1
## ARIMA(2,0,0) with non-zero mean
##
## Coefficients:
## ar1 ar2 mean
## 1.3765 -0.6472 12508.0697
## s.e. 0.1735 0.1726 659.0895
##
## sigma^2 = 788664: log likelihood = -171.89
## AIC=351.78 AICc=354.28 BIC=355.96
mer2 <- forecast(modelo, level=c(95), h=3)
mer2
## Point Forecast Lo 95 Hi 95
## 2021 10462.10 8721.521 12202.68
## 2022 10298.15 7336.768 13259.53
## 2023 10790.23 7118.057 14462.40
plot(mer2)
La base de datos externa muestra una visualización de las ventas de autos en México durante los últimos años , la cual fue proporcionada por INEGI y se utilizará para realizar pronósticos a futuro sobre la misma.
externaMex2 <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Pron Mexico.csv")
Scar plot
En la siguiente gráfica es posible observar la cantidad de autos vendidos en Mexico a lo largo del periodo de tiempo de 2005 a 2021, observando que hubo una gran caída durante el 2012, no obstante, una recuperación evidente para los siguientes años.
Ventas <- data.frame(externaMex2$Ventas, externaMex2$Año)
colnames(Ventas)<-c('Ventas','Año')
ggplot(data = Ventas, aes (x=Año, y=Ventas)) +
geom_point(stat = "identity", col="orange") + scale_fill_grey() +
labs(title = "Ventas de autos en Mexico",
y="Autos")
Con el pronóstico realizado, podemos ver que las ventas de autos en México mantendrán una tendencia estable a lo largo de los próximos 3 periodos, siendo en este caso 2022, 2023 y 2024; por lo que FORM deberá preparse ante dicho posibilidad e incursionar en la industria.
mm<-externaMex2$Ventas
m1 <- ts(data = mm, start = c(2005,1), frequency = 1)
modelo3 <- auto.arima(m1)
modelo3
## Series: m1
## ARIMA(0,1,0)
##
## sigma^2 = 110147: log likelihood = -115.58
## AIC=233.16 AICc=233.44 BIC=233.93
m2 <- forecast(modelo3, level=c(95), h=3)
m2
## Point Forecast Lo 95 Hi 95
## 2022 5387 4736.518 6037.482
## 2023 5387 4467.080 6306.920
## 2024 5387 4260.333 6513.667
plot(m2)
La base de datos interna fue la de merma (Pérdida de material que experimentan las existencias “stock”), en donde se utilizó para visualizar pronósticos sobre la producción de la misma.
merma1 <- read.csv ("/Users/Karen/Downloads/Evidencia 2 FORM/FORM - Merma_pronostico.csv")
Con un 95% de confiabilidad, para los siguientes 3 meses se pronóstica una merma de 20602 kilos y gracias a esto, podemos anticipar la carga que se va a tener en el futuro e ir implementando nuevas maneras de desechar o reutilizar la merma. La merma mínima que se tiene pronósticada es de 9770.71 kg. y la máxima de 31435 kg.
merma2 <- merma1$Kilos
mer1 <- ts(data = merma2, start = c(1), frequency = 1)
modelo1 <- auto.arima(mer1)
modelo1
## Series: mer1
## ARIMA(0,0,0) with non-zero mean
##
## Coefficients:
## mean
## 20602.889
## s.e. 1736.893
##
## sigma^2 = 30544665: log likelihood = -89.8
## AIC=183.59 AICc=185.59 BIC=183.99
mer2 <- forecast(modelo1, level=c(95), h=3)
mer2
## Point Forecast Lo 95 Hi 95
## 10 20602.89 9770.711 31435.07
## 11 20602.89 9770.711 31435.07
## 12 20602.89 9770.711 31435.07
plot(mer2)
La base de datos interna fue la de scrap (Sobrantes de la fabricación y consumo de materiales), en donde se utilizó para visualizar pronósticos sobre la producción del mismo.
scrap <- read.csv ("/Users/Karen/Downloads/Evidencia 2 FORM/Scrap_limpia.csv")
Con un 95% de confiabilidad, para los siguientes 3 meses se pronóstica un scrap de 64.42 y gracias a esto, se puede anticipar la carga que se va a tener en el futuro e implementar maneras de desechar o reutilizar el scrap. El scrap máxima pronósticado es de 173.82
scrap2 <- scrap$Cantidad
scra1 <- ts(data = scrap2, start = c(1), frequency = 1)
modelo2 <- auto.arima(scra1)
modelo2
## Series: scra1
## ARIMA(0,0,0) with non-zero mean
##
## Coefficients:
## mean
## 64.4231
## s.e. 10.7347
##
## sigma^2 = 3116: log likelihood = -140.96
## AIC=285.92 AICc=286.44 BIC=288.43
scra2 <- forecast(modelo2, level=c(95), h=3)
scra2
## Point Forecast Lo 95 Hi 95
## 27 64.42308 -44.98319 173.8293
## 28 64.42308 -44.98319 173.8293
## 29 64.42308 -44.98319 173.8293
plot(scra2)