Linealidad

Solución:

Comenzamos por cargar los datos y graficamos el scatterplot de los datos sin transformar, donde tomaremos a years como la variable independiente y a salary como la variable dependiente.

# Datos
datos <- read.csv("initech.csv", header=T)

# Realizamos el ajuste del modelo
fit1 <- lm(salary~years, data = datos)

# Scatterplot

par(mar=c(4, 5, 1, 1))
plot(datos$years, datos$salary, xlab="years", ylab="salary",col="blue")

# línea del ajuste del modelo
abline(fit1$coefficients, col="red")

De tal manera nos damos una idea de que el modelo no cumple con el supuesto de la linealidad. Lo anterior puede confirmarse al observar el scatterplot que trae r por defecto (plot(<modelo>, 1)).

Procederemos a realizar una transformación del tipo Box-Cox pues la variable dependiente es estrictamente positiva. Luego, al utilizar summary(powerTransform(fit1)) tenemos que no se rechaza \(\lambda=0\) pero si se rechaza \(\lambda=1\). Podríamos entonces considerar la transformación logarítmica como opción, pero ya la probé y no trajó resultados favorables así que lo siguiente será utilizar el valor de \(\lambda\) que se sugiere, el cual es \(0.079\) (que se redondea a \(0.08\)).

Comenzaremos por realizar el ajuste a la regresión con los datos transformados y mostraremos un scatterplot con estos datos

# Transformación de los datos
datos$box_coxsalary <- ((datos$salary) ** 0.08 - 1) / 0.08

# Ajuste datos transformados
fit2 <- lm(box_coxsalary ~ years, data = datos)

# Scatterplot
par(mar=c(4, 5, 1, 1))
plot(datos$years, datos$box_coxsalary, xlab="years", ylab="salary",col="purple")

# línea del ajuste del modelo con los datos transformados
abline(fit2$coefficients, col="red")

y comprobamos rápidamente que el supuesto de la linealidad se cumple para esta transformación

plot(fit2, 1)

Procederemos a interpretar los parámetros \(\hat{\beta}_{0}\) y \(\hat{\beta_{1}}\), los cuales están dados en

fit2$coefficients
## (Intercept)       years 
##  16.3493621   0.1980467

Donde

  • \(\hat{\beta_{1}}\): Por cada año adicional, el número promedio del salario (transformado) aumenta en un quinto (apróx).

  • \(\hat{\beta_{0}}\): Para 0 años, es decir al inicio, en promedio se tiene un salario (transformado) de 16.34.

Finalmente graficamos los datos no transformados con la curva asociada a la recta ajustada:

# scatterplot de los datos no transformados
par(mar=c(4, 5, 1, 1))
plot(datos$years, datos$salary, xlab="years", ylab="salary",col="blue")

# línea del ajuste del modelo 
abline(fit1$coefficients, col="red")

# ------------------------------------------------------------------------

# Función para gráficar la curva
f <- function(x){
  (2.3072 + 0.016 * x) ** 12.5
  }

# Graficamos la curva 
curve(f, from=min(datos$years), to = max(datos$years), col="purple", add=T)

legend("topleft", legend = c("curva asociada a la recta", "recta ajustada"),
       lwd = 2, col=c("purple", "red"))

donde dicha curva se obtuvo de despejar \(y\) de la ecuación

\[ \frac{y^{0.08}-1}{0.08}=\hat{\beta_{0}}+\hat{\beta_{1}}\cdot x =16.34 +0.2\cdot x \]

de donde

\[ y=exp\left\{\frac{ln[(0.08)(16.34+0.2\cdot x)+1]}{0.08}\right\}=[(0.08)(16.34+0.2\cdot x)+1]^{1/0.08} \]