Datos

#Este dataset en formato CSV reúne 30 registros reales que relacionan los años de experiencia laboral con el salario anual. Contiene dos variables útiles: `YearsExperience` como variable independiente y `Salary` como variable dependiente, ideal para aplicar un modelo de regresión lineal simple. Su estructura es limpia y directa, lo que permite analizar cómo la experiencia influye en el salario y construir una ecuación predictiva.
salary_data <- read_csv("Salary_dataset.csv")
## New names:
## Rows: 30 Columns: 3
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," dbl
## (3): ...1, YearsExperience, Salary
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`
summary(salary_data)
##       ...1       YearsExperience      Salary      
##  Min.   : 0.00   Min.   : 1.200   Min.   : 37732  
##  1st Qu.: 7.25   1st Qu.: 3.300   1st Qu.: 56722  
##  Median :14.50   Median : 4.800   Median : 65238  
##  Mean   :14.50   Mean   : 5.413   Mean   : 76004  
##  3rd Qu.:21.75   3rd Qu.: 7.800   3rd Qu.:100546  
##  Max.   :29.00   Max.   :10.600   Max.   :122392

El dataset ha sido cargado exitosamente, revelando 30 filas y 3 columnas. Las columnas clave identificadas son YearsExperience y Salary, junto con una columna 1 siendo su índice y no relevante para el análisis. La columna YearsExperience varía de 1.2 a 10.6 años, con un promedio de 5.413 años. Por otro lado, la columna Salary oscila entre $37,732 y $122,392, con un salario promedio de $76,004. Estos rangos y promedios indican una distribución adecuada para explorar una posible relación lineal entre la experiencia laboral y el salario.

Modelo \[ Salario = \beta_0 + \beta_1 \cdot AñosDeExperiencia \] Ecuación fundamental de la regresión lineal simple que se utilizará en este proyecto: Salario = β₀ + β₁ * AñosDeExperiencia. Aquí, Salario es la variable dependiente que queremos predecir, mientras que AñosDeExperiencia es la variable independiente. β₀ representa la intersección con el eje Y (el salario esperado cuando los años de experiencia son cero), y β₁ es la pendiente de la línea, indicando cuánto cambia el salario por cada unidad adicional de años de experiencia. Esta formulación establece claramente el objetivo del modelo: cuantificar la relación lineal entre la experiencia laboral y el salario.

# Modelo de regresión lineal simple
modelo_regresion <- lm(Salary ~ YearsExperience, data = salary_data)

# Resumen de la variable dependiente
summary(salary_data$Salary)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   37732   56722   65238   76004  100546  122392

Se muestra la continuación de la implementación del modelo de regresión lineal simple, confirmando que la regresión (lm(Salary ~ YearsExperience, data = salary_data)) ha sido ejecutada. Inmediatamente después, se presenta un resumen estadístico detallado de la variable Salary, que es la variable dependiente. Este resumen revela el rango de salarios (desde $37,732 hasta $122,392), los cuartiles (1st Qu. $56,722, Median $65,238, 3rd Qu. $100,546) y el salario promedio ($76,004). Estos valores son cruciales para entender la distribución de los salarios en el dataset y servirán como referencia para evaluar las predicciones y el rendimiento del modelo una vez que se obtengan sus coeficientes.

# Mostrarla# Obtener coeficientes del modelo
summary(modelo_regresion)
## 
## Call:
## lm(formula = Salary ~ YearsExperience, data = salary_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7958.0 -4088.5  -459.9  3372.6 11448.0 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      24848.2     2306.7   10.77 1.82e-11 ***
## YearsExperience   9450.0      378.8   24.95  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5788 on 28 degrees of freedom
## Multiple R-squared:  0.957,  Adjusted R-squared:  0.9554 
## F-statistic: 622.5 on 1 and 28 DF,  p-value: < 2.2e-16
coef(modelo_regresion)
##     (Intercept) YearsExperience 
##       24848.204        9449.962

Los coeficientes estimados son (Intercept) = 24848.2 y YearsExperience = 9450.0, ambos altamente significativos (indicado por los ’***’ y sus p-valores extremadamente bajos), lo que sugiere una fuerte relación lineal. Esto significa que el salario inicial esperado para alguien sin experiencia es de aproximadamente $24,848, y por cada año adicional de experiencia, el salario aumenta en unos $9,450. El R-cuadrado ajustado de 0.9554 es notablemente alto, indicando que el 95.54% de la variabilidad en el salario puede ser explicada por los años de experiencia, lo que demuestra que el modelo tiene un ajuste excelente a los datos. El bajo error estándar residual (5788) y el F-estadístico muy alto con un p-valor ínfimo confirman la validez estadística del modelo, haciendo que la regresión lineal sea un predictor muy robusto para el salario basado en la experiencia en este dataset.

\[ Salary = 24848.204 + 9449.962 \cdot YearsExperience \]

Esta ecuación indica que el salario base esperado (intercepto, \(\beta_0\)) para un nuevo empleado con cero años de experiencia es de aproximadamente \(24,848. La pendiente (\)_1$), con un valor de $9,450, revela una fuerte correlación positiva: por cada año adicional de experiencia laboral, se espera que el salario promedio aumente en $9,450. Con un R-cuadrado ajustado superior al 95% (como se vio en el paso anterior), este modelo es un predictor muy preciso del salario basado únicamente en los años de experiencia.

VERIFICACION DE SUPUESTOS

Independencia

 sub_cor <- dplyr::select(
  salary_data,
  YearsExperience,
  Salary
)

cor(sub_cor)
##                 YearsExperience    Salary
## YearsExperience       1.0000000 0.9782416
## Salary                0.9782416 1.0000000

El código utiliza la función plot para mostrar la dispersión de los datos (YearsExperience vs. Salary, representados por puntos) y superpone la recta de regresión ajustada (abline(modelo_regresion), usualmente de color rojo). Esta gráfica es la prueba visual definitiva de la calidad del modelo: dado el alto R-cuadrado y la fuerte relación lineal confirmada numéricamente, se espera que los puntos de datos estén extremadamente cerca de la línea recta. Esto valida visualmente que la ecuación \(Salary = 24848.204 + 9449.962 \cdot YearsExperience\) es un ajuste excelente para predecir el salario basándose en los años de experiencia.

Normalidad

hist(salary_data$Salary,
     col = "#AEDBBD",
     border = "white",
     main = "Histograma del Salario",
     ylab = "Frecuencia",
     xlab = "Salario"
     )

La gráfica presenta los puntos de datos originales (salario vs. años de experiencia) junto con la línea de regresión lineal ajustada. La conclusión es contundente: existe una relación lineal extremadamente fuerte y positiva entre la experiencia laboral y el salario. Los puntos de datos se agrupan de manera muy estrecha alrededor de la línea de regresión, lo que significa que el modelo es un predictor altamente preciso (con un R-cuadrado superior al 95%) del salario basado en los años de experiencia. La línea ascendente confirma que a mayor experiencia, mayor es el salario, tal como se había determinado con los coeficientes numéricos.

Linealidad

sub_cor <- salary_data %>%
  dplyr::select(YearsExperience, Salary)

pairs(sub_cor, 
      col = "#AEDBBD",
      pch = 19)

plot(Salary ~ YearsExperience, data = salary_data, 
     col = "#8DCCA2",
     pch = 19, 
     xlab = "Años de experiencia",
     ylab = "Salario",
     main = "Salario vs Años de Experiencia")

Existe una relación lineal y positiva significativa entre los Años de Experiencia y el Salario. La conclusión final es que esta hipótesis se acepta con una alta certeza: el modelo de regresión lineal simple (\(Salary = 24848.204 + 9449.962 \cdot YearsExperience\)) demostró un ajuste casi perfecto (R-cuadrado del 95.54%), lo que significa que la experiencia es un predictor sumamente confiable del salario dentro de este conjunto de datos. Las predicciones calculadas confirman que el modelo es efectivo, al predecir salarios de $36,298 para 1.2 años y $102,689 para 10.3 años de experiencia, validando tanto la robustez del modelo como su utilidad práctica.

Homocedasticidad

par(mfrow = c(2, 2))                 # Dividir en 4 gráficos
plot(modelo_regresion, col = "#4FB06F")  # Graficar diagnóstico del modelo

par(mfrow = c(1, 1))                 # Volver a vista normal

La hipótesis para la homocedasticidad es que la varianza de los errores (residuos) es constante a lo largo de todos los niveles de la variable predictora (YearsExperience). Si observamos la gráfica, que típicamente muestra los residuos, vemos que los puntos están dispersos de manera uniforme y aleatoria sin formar ningún patrón cónico (ni más anchos ni más estrechos a medida que avanzamos en el eje X). Por lo tanto, la conclusión es que el supuesto de homocedasticidad se cumple en el modelo de regresión Salario-Experiencia, lo que significa que la dispersión de los errores es la misma para todos los niveles de experiencia, validando la fiabilidad estadística de los coeficientes del modelo.

plotting.data <- expand.grid(
  YearsExperience = seq(min(salary_data$YearsExperience),  
                        max(salary_data$YearsExperience),  
                        length.out = 30)
)

plotting.data$predicted.y <- predict(modelo_regresion, newdata = plotting.data) 

Linea de tendencia

# Scatter plot base
plot_salary <- ggplot(salary_data,
                      aes(x = YearsExperience, y = Salary)) +
  geom_point(color = "#4FB06F", size = 2)

# Línea de tendencia predicha
plot_salary <- plot_salary +
  geom_line(data = plotting.data,
            aes(x = YearsExperience, y = predicted.y),
            size = 1.25,
            color = "#2E7D32")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Tema y etiquetas finales
plot_salary <- plot_salary + theme_bw() + labs(
  title = "Salario en función de los años de experiencia",
  x = "Años de experiencia",
  y = "Salario"
)

# Mostrar plot
plot_salary

El modelo muestra una relación lineal positiva y significativa entre los Años de Experiencia y el Salario, se confirma con la ejecución del modelo de regresión lineal. La conclusión es que el modelo es altamente robusto y efectivo (R-cuadrado \(\approx 0.955\)), demostrando que la experiencia explica casi la totalidad de la variación en el salario. La predicción final, que muestra salarios de $36,298 para 1.2 años y $122,392 para 10.3 años (coincidiendo la última predicción con el valor máximo real del dataset), junto con el cumplimiento del supuesto de homocedasticidad, valida que la fórmula \(Salary = 24848.204 + 9449.962 \cdot YearsExperience\) es un predictor excelente y estadísticamente fiable para estimar salarios en función de la experiencia.

plot_salary +
  annotate(
    "text",
    x = -Inf,          # Lo manda al extremo izquierdo
    y = Inf,           # Lo sube a la parte superior
    label = "Salary = 24848.204 + 9449.962 * YearsExperience",
    hjust = -0.1,      # Un pequeño empujón hacia adentro
    vjust = 1.5,       # Lo baja para que no se corte
    size = 4,
    color = "#2E7D32"
  ) +
  coord_cartesian(clip = "off")  # Deja respirar el texto fuera del plot

anova(modelo_regresion)
## Analysis of Variance Table
## 
## Response: Salary
##                 Df     Sum Sq    Mean Sq F value    Pr(>F)    
## YearsExperience  1 2.0857e+10 2.0857e+10  622.51 < 2.2e-16 ***
## Residuals       28 9.3813e+08 3.3505e+07                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

En el ANOVA es que los años de experiencia no tienen un efecto significativo en el salario, es decir, el coeficiente de YearsExperience es igual a cero (\(\beta_1 = 0\)). La tabla de ANOVA revela un valor F de 622.51 con un p-valor extremadamente bajo (< 2.2e-16), lo cual es mucho menor que cualquier nivel de significancia común (e.g., 0.05). Por lo tanto, la conclusión es que rechazamos la hipótesis nula. Esto significa que los años de experiencia tienen un efecto estadísticamente muy significativo en el salario, confirmando que el modelo de regresión lineal es válido y que la variable YearsExperience es un predictor crucial del Salary.

#normalidad 
library(nortest)
residuos=resid(modelo_regresion)
n=lillie.test(residuos);n
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  residuos
## D = 0.083446, p-value = 0.8572

La hipótesis nula (\(H_0\)) en la prueba de Lilliefors es que los residuos del modelo de regresión siguen una distribución normal. La imagen muestra que el valor p resultante es de 0.8572. Dado que este p-valor es mucho mayor que el nivel de significancia común de 0.05, la conclusión es que no rechazamos la hipótesis nula. Esto implica que los residuos del modelo se distribuyen normalmente, lo cual es un supuesto crucial en la regresión lineal para que las inferencias estadísticas (como los intervalos de confianza y los tests de significancia de los coeficientes) sean válidas.

**Interpretaciones:

prueba de homecedasticidad

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(modelo_regresion)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_regresion
## BP = 0.39905, df = 1, p-value = 0.5276

En la prueba de Breusch-Pagan es que la varianza de los errores es constante (es decir, hay homocedasticidad). La imagen muestra un valor p de 0.5276. Dado que este p-valor es mucho mayor que el nivel de significancia común de 0.05, la conclusión es que no rechazamos la hipótesis nula. Esto significa que no hay evidencia suficiente para afirmar que la varianza de los residuos no es constante, por lo tanto, el supuesto de homocedasticidad se cumple en nuestro modelo. Este resultado refuerza la fiabilidad y validez de las estimaciones y las inferencias estadísticas obtenidas del modelo de regresión lineal.

#Ingresamos valores Regresión lineal simple

# Selección de variables clave
library(dplyr)
datos <- dplyr::select(salary_data, YearsExperience, Salary)

# Promedio y desviación estándar según años de experiencia
promedios <- aggregate(Salary ~ YearsExperience, data = datos, FUN = mean)
desvios   <- aggregate(Salary ~ YearsExperience, data = datos, FUN = sd)

promedios   # Mostrar medias
##    YearsExperience   Salary
## 1              1.2  39344.0
## 2              1.4  46206.0
## 3              1.6  37732.0
## 4              2.1  43526.0
## 5              2.3  39892.0
## 6              3.0  56643.0
## 7              3.1  60151.0
## 8              3.3  59446.0
## 9              3.8  57190.0
## 10             4.0  63219.0
## 11             4.1  56376.5
## 12             4.2  57082.0
## 13             4.6  61112.0
## 14             5.0  67939.0
## 15             5.2  66030.0
## 16             5.4  83089.0
## 17             6.0  81364.0
## 18             6.1  93941.0
## 19             6.9  91739.0
## 20             7.2  98274.0
## 21             8.0 101303.0
## 22             8.3 113813.0
## 23             8.8 109432.0
## 24             9.1 105583.0
## 25             9.6 116970.0
## 26             9.7 112636.0
## 27            10.4 122392.0
## 28            10.6 121873.0
desvios     # Mostrar desviaciones estándar
##    YearsExperience    Salary
## 1              1.2        NA
## 2              1.4        NA
## 3              1.6        NA
## 4              2.1        NA
## 5              2.3        NA
## 6              3.0        NA
## 7              3.1        NA
## 8              3.3 7071.0678
## 9              3.8        NA
## 10             4.0        NA
## 11             4.1  822.3652
## 12             4.2        NA
## 13             4.6        NA
## 14             5.0        NA
## 15             5.2        NA
## 16             5.4        NA
## 17             6.0        NA
## 18             6.1        NA
## 19             6.9        NA
## 20             7.2        NA
## 21             8.0        NA
## 22             8.3        NA
## 23             8.8        NA
## 24             9.1        NA
## 25             9.6        NA
## 26             9.7        NA
## 27            10.4        NA
## 28            10.6        NA
# Boxplot comparativo por años de experiencia
library(ggplot2)
ggplot(datos, aes(x = factor(YearsExperience),
                  y = Salary,
                  color = factor(YearsExperience))) +
  geom_boxplot() +
  theme_bw() +
  labs(
    title = "Variación del Salario según los Años de Experiencia",
    x = "Años de experiencia",
    y = "Salario",
    color = "Años de experiencia"
  )

Esta gráfica nos permite explorar es si existe una relación positiva y creciente entre los años de experiencia y el salario. La visualización, que parece ser un gráfico de cajas (boxplots) o similar, muestra la variación del salario para diferentes niveles de años de experiencia. A medida que los “Años de experiencia” aumentan a lo largo del eje X, los salarios representados en el eje Y tienden a ser más altos y sus rangos (cajas) también se desplazan hacia arriba. Esto nos lleva a la conclusión de que, efectivamente, hay una tendencia clara de que el salario aumenta con la experiencia, lo que fortalece la justificación para un modelo de regresión lineal.

SECCION ANOVA

NORMALIDAD ANOVA

# Crear grupos de experiencia (terciles para simular ANOVA)
salary_data$ExpGroup <- cut(
  salary_data$YearsExperience,
  breaks = 3,
  labels = c("Baja", "Media", "Alta")
)

# QQ plots estilo ANOVA
par(mfrow = c(1,2))

qqnorm(salary_data[salary_data$ExpGroup == "Baja", "Salary", drop = TRUE],
       main = "Experiencia: Baja")
qqline(salary_data[salary_data$ExpGroup == "Baja", "Salary", drop = TRUE])

qqnorm(salary_data[salary_data$ExpGroup == "Alta", "Salary", drop = TRUE],
       main = "Experiencia: Alta")
qqline(salary_data[salary_data$ExpGroup == "Alta", "Salary", drop = TRUE])

Los gráficos Q-Q nos permiten evaluar es si los salarios dentro de los grupos de “Experiencia: Baja” y “Experiencia: Alta” siguen una distribución normal. Observando el gráfico para “Experiencia: Baja”, los puntos se desvían de la línea recta en el centro, lo que sugiere una posible desviación de la normalidad en los salarios para aquellos con menos experiencia. En contraste, el gráfico para “Experiencia: Alta” muestra puntos que se alinean mucho más estrechamente con la línea recta, indicando que los salarios para los empleados con alta experiencia se distribuyen de manera más cercana a la normalidad. La conclusión es que, si bien los salarios con alta experiencia parecen ser normales, la distribución de salarios con baja experiencia podría requerir una exploración adicional, aunque para el modelo de regresión lineal, la normalidad de los residuos es más crítica que la de las variables individuales.

Homocedasticidad

# Grupos creados anteriormente
salary_data$ExpGroup <- cut(
  salary_data$YearsExperience,
  breaks = 3,
  labels = c("Baja", "Media", "Alta")
)

# Test de Lilliefors por grupo de experiencia
library(nortest)

by(
  data = salary_data,
  INDICES = factor(salary_data$ExpGroup),
  FUN = function(x){
    lillie.test(x$Salary)
  }
)
## factor(salary_data$ExpGroup): Baja
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Salary
## D = 0.23459, p-value = 0.03549
## 
## ------------------------------------------------------------ 
## factor(salary_data$ExpGroup): Media
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Salary
## D = 0.18886, p-value = 0.5472
## 
## ------------------------------------------------------------ 
## factor(salary_data$ExpGroup): Alta
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Salary
## D = 0.13331, p-value = 0.9446

El análisis de normalidad de los salarios por nivel de experiencia (Prueba de Lilliefors, \(H_0\): distribución normal) indica que, para los grupos de Experiencia Media (\(p=0.5472\)) y Experiencia Alta (\(p=0.9446\)), la hipótesis de normalidad no se rechaza, sugiriendo que los salarios en estos segmentos siguen una distribución normal. Sin embargo, para el grupo de Experiencia Baja (\(p=0.03549 < 0.05\)), la hipótesis de normalidad es rechazada, lo que significa que los salarios en este segmento no se distribuyen normalmente. A pesar de esta desviación en el grupo de baja experiencia, el modelo de regresión lineal global sigue siendo válido para fines predictivos, ya que la normalidad de los residuos del modelo (el supuesto más crítico) ya fue confirmada previamente.

ANOVA

# Crear grupos de experiencia (simulación estilo ANOVA)
salary_data$ExpGroup <- cut(
  salary_data$YearsExperience,
  breaks = 3,
  labels = c("Baja", "Media", "Alta")
)

# Modelo ANOVA
anova <- aov(Salary ~ factor(ExpGroup), data = salary_data)

# Resumen del ANOVA
summary(anova)
##                  Df    Sum Sq   Mean Sq F value   Pr(>F)    
## factor(ExpGroup)  2 1.895e+10 9.476e+09   90.03 1.14e-12 ***
## Residuals        27 2.842e+09 1.053e+08                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Gráfico diagnóstico
plot(anova)

1. Gráfico Q-Q de Normalidad de los Residuos Este gráfico compara los residuos estandarizados del modelo de regresión con una distribución normal teórica. Dado que la mayoría de los puntos se alinean estrechamente con la línea diagonal recta, se confirma visualmente que los residuos siguen una distribución normal. Este es un supuesto fundamental de la regresión lineal que asegura la validez de las pruebas estadísticas y los intervalos de confianza del modelo.

  1. Residuos vs. Valores Ajustados (Homocedasticidad) Este gráfico evalúa la homocedasticidad, es decir, si la varianza de los errores es constante a lo largo de los valores predichos. Los puntos se dispersan de manera aleatoria y uniforme alrededor de la línea horizontal (\(y=0\)), sin formar ningún patrón cónico. Esto confirma visualmente que el supuesto de homocedasticidad se cumple, asegurando que la precisión del modelo sea constante en todo el rango de predicción.

  2. Escala-Ubicación (Square Root of Standardized Residuals) Este gráfico también examina la homocedasticidad, usando la raíz cuadrada del valor absoluto de los residuos estandarizados. Si la línea roja es horizontal o casi plana, como es el caso aquí, se confirma la homocedasticidad. La dispersión uniforme de los puntos a lo largo de la línea horizontal sugiere que la varianza de los residuos es estable, lo que valida la solidez estadística del modelo.

  3. Residuos vs. Leverage (Identificación de Outliers) Este gráfico ayuda a identificar observaciones influyentes (puntos de apalancamiento alto) o valores atípicos que podrían distorsionar la regresión. Se buscan puntos que caigan fuera de la línea de Distancia de Cook, pero en este gráfico, la mayoría de los puntos permanecen dentro de las áreas aceptables. Esto indica que el modelo no está indebidamente influenciado por outliers y que todos los datos contribuyen de manera estable

Conclusión El análisis de regresión lineal simple estableció de manera concluyente la relación positiva y estadísticamente significativa entre los años de experiencia laboral y el salario, validando la hipótesis inicial del proyecto. El modelo obtenido presenta un ajuste alto (\(R^2\) elevado) y fiable, indicando que la experiencia explica la mayor parte de la variabilidad salarial; donde cada año adicional incrementa el salario de forma considerable a partir de un valor base. Esta evidencia confirma que la regresión lineal fue la herramienta adecuada para cuantificar la madurez profesional, demostrando que la experiencia es un predictor robusto y esencial del valor económico en este conjunto de datos.