\(~\)
General:
Aplicar los conocimientos aprendidos en el curso de R estudio (Coderhouse)
Específicos:
1. Explorar la base de datos ds_salaries
2. Realizar un análisis de los componentes principales para optimizar la varianza.
3. Predecir la variable salary_in_usd mediante una regresión con KNN
\(~\) \(~\)
library(tidyverse)
library(plotly)
library(DT)
library(ggplot2)
library(knitr)
library(fdth)
library(purrr)
library(dplyr)
library(kableExtra)
library(GGally)
library(corrplot)
library(PerformanceAnalytics)
library(grDevices)
library(Hmisc)
library(psych)
library(devtools)
library(factoextra)
library(ggbiplot)
library(MASS)
library(lattice)
library(caret)\(~\) \(~\)
\(~\)
Se carga la base de datos
\(~\)
Fuente de base de datos: Kaggle
Cual base de datos descargar:
Abrir este dataset
\(~\)
Se carga el archivo csv a fin observar en primera instancia las dimensiones, columnas y tipo de datos:
Observación: Con el fin de mostrar conocimientos para trabajar con datos duplicados y NA, se agregan 3 filas al dataset original, luego se procederá a su eliminación para seguir trabajando con la fuente de datos original
\(~\)
## [[1]]
## [1] "Cantidad de valores duplicados que se eliminan:"
##
## [[2]]
## [1] 2
##
## [[3]]
## [1] "Total de valores NA que se eliminan:"
##
## [[4]]
## [1] 4
##
## [[5]]
## [1] "La posicion de los valores NA es:"
##
## $ID
## integer(0)
##
## $work_year
## [1] 608 609
##
## $experience_level
## integer(0)
##
## $employment_type
## integer(0)
##
## $job_title
## [1] 608 609
##
## $salary
## integer(0)
##
## $salary_currency
## integer(0)
##
## $salary_in_usd
## integer(0)
##
## $employee_residence
## integer(0)
##
## $remote_ratio
## integer(0)
##
## $company_location
## integer(0)
##
## $company_size
## integer(0)
## [1] "El dataframe no contiene duplicados ni valores NA; y tiene las siguientes dimensiones:"
## [2] "607"
## [3] "12"
A fines prácticos se muestran las primeras 10 filas del dataset original (para ampliar se puede visualizar el dataset consultando en el link de la fuente de datos, anteriormente mencionado).
| ID | work_year | experience_level | employment_type | job_title | salary | salary_currency | salary_in_usd | employee_residence | remote_ratio | company_location | company_size |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2020 | MI | FT | Data Scientist | 70000 | EUR | 79833 | DE | 0 | DE | L |
| 1 | 2020 | SE | FT | Machine Learning Scientist | 260000 | USD | 260000 | JP | 0 | JP | S |
| 2 | 2020 | SE | FT | Big Data Engineer | 85000 | GBP | 109024 | GB | 50 | GB | M |
| 3 | 2020 | MI | FT | Product Data Analyst | 20000 | USD | 20000 | HN | 0 | HN | S |
| 4 | 2020 | SE | FT | Machine Learning Engineer | 150000 | USD | 150000 | US | 50 | US | L |
| 5 | 2020 | EN | FT | Data Analyst | 72000 | USD | 72000 | US | 100 | US | L |
| 6 | 2020 | SE | FT | Lead Data Scientist | 190000 | USD | 190000 | US | 100 | US | S |
| 7 | 2020 | MI | FT | Data Scientist | 11000000 | HUF | 35735 | HU | 50 | HU | L |
| 8 | 2020 | MI | FT | Business Data Analyst | 135000 | USD | 135000 | US | 100 | US | L |
| 9 | 2020 | SE | FT | Lead Data Engineer | 125000 | USD | 125000 | NZ | 50 | NZ | S |
Se conocen primero cuales son las variables del dataset
## [1] "ID" "work_year" "experience_level"
## [4] "employment_type" "job_title" "salary"
## [7] "salary_currency" "salary_in_usd" "employee_residence"
## [10] "remote_ratio" "company_location" "company_size"
\(~\)
Se decriben las variables
| Variable | Descripción |
|---|---|
| ID | Columna que identifica a cada fila como unica (PK) |
| Work_year | Año que se pago el salario |
| Experience_level | Nivel de experiencia en el puesto durante el año con los siguientes valores posibles: |
| EN Entry-level / Junior MI Mid-level / Intermediate SE Senior-level / Expert EX Executive-level / Director | |
| Employment_type | Tipo de empleo para el puesto: PT Part-time FT Full-time CT Contract FL Freelance |
| Job_title | Rol trabajado durante el año. |
| Salary | Monto total del salario bruto pagado. |
| Salary_currency | Moneda del salario pagado con el código de moneda ISO 4217. |
| Salary_in_usd | El salario en USD (tasa de cambio dividida por la tasa promedio de USD para el año respectivo a través de |
| fxdata.foorilla.com). | |
| Employee_residence | País de residencia principal del empleado durante el año laboral como código de país ISO 3166. |
| Remote_ratio | Cantidad total de trabajo realizado de forma remota, los valores posibles son los siguientes: |
| 0 No remote work(lessthan 20%) 50 Partially remote 100 Fully remote (more than 80%) | |
| Company_location | País de la oficina principal del empleador o sucursal contratante como un código de país ISO 3166. |
| Company_size | Número promedio de personas que trabajaron para la empresa durante el año: |
| S less than 50 employees (small) M 50 to 250 employees (medium) L more than 250 employees (large) |
\(~\)
\(~\)
## Rows: 607
## Columns: 12
## $ ID <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1…
## $ work_year <int> 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 202…
## $ experience_level <chr> "MI", "SE", "SE", "MI", "SE", "EN", "SE", "MI", "MI…
## $ employment_type <chr> "FT", "FT", "FT", "FT", "FT", "FT", "FT", "FT", "FT…
## $ job_title <chr> "Data Scientist", "Machine Learning Scientist", "Bi…
## $ salary <int> 70000, 260000, 85000, 20000, 150000, 72000, 190000,…
## $ salary_currency <chr> "EUR", "USD", "GBP", "USD", "USD", "USD", "USD", "H…
## $ salary_in_usd <int> 79833, 260000, 109024, 20000, 150000, 72000, 190000…
## $ employee_residence <chr> "DE", "JP", "GB", "HN", "US", "US", "US", "HU", "US…
## $ remote_ratio <int> 0, 0, 50, 0, 50, 100, 100, 50, 100, 50, 0, 0, 0, 10…
## $ company_location <chr> "DE", "JP", "GB", "HN", "US", "US", "US", "HU", "US…
## $ company_size <chr> "L", "S", "M", "S", "L", "L", "S", "L", "L", "S", "…
\(~\)
Transformaciones necesarias que se realizan:
1.Cambio del tipo de variable character a factor de las variables experience_level, employment_type, company_size
2.Se eliminan las siguientes variables, las cuales se consideran redundantes: ID, Salary , Salary_currency
Se vuelve a mostrar la estructura con los cambios realizados
## Rows: 607
## Columns: 9
## $ work_year <int> 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 202…
## $ experience_level <fct> MI, SE, SE, MI, SE, EN, SE, MI, MI, SE, EN, MI, EN,…
## $ employment_type <fct> FT, FT, FT, FT, FT, FT, FT, FT, FT, FT, FT, FT, FT,…
## $ job_title <chr> "Data Scientist", "Machine Learning Scientist", "Bi…
## $ salary_in_usd <int> 79833, 260000, 109024, 20000, 150000, 72000, 190000…
## $ employee_residence <chr> "DE", "JP", "GB", "HN", "US", "US", "US", "HU", "US…
## $ remote_ratio <int> 0, 0, 50, 0, 50, 100, 100, 50, 100, 50, 0, 0, 0, 10…
## $ company_location <chr> "DE", "JP", "GB", "HN", "US", "US", "US", "HU", "US…
## $ company_size <fct> L, S, M, S, L, L, S, L, L, S, S, L, M, L, L, L, S, …
Se muestra a continuación los principales estadísticos descriptivos (mínimo, máximo, cuartiles, promedio) para cada una de las variables numéricas del dataset, mientras que para aquellas variables factor se muestra la frecuencia de cada categoría.
## work_year experience_level employment_type job_title
## Min. :2020 EN: 88 CT: 5 Length:607
## 1st Qu.:2021 EX: 26 FL: 4 Class :character
## Median :2022 MI:213 FT:588 Mode :character
## Mean :2021 SE:280 PT: 10
## 3rd Qu.:2022
## Max. :2022
## salary_in_usd employee_residence remote_ratio company_location
## Min. : 2859 Length:607 Min. : 0.00 Length:607
## 1st Qu.: 62726 Class :character 1st Qu.: 50.00 Class :character
## Median :101570 Mode :character Median :100.00 Mode :character
## Mean :112298 Mean : 70.92
## 3rd Qu.:150000 3rd Qu.:100.00
## Max. :600000 Max. :100.00
## company_size
## L:198
## M:326
## S: 83
##
##
##
\(~\)
Interpretación por variable:
work_year:
El dato mínimo que se espera de la variables es 2020; el 25% de los datos se alcanzan en “2021”, mientras que la mediana se ubica en 2022, el promedio no se debe tener en cuenta ya que la variable si bien es numérica hace referencia al dato año y tiene solo 3 valores posibles “ 2020-2021-2022”, el 75% de los datos se alcanza en 2022, siendo este ultimo el valor máximo esperado.
experience_level:
Se muestra la frecuencia por cada categoría de la variable.
employment_type:
Se muestra la frecuencia por cada categoría de la variable.
job_title:
Se reconoce esta variable como carácter, es decir, como cadena de texto. Por lo tanto solo se menciona su longitud que refiere a 607 filas.
salary_in_usd:
El dato mínimo que se espera de la variables es 2.859; el 25% de los datos se alcanzan en 62.726, mientras que la mediana se ubica en 101.570, el promedio es igual a 112.298, el 75% de los datos se alcanza en 150.000, siendo el valor máximo esperado 600.000
employee_residence:
Se reconoce esta variable como carácter, es decir, como cadena de texto. Por lo tanto solo se menciona su longitud que refiere a 607 filas.
remote_ratio:
El dato mínimo que se espera de la variables es 0; el 25% de los datos se alcanzan en 50, mientras que la mediana se ubica en 100, el promedio no se debe tener en cuenta ya que la variable hace referencia a un dato con solo 3 valores posibles “ 0-50-100”, el 75% de los datos se alcanza en 100, siendo este ultimo el valor máximo esperado.
company_location:
Se reconoce esta variable como carácter, es decir, como cadena de texto. Por lo tanto solo se menciona su longitud que refiere a 607 filas.
company_size:
Se muestra la frecuencia por cada categoría de la variable.
Top 5 principales países de residencia en los que se realizaron contrataciones en Data Science en los últimos 3 años vs los 5 principales países donde está la ubicación principal de las empresas que realizan las contrataciones.
Grafico por Pais de residencia del empleado Data Scientist
## # A tibble: 1 × 1
## Porc_acumulado
## <dbl>
## 1 0.759
Interpretación del gráfico:
Se puede observar que los 5 países, por orden descendente, que más contrataciones tienen son: US- Estados Unidos, GB- Reino Unido, IN-India, CA- Canadá y DE-Alemania
Estos 5 países representan el 75,9% de los empleados contratados en Data scientist.
Gráfico por País de origen de las empresas que realizan contrataciones en Data Scientist
## # A tibble: 1 × 1
## Porc_acumulado
## <dbl>
## 1 0.799
Interpretación del gráfico:
Se puede observar que los 5 países, por orden descendente, que más contrataciones realizaron son: US- Estados Unidos, GB- Reino Unido, CA-Canada, DE-Alemania y IN- India.
Estos 5 países representan el 79.9% de las contrataciones en Data scientist.
Conclusión de ambos gráficos
Comparando ambos gráficos se puede observar que en el top 5 se mantienen los mismos países y que en el segundo grafico estos representan en mayor parte a las contrataciones en Data Scientist.
Tras analizar las variables se considera relevante conservar para el análisis la variable company_location (Pais de origen de las empresas que realizan las contrataciones) y eliminar de mismo la variable Employee_residence (país de procedencia del empleado).
\(~\)
Relación entre el Salario anual en dólares con el tipo de contratación y el nivel de experiencia, de acuerdo con el país de residencia con mayor contrataciones de puestos en Data Science (US)
Interpretación del grafico:
Del grafico es posible observar que los EN- Entry-level definitivamente son los que menos ganan y en orden ascendente siguen los puestos Junior, MI Mid-level e Intermediate SE Senior-level y finalmente seguirían los Expert EX Executive-level que según la grafica son pocos.
Por otro lado, se puede notar que la gran mayoría de los trabajos son de tiempo completo, por lo cual se considera necesario analizar si podría ser relevante contemplar en el análisis el resto de los tipo de empleo.
Tablas de contingencias
A continuación se realiza una tabla de contingencias donde se muestra la frecuencia del nivel de experiencia según el tipo de empleo, a fin de detectar si es relevante considerar todos los tipos de empleos para el resto del análisis.
##
## CT FL FT PT
## EN 2 0 79 7
## EX 1 0 25 0
## MI 1 3 206 3
## SE 1 1 278 0
Antes de poder concluir se considera necesario mostrar la misma tabla en proporciones, la cual se puede ver a continuación.
##
## CT FL FT PT
## EN 0.003294893 0.000000000 0.130148270 0.011532125
## EX 0.001647446 0.000000000 0.041186161 0.000000000
## MI 0.001647446 0.004942339 0.339373970 0.004942339
## SE 0.001647446 0.001647446 0.457990115 0.000000000
Interpretación
De acuerdo con lo que se esperaba el 97% de los empleos se concentran en trabajos Full Time.
Por lo que nos quedaremos con los datos que reúnan esta característica.
Se realiza una nueva transformación del dataset, se filtran los datos por tipo de trabajo Full Time (FT) y se eliminan las siguientes variables: employment_type, Employee_residence
Se muestra a continuación la nueva estructura del dataset tras realizar las transformaciones que se mencionaron anteriormente.
## 'data.frame': 588 obs. of 7 variables:
## $ work_year : int 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
## $ experience_level: Factor w/ 4 levels "EN","EX","MI",..: 3 4 4 3 4 1 4 3 3 4 ...
## $ job_title : chr "Data Scientist" "Machine Learning Scientist" "Big Data Engineer" "Product Data Analyst" ...
## $ salary_in_usd : int 79833 260000 109024 20000 150000 72000 190000 35735 135000 125000 ...
## $ remote_ratio : int 0 0 50 0 50 100 100 50 100 50 ...
## $ company_location: chr "DE" "JP" "GB" "HN" ...
## $ company_size : Factor w/ 3 levels "L","M","S": 1 3 2 3 1 1 3 1 1 3 ...
Seguidamente se verá un panorama más completo de las variables a trabajar. En el caso de las numéricas se muestra los estadísticos descriptivos, la cantidad de observaciones, los valores perdidos. Para las variables factors o categóricas, se muestra la frecuencia, las proporciones y los valores perdidos.
## vars n mean sd median trimmed mad min
## work_year 1 588 2021.42 0.69 2022.0 2021.52 0.00 2020
## experience_level* 2 588 3.16 1.01 3.0 3.32 1.48 1
## job_title* 3 588 20.99 10.28 18.0 20.00 5.93 1
## salary_in_usd 4 588 113468.07 69476.47 104196.5 107675.82 63405.61 2859
## remote_ratio 5 588 70.75 41.00 100.0 75.85 0.00 0
## company_location* 6 588 36.10 15.80 48.0 38.22 0.00 1
## company_size* 7 588 1.80 0.65 2.0 1.75 0.00 1
## max range skew kurtosis se
## work_year 2022 2 -0.76 -0.61 0.03
## experience_level* 4 3 -1.10 0.07 0.04
## job_title* 48 47 0.91 0.47 0.42
## salary_in_usd 600000 597141 1.66 6.56 2865.16
## remote_ratio 100 100 -0.89 -0.93 1.69
## company_location* 49 48 -0.77 -1.12 0.65
## company_size* 3 2 0.22 -0.71 0.03
De este análisis se puede observar que el dataset no tiene valores perdidos, como también la cantidad de valores únicos que posee cada variable. Luego, vemos actualizada y con un poco más de detalle la información estadística por variable que se había analizado anteriormente.
Con el nuevo dataset se realizan varios gráficos para observar a las distintas variables individualmente.
## # A tibble: 1 × 1
## Porc_acumulado
## <dbl>
## 1 0.718
Interpretación de los resultados
Los 5 empleos que más se contratan son para Data Scientist, Data Engineer, Data Analyst, Machine Learning Engineer y Research Scientist.
Estos representan el 71.8% de las contrataciones realizadas en los últimos 3 años.
Gráfico de barras de la variable remote_ratio
Interpretación del grafico
La mayoría de los empleos son de manera remota.
Gráfico de barras de la variable work_year
Interpretación del gráfico
Se puede observar que las contrataciones en Data Scientist está en auge, dado que a través de los años fue aumentando la cantidad de contrataciones en esta área.
Gráfico de barras de la variable experience_level
Interpretación del gráfico:
Del grafico se puede observar que la mayoría de los empleados que trabajan en el área de Data Scientist son SE Senior-level, a ellos le siguen los MI Mid-level, luego los EN- Entry-level y finalmente los EX Executive-level, que son los menos.
Gráfico de barras de la variable company_size
Interpretación del gráfico:
Las empresas M (medianas) son las que más contrataciones en Data Scientist realizan.
A continuación se observan distintos gráficos que muestran la relación entre el salario en dólares y los distintos niveles de experiencia
Interpretación de los gráficos
En el primer grafico se puede observar las distribuciones de la variable salary_in_usd por separado para cada tipo de experience_level.
Luego, en el gráfico de violín se representa, en el eje vertical, la distribución de los datos como si se tratara de un gráfico de densidad, y se traza la imagen especular en el eje a fin de obtener el resultado en forma de ‘violín’ como se observa en la gráfica. Luego sobre este gráfico se superpone el boxplot.De esta manera podemos entender mejor la relación entre la distribución de los datos y el gráfico de cajas asociados a estos.
Finalmente podría se concluir que son pocos los salarios en dólares que superan los 200.000usd y a su vez, se reconfirma que los mismos aumentan a mayor nivel de experiencia.
\(~\) Salario medio en dólares, según el nivel de experiencia - Estados Unidos (US)
| mediana_salary |
|---|
| 136300 |
\(~\) \(~\)
Una vez analizados los resultados, se observa que en todos los casos hay una relación directa entre el nivel de experiencia y el salario, donde a mayor nivel de experiencia mayor salario.
A su vez, a medida que pasan los años las contrataciones van en aumento; por otro lado, son las medianas las empresas las que más contrataciones realizan, estos trabajos en su mayoría son remotos y el país con más contrataciones es Estados Unidos (US)
Se realiza una Matriz de Dispersión para observar cómo se relacionan las variables.
Interpretación
Las matrices de dispersión son un método simple de presentar las relaciones entre pares de variables cuantitativas. Este gráfico consiste en una matriz donde cada entrada presenta un gráfico de dispersión sencillo. En la diagonal están los nombres de las variables, junto a su distribución y por fuera de la diagonal están los diagramas de dispersión y la recta regresión ajustada para cada combinación de variables.
De esta matriz se puede destacar que de la relación entre company_size y salary_in_usd, surge que las grandes empresas son las que mejores sueldos pagan.
Particularmente para observar esto último se grafica la distribución del salario en dólares según del nivel de experiencia y el tamaño de la empresa:
Interpretación
Aquí se puede llegar a la misma conclusión, ya que se puede observar que igualmente para cada uno de los niveles de experiencia las grandes empresas son las que mejor pagan.
Antes de comenzar se transforman las variables experience_level y company_size en variables de tipo numero.
Se muestra a continuación la nueva estructura.
Se observa como fue la asignación de números para cada categoría de la variable experience_level)
##
## 1 2 3 4
## EN 79 0 0 0
## EX 0 25 0 0
## MI 0 0 206 0
## SE 0 0 0 278
Se observa como fue la asignación de números para cada categoría de la variable company_size)
##
## 1 2 3
## L 193 0 0
## M 0 318 0
## S 0 0 77
Se muestra la correlación entre las variables.
## work_year experience_level salary_in_usd remote_ratio
## work_year 1.00 0.30 0.17 0.08
## experience_level 0.30 1.00 0.31 0.06
## salary_in_usd 0.17 0.31 1.00 0.13
## remote_ratio 0.08 0.06 0.13 1.00
## company_size 0.10 -0.04 -0.15 0.02
## company_size
## work_year 0.10
## experience_level -0.04
## salary_in_usd -0.15
## remote_ratio 0.02
## company_size 1.00
Interpretación
La correlación mide la relación lineal entre dos variables y se mide con un coeficiente que va de -1 a 1.
Según sea el valor del coeficiente de correlación se puede interpretar de la siguiente manera:
r = 1, la relación es positiva perfecta
0 < r < 1 la relación es positiva
r = 0 no hay relación lineal
-1 < r < 0 la relación es negativa
r = -1 la relación es negativa perfecta
Por ejemplo se observa una relación positiva entre experience_level y salary_in_usd; y a la vez, entre experience_level y work_year.
Analisis del coeficiente de correlación entre experience_level y salary_in_usd
Coeficiente de correlación de la relación
## [1] 0.3123021
Interpretación
Esto muestra que el coeficiente de correlación es igual a 0,31. Sin embargo, debemos saber si esta relación es estadísticamente significativa, para lo que requerimos el p-value.
##
## Pearson's product-moment correlation
##
## data: data3$salary_in_usd and data3$experience_level
## t = 7.9581, df = 586, p-value = 0.00000000000000908
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.2374403 0.3834762
## sample estimates:
## cor
## 0.3123021
Interpretación
Se considera que si p_value es inferior a 0.01, se rechaza la hipótesis nula que predice que estas variables son independientes.
De acuerdo con la observación se da como resultado un p-value de 0.000, por lo que rechazamos la hipótesis nula de que la correlación es igual a cero, a un nivel de significancia del 1%. Por lo tanto, existe una relación estadísticamente significativa, donde si bien es una relación baja, a medida que el experience_level, aumenta salary_in_usd
De acuerdo con la explicación anterior se muestra una matriz con todos los p-value para cada par variables.
## work_year experience_level salary_in_usd remote_ratio
## work_year 1.00 0.30 0.17 0.08
## experience_level 0.30 1.00 0.31 0.06
## salary_in_usd 0.17 0.31 1.00 0.13
## remote_ratio 0.08 0.06 0.13 1.00
## company_size 0.10 -0.04 -0.15 0.02
## company_size
## work_year 0.10
## experience_level -0.04
## salary_in_usd -0.15
## remote_ratio 0.02
## company_size 1.00
##
## n= 588
##
##
## P
## work_year experience_level salary_in_usd remote_ratio
## work_year 0.0000 0.0000 0.0415
## experience_level 0.0000 0.0000 0.1422
## salary_in_usd 0.0000 0.0000 0.0018
## remote_ratio 0.0415 0.1422 0.0018
## company_size 0.0143 0.2793 0.0002 0.6907
## company_size
## work_year 0.0143
## experience_level 0.2793
## salary_in_usd 0.0002
## remote_ratio 0.6907
## company_size
Para resumir, se muestra en la siguiente grafica la matriz de dispersión junto a cada una de las correlaciones para cada par de variables.
Anteriormente se viene trabajando con un dataset reducido a variables numéricas, por lo que se continua el análisis con el mismo set de datos. El cual tiene las siguientes características:
## [1] "El numero total de Filas es 588 numero total de Columnas es 5 y el numero de NA es 0"
Se muestra la estructura que resulta del análisis PCA
## Importance of components:
## PC1 PC2 PC3 PC4 PC5
## Standard deviation 1.2529 1.0537 0.9847 0.8442 0.7985
## Proportion of Variance 0.3139 0.2221 0.1939 0.1426 0.1275
## Cumulative Proportion 0.3139 0.5360 0.7299 0.8725 1.0000
Interpretación¨
Las dos primeras variables del análisis resultan ser las más representativas para el análisis.
Se muestra a continuación un grafico de dispersión entre ellas.
Interpretación
Según se muestra parecería existir cierta correlación entre el primer par de componentes principales.
Se realiza un grafico de barras y grafico de líneas que muestra la variación de cada una de las componentes principales
Interpretación
Tal como se menciono anteriormente las dos primeras son las que mayor variación representan.
El resultado final del análisis es el siguiente:
## Principal Component Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the variables"
## 2 "$cor" "Correlations between variables and dimensions"
## 3 "$cos2" "Cos2 for the variables"
## 4 "$contrib" "contributions of the variables"
## Principal Component Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the variables"
## 2 "$cor" "Correlations between variables and dimensions"
## 3 "$cos2" "Cos2 for the variables"
## 4 "$contrib" "contributions of the variables"
## Principal Component Analysis Results for individuals
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the individuals"
## 2 "$cos2" "Cos2 for the individuals"
## 3 "$contrib" "contributions of the individuals"
## Principal Components Analysis
## Call: principal(r = data3, nfactors = 2, rotate = "none")
## Standardized loadings (pattern matrix) based upon correlation matrix
## PC1 PC2 h2 u2 com
## work_year 0.62 0.46 0.60 0.40 1.8
## experience_level 0.75 0.02 0.57 0.43 1.0
## salary_in_usd 0.70 -0.33 0.60 0.40 1.4
## remote_ratio 0.33 0.12 0.12 0.88 1.3
## company_size -0.13 0.88 0.79 0.21 1.0
##
## PC1 PC2
## SS loadings 1.57 1.11
## Proportion Var 0.31 0.22
## Cumulative Var 0.31 0.54
## Proportion Explained 0.59 0.41
## Cumulative Proportion 0.59 1.00
##
## Mean item complexity = 1.3
## Test of the hypothesis that 2 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0.16
## with the empirical chi square 311.61 with prob < 0.00000000000000000000000000000000000000000000000000000000000000000000097
##
## Fit based upon off diagonal values = 0.04
Interpretación
Estos dos factores, logran explicar el 54% de la varianza del dataset.
Interpretación
En el primer gráfico se ve la varianza explicada de cada uno de los factores, que ya se había visto anteriormente.
Luego, se muestran los gráficos del primer componente principal contra el segundo; tal es así que, en la segunda se ve una primera aproximación del análisis.
En la tercera se suma una representación del coseno al cuadrado donde están aquellos valores que menos se alejan del centro hasta aquellos que si se alejan del centro.
En el cuarto es una representación de variables sobre componentes principales.
Tras ese, se ve como es la variación entre cada una de las variables con cada uno de los factores según se acercan o se alejan del centro.
Finalmente en el último, se combinan los puntos de la distribución con cada una de las variables y los factores.
Se desea predecir la variable salary_in_usd
Se trabaja con el dataset reducido para variables numéricas.
Primeros resultados del análisis
## k-Nearest Neighbors
##
## 588 samples
## 4 predictor
##
## No pre-processing
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 588, 588, 588, 588, 588, 588, ...
## Resampling results across tuning parameters:
##
## k RMSE Rsquared MAE
## 5 65188.06 0.1547467 45529.26
## 7 64951.70 0.1459462 45645.04
## 9 65063.81 0.1397670 45636.31
##
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was k = 7.
Interpretación
De los resultados del ajuste del modelo se puede ver con que cantidad de k vecinos corrió, y las métricas de error, RMSE y MAE como así también la bondad de ajuste con el R cuadrado. En este caso se observa el mejor ajuste según la métrica de RMSE; por lo que, el mejor modelo fue k = 7.
Aquí se observa el resultado dado por “plot”. Indicando el RMSE.
Se analiza nuevamente reprocesando los datos antes de ejecutar el algoritmo
## k-Nearest Neighbors
##
## 397 samples
## 8 predictor
##
## Pre-processing: centered (145), scaled (145)
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 397, 397, 397, 397, 397, 397, ...
## Resampling results across tuning parameters:
##
## k RMSE Rsquared MAE
## 5 57504.89 0.2810105 41411.61
## 7 57679.83 0.2662186 42101.52
## 9 57812.55 0.2559944 42562.61
##
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was k = 5.
Interpretación
En este caso el mejor ajuste según la métrica de RMSE y por lo tanto el mejor modelo, fue k = 9.
Bondad de Ajuste. ¿Qué porcentaje de la variabilidad de la variable “salary_in_usd” podemos explicar con nuestro modelo?
## [,1]
## salary_in_usd 0.5118466
Interpretación
La variable salary_in_usd se puede explicar en un 51.2%
## [,1]
## salary_in_usd 0.7154345
Interpretación
Se puede ver que entrenando el modelo con cross validation, se obtienen resultados más realistas, sobre en qué % se puede explicar de la variable salary_in_usd, indicando que la corrida anterior con un solo split, sub-ajusta, dado que el R2 da 51.2% en relación al R2 con cross validation de 71.54%
Con el análisis del dataset se pudo observar que las contrataciones en el área de Data Scientist por los últimos 3 años fueron en aumento, las mayores contrataciones las realizaron empresas de Estados Unidos (US), en su mayoría son empresas medianas, la forma de contratación principalmente es remota y full time.
Encontramos una relación directa entre el nivel de experiencia y el salario anual en dolares, donde a mayor experiencia, mayor es el salario; por otra parte, cumpliendo con esta relación son las empresas grandes las que mejor pagan.
Por otra parte, tras el análisis de los componentes principales se logra explicar el 54% de la varianza del dataset.
Y finalmente, mediante el modelo de regresión con KNN fue posible predecir el salario anual en dólares en un 71.54%.