Se va a evaluar si existen diferencias significativas en el salario promedio de maestros de escuelas públicas según factores como la región. Se aplicará ANOVA para comparar grupos definidos por variables cualitativas y ANCOVA para controlar efectos de variables cuantitativas.
rm(list=ls())
library(readxl)
Data <- read_excel("Table 9_1.xlsx", col_types = c("text",
"numeric", "numeric", "numeric", "numeric"))
View(Data)
dim(Data)
## [1] 51 5
names(Data)
## [1] "Estados" "Salary" "Spending" "D2" "D3"
class(Data$Estados)
## [1] "character"
str(Data)
## tibble [51 × 5] (S3: tbl_df/tbl/data.frame)
## $ Estados : chr [1:51] "Connecticut" "Illinois" "Indiana" "Iowa" ...
## $ Salary : num [1:51] 60822 58246 47831 43130 43334 ...
## $ Spending: num [1:51] 12436 9275 8935 7807 8373 ...
## $ D2 : num [1:51] 1 1 1 1 1 1 1 1 1 1 ...
## $ D3 : num [1:51] 0 0 0 0 0 0 0 0 0 0 ...
summary(Data)
## Estados Salary Spending D2
## Length:51 Min. :35378 Min. : 5347 Min. :0.0000
## Class :character 1st Qu.:42973 1st Qu.: 7824 1st Qu.:0.0000
## Mode :character Median :45941 Median : 8622 Median :0.0000
## Mean :48069 Mean : 9241 Mean :0.4118
## 3rd Qu.:53298 3rd Qu.:10102 3rd Qu.:1.0000
## Max. :63640 Max. :15508 Max. :1.0000
## D3
## Min. :0.0000
## 1st Qu.:0.0000
## Median :0.0000
## Mean :0.3333
## 3rd Qu.:1.0000
## Max. :1.0000
Permite explorar y entender el conjunto de datos antes de hacer cualquier análisis.
str(Data): Muestra la estructura interna del objeto Data.
summary(Data): Muestra un resumen estadístico básico de cada variable.
head(Data,10)
## # A tibble: 10 × 5
## Estados Salary Spending D2 D3
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Connecticut 60822 12436 1 0
## 2 Illinois 58246 9275 1 0
## 3 Indiana 47831 8935 1 0
## 4 Iowa 43130 7807 1 0
## 5 Kansas 43334 8373 1 0
## 6 Maine 41596 11285 1 0
## 7 Massachusetts 58624 12596 1 0
## 8 Michigan 54895 9880 1 0
## 9 Minnesota 49634 9675 1 0
## 10 Missouri 41839 7840 1 0
Ver las primeras 10 filas del data frame (Data). Es una forma rápida de inspeccionar cómo están organizadas las observaciones y detectar errores o formatos inesperados.
# EJEMPLO
datos <- data.frame(
nombre = c("Ana", "Luis", "Carla", "Pedro"),
genero = c("F", "M", "F", "M")
)
# Opción 1: Usar ifelse()
datos$dummy_mujer <- ifelse(datos$genero == "F", 1, 0)
# Opción 2: Usar as.numeric() con lógica booleana
datos$dummy_masculino <- as.numeric(datos$genero == "M")
# Opción 3: Crear dummies para varias categorías (con model.matrix)
# Si la variable tiene más de dos categorías (por ejemplo: "soltero", "casado", "divorciado") y quieres varias dummies:
datos$estado_civil <- c("soltero", "casado", "soltero", "divorciado")
dummies <- model.matrix(~ estado_civil - 1, data = datos)
# Eso te dará un data frame con una columna por cada categoría (sin intercepto por el -1).
dummies <- data.frame(dummies)
# Crear variable 'region' según dummies
Data$region <- with(Data, ifelse(D2 == 1, "Noreste_NorteCentro",
ifelse(D3 == 1, "Sur", "Oeste")))
Data$region <- factor(Data$region)
### R, por defecto, usa la primera categoría alfabéticamente como la referencia (base). En este caso, "Noreste_NorteCentro" aparece antes que "Oeste" y "Sur"
# Convertir a factor (variable categórica)
Data$region <- factor(Data$region, levels = c("Oeste", "Noreste_NorteCentro", "Sur"))
#Esto define el orden de niveles y fuerza que "Oeste" sea la base de comparación en el modelo.
# Revisar tabla de frecuencia para confirmar
table(Data$region)
##
## Oeste Noreste_NorteCentro Sur
## 13 21 17
levels(Data$region)
## [1] "Oeste" "Noreste_NorteCentro" "Sur"
# Ajustar modelo lineal con variable categórica - MODELO
modelo_anova <- lm(Salary ~ region, data = Data)
# Resumen del modelo
summary(modelo_anova)
##
## Call:
## lm(formula = Salary ~ region, data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14161 -4566 -1638 4632 15625
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 48015 1857 25.853 <2e-16 ***
## regionNoreste_NorteCentro 1524 2363 0.645 0.522
## regionSur -1721 2467 -0.698 0.489
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6696 on 48 degrees of freedom
## Multiple R-squared: 0.04397, Adjusted R-squared: 0.004134
## F-statistic: 1.104 on 2 and 48 DF, p-value: 0.3399
Interpretación:
Se creó un modelo lineal donde el salario depende de la región (variable categórica) con el fin de realizar el análisis ANOVA, el cual muestra que los coeficientes de las regiones indican la diferencia promedio de salario respecto a la categoría base (por defecto, “Centro” si está primero alfabéticamente).
El Intercepto, representa el salario promedio en la categoría base de region.
Los coeficientes de las otras regiones, indican la diferencia en salario respecto a esa categoría base.
Los valores p, para ver si esas diferencias son estadísticamente significativas.
El R-squared, que indica cuánta variabilidad del salario se explica por la región.
Recuerda:
H₀: El salario promedio no varía según la región.
H₁: Al menos una región tiene un salario promedio distinto.
# Prueba ANOVA
anova(modelo_anova)
## Analysis of Variance Table
##
## Response: Salary
## Df Sum Sq Mean Sq F value Pr(>F)
## region 2 98985177 49492589 1.1038 0.3399
## Residuals 48 2152304189 44839671
Permite evaluar si hay diferencias globales significativas entre los grupos de la variable categórica.
Df: Grados de libertad.
Sum Sq: Suma de cuadrados (varianza explicada).
Mean Sq: Suma de cuadrados media.
F value: Estadístico F.
Pr(>F): Valor p asociado.
El análisis de varianza muestra que no hay diferencias estadísticamente significativas en el salario promedio de los maestros entre las regiones consideradas (F = 1.10, p = 0.3399). Es decir, la región no influye de manera significativa en el salario docente.
# Paso 4: Ver resumen del modelo
summary(modelo_anova)
##
## Call:
## lm(formula = Salary ~ region, data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14161 -4566 -1638 4632 15625
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 48015 1857 25.853 <2e-16 ***
## regionNoreste_NorteCentro 1524 2363 0.645 0.522
## regionSur -1721 2467 -0.698 0.489
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6696 on 48 degrees of freedom
## Multiple R-squared: 0.04397, Adjusted R-squared: 0.004134
## F-statistic: 1.104 on 2 and 48 DF, p-value: 0.3399
# Paso 5: Prueba ANOVA para comparar grupos
anova(modelo_anova)
## Analysis of Variance Table
##
## Response: Salary
## Df Sum Sq Mean Sq F value Pr(>F)
## region 2 98985177 49492589 1.1038 0.3399
## Residuals 48 2152304189 44839671
Interpretación:
El p-value: 0.3399 > 0.05 → No hay evidencia estadística suficiente para rechazar la hipótesis nula. Por ende, no existen diferencias estadísticamente significativas en los salarios promedio entre las regiones.
# Cargar librería para gráficos
library(ggplot2)
# Boxplot de Salario por region
ggplot(Data, aes(x = region, y = Salary, fill = region)) +
geom_boxplot() +
labs(title = "Distribución de salarios por región", x = "Región", y = "Salario") +
theme_minimal()
Interpretación:
El gráfico boxplot permite observar la dispersión y mediana de los salarios por región.
La región Noreste_NorteCentro tiene una mediana salarial más alta y mayor dispersión.
Oeste muestra una mediana intermedia, también con una dispersión considerable.
Sur tiene la mediana más baja y una menor variabilidad.
Como muestra la tabla ANOVA (Pr(>F) = 0.3399), estas diferencias no son estadísticamente significativas al 5%, por lo que no se puede concluir que la región influya de forma significativa en el salario.
library(ggplot2)
library(dplyr)
# Calcular medias y errores estándar por región
summary_stats <- Data %>%
group_by(region) %>%
summarise(
mean_salary = mean(Salary),
sd_salary = sd(Salary),
n = n(),
se = sd_salary / sqrt(n)
)
# Gráfico de medias con barras de error (±1.96*SE para 95% IC)
ggplot(summary_stats, aes(x = region, y = mean_salary, fill = region)) +
geom_col(width = 0.6) +
geom_errorbar(aes(ymin = mean_salary - 1.96 * se,
ymax = mean_salary + 1.96 * se),
width = 0.2) +
labs(title = "Salario promedio por región con Intervalo de Confianza 95%",
x = "Región",
y = "Salario promedio (USD)") +
theme_minimal() +
theme(legend.position = "none")
ggplot(Data, aes(x = region, y = Salary, color = region)) +
geom_jitter(width = 0.2, alpha = 0.7) +
labs(title = "Salarios de Maestros por Región",
x = "Región",
y = "Salario") +
theme_minimal() +
theme(legend.position = "none")
rm(list= ls())
Data <- read_excel("C:/Users/Jimmy Cueva/Desktop/R para finanzas/Econometría/Variables Dummy/Base_2_cualitativas.xlsx")
head(Data)
## # A tibble: 6 × 3
## Salario_Hora Estado_Civil Region
## <dbl> <chr> <chr>
## 1 8.03 Casado Sur
## 2 6.56 No Casado Sur
## 3 9.24 No Casado No Sur
## 4 8.23 Casado Sur
## 5 8.97 Casado Sur
## 6 9.26 No Casado No Sur
# Genrar variable Dummies
Data$D2 <- ifelse(Data$Estado_Civil == "Casado", 1, 0)
Data$D3 <- ifelse(Data$Region == "Sur", 1, 0)
names(Data)[1] <- "Salario_hora"
# Modelo con las dos variables dummy D2 y D3
modelo_dos_dummies <- lm(Salario_hora ~ D2 + D3, data = Data)
# Resumen del modelo
summary(modelo_dos_dummies)
##
## Call:
## lm(formula = Salario_hora ~ D2 + D3, data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.54793 -0.32069 0.01767 0.30630 1.38442
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.79178 0.03478 252.77 <2e-16 ***
## D2 1.08715 0.04089 26.59 <2e-16 ***
## D3 -1.63845 0.04087 -40.09 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4695 on 525 degrees of freedom
## Multiple R-squared: 0.8152, Adjusted R-squared: 0.8145
## F-statistic: 1158 on 2 and 525 DF, p-value: < 2.2e-16
Recuerda:
Se usa para analizar el efecto individual de cada variable Dummy
D2: indica si está casado (1 = si, 0 = no)
D3: indica si el estado está en la región Sur (1 = si, 0 = no)
Salary ~ D2 + D3 explica el salario según si el estado de residencia y su estado civil.
La variable base o control son los no casados
# Prueba ANOVA para este modelo
anova(modelo_dos_dummies)
## Analysis of Variance Table
##
## Response: Salario_hora
## Df Sum Sq Mean Sq F value Pr(>F)
## D2 1 156.06 156.06 708.06 < 2.2e-16 ***
## D3 1 354.28 354.28 1607.41 < 2.2e-16 ***
## Residuals 525 115.71 0.22
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Recuerda:
Pr(>F) es el valor p para el test de hipótesis:
H0: El coeficiente de la dummy es igual a cero (no hay efecto significativo).
H1: El coeficiente es diferente de cero (hay efecto significativo).
Para D2 el p-valor es 0.196, mayor que el nivel común de significancia 0.05 → No se rechaza H0 → No hay evidencia significativa de que D2 afecte el salario. Para D3 el p-valor es 0.489, también mayor que 0.05 → No se rechaza H0.
rm(list=ls())
Data <- read_excel("Table 9_1.xlsx", col_types = c("text",
"numeric", "numeric", "numeric", "numeric"))
Data$region <- with(Data, ifelse(D2 == 1, "Noreste_NorteCentro",
ifelse(D3 == 1, "Sur", "Oeste")))
Data$region <- factor(Data$region,
levels = c("Oeste", "Noreste_NorteCentro", "Sur"))
# Ajustar el modelo ANCOVA sin interacción
modelo_ancova <- lm(Salary ~ Spending + D2 + D3, data = Data)
# Resumen del modelo
summary(modelo_ancova)
##
## Call:
## lm(formula = Salary ~ Spending + D2 + D3, data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10556 -2471 106 2066 15084
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 28694.9180 3262.5213 8.795 1.70e-11 ***
## Spending 2.3404 0.3592 6.515 4.45e-08 ***
## D2 -2954.1268 1862.5756 -1.586 0.1194
## D3 -3112.1948 1819.8725 -1.710 0.0938 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4905 on 47 degrees of freedom
## Multiple R-squared: 0.4977, Adjusted R-squared: 0.4656
## F-statistic: 15.52 on 3 and 47 DF, p-value: 3.762e-07
Interpretación:
Spending es un predictor muy fuerte y significativo del salario.
Las dummies D2 y D3 (que representan grupos o regiones diferentes) muestran efectos negativos respecto al grupo base, pero no son estadísticamente significativos al 5% (aunque D3 está cerca, p=0.094).
Esto sugiere que, una vez controlado por Spending, no hay evidencia fuerte para afirmar que los salarios difieran entre regiones en tu muestra, pero D3 podría merecer más atención o análisis con datos más grandes.
# Gráfico de residuos
plot(modelo_ancova, which = 1) # Residuos vs valores ajustados
# ANOVA del modelo
anova(modelo_ancova)
## Analysis of Variance Table
##
## Response: Salary
## Df Sum Sq Mean Sq F value Pr(>F)
## Spending 1 1037678493 1037678493 43.1251 3.714e-08 ***
## D2 1 12324668 12324668 0.5122 0.47773
## D3 1 70369486 70369486 2.9245 0.09384 .
## Residuals 47 1130916720 24062058
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interpretación:
Spending es el principal determinante del salario promedio: más gasto se asocia con más salario (muy significativo).
D2 (NorteCentro) no tiene un efecto significativo.
D3 (Sur) tiene un efecto marginal (p ≈ 0.09): podría influir ligeramente en el salario.
El modelo en conjunto sugiere que el gasto importa más que la región.
# Modelo con interacción entre Spending y las dummies D2 y D3
# Nos permite para verificar si la pendiente de Spending varía entre grupos)
modelo_interaccion <- lm(Salary ~ Spending * (D2 + D3), data = Data)
# Resumen del modelo con interacción
summary(modelo_interaccion)
##
## Call:
## lm(formula = Salary ~ Spending * (D2 + D3), data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11234.8 -2617.9 -268.5 2100.8 15217.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.344e+04 6.742e+03 4.960 1.05e-05 ***
## Spending 1.766e+00 7.999e-01 2.208 0.0324 *
## D2 -1.387e+04 8.906e+03 -1.558 0.1264
## D3 -4.873e+03 8.526e+03 -0.571 0.5705
## Spending:D2 1.182e+00 9.779e-01 1.208 0.2332
## Spending:D3 2.375e-01 9.848e-01 0.241 0.8105
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4904 on 45 degrees of freedom
## Multiple R-squared: 0.5193, Adjusted R-squared: 0.4659
## F-statistic: 9.722 on 5 and 45 DF, p-value: 2.402e-06
Interpretación:
Spending sí influye en el salario (coef. sig. y positivo).
Las diferencias regionales en el efecto del gasto no son significativas: las pendientes de Spending no varían de manera importante entre regiones.
El modelo tiene un R² ajustado de 0.466, lo cual indica que explica alrededor del 47% de la variabilidad del salario.
library(ggplot2)
# Crear una nueva variable de región
Data$Region <- factor(ifelse(Data$D2 == 1, "D2",
ifelse(Data$D3 == 1, "D3", "D1")))
# Graficar
ggplot(Data, aes(x = Spending, y = Salary, color = Region)) +
geom_point(size = 2) +
geom_smooth(method = "lm", formula = y ~ x, se = FALSE) +
labs(title = "Interacción: Salary vs Spending según Región",
x = "Gasto en capacitación (Spending)",
y = "Salario",
color = "Región") +
theme_minimal()
Gráfico de dispersión (scatter plot) con líneas de regresión lineal ajustadas para cada grupo de región (D1, D2, D3).
library(effects)
plot(allEffects(modelo_ancova))
Spending effect plot :
Relación positiva: A medida que aumenta el gasto (Spending), el salario también aumenta.
Intervalo de confianza (sombra azul): Confirma que el efecto es estadísticamente significativo, ya que el intervalo no incluye una pendiente plana.
D2 effect plot (Región Noreste):
Interpretación: En comparación con la región base (Oeste), la región Noreste muestra un menor salario promedio, controlando por el gasto.
Pendiente negativa: Indica que la región Noreste tiene un efecto reductor sobre el salario esperado.
D3 effect plot (Región Sur) :
Efecto también negativo: Similar a la región Noreste, pertenecer a la región Sur (D3 = 1) está asociado con salarios más bajos, aunque con un intervalo de confianza más amplio (mayor incertidumbre).
Conclusión general:
El gasto tiene un efecto positivo claro sobre el salario.
Las regiones Noreste (D2) y Sur (D3) tienen efectos negativos sobre el salario, lo que sugiere posibles desigualdades salariales regionales, controlando por gasto.
Si la prueba de Chow mostró que las pendientes no difieren significativamente, entonces el modelo sin interacción es suficiente; es decir, el efecto del gasto es el mismo sin importar la región, pero el nivel base del salario sí varía según la región.
anova(modelo_interaccion)
## Analysis of Variance Table
##
## Response: Salary
## Df Sum Sq Mean Sq F value Pr(>F)
## Spending 1 1037678493 1037678493 43.1482 4.455e-08 ***
## D2 1 12324668 12324668 0.5125 0.47777
## D3 1 70369486 70369486 2.9261 0.09405 .
## Spending:D2 1 47304106 47304106 1.9670 0.16763
## Spending:D3 1 1398949 1398949 0.0582 0.81051
## Residuals 45 1082213666 24049193
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interpretación:
Spending tiene un efecto positivo y altamente significativo sobre el salario (p < 0.001). Esto significa que, en general, a mayor gasto en capacitación, mayor es el salario.
D2 y D3 no son significativos por sí solos (p > 0.1), lo que indica que, si no se considera interacción, sus interceptos no difieren significativamente del grupo base (D1).
anova(modelo_ancova, modelo_interaccion)
## Analysis of Variance Table
##
## Model 1: Salary ~ Spending + D2 + D3
## Model 2: Salary ~ Spending * (D2 + D3)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 47 1130916720
## 2 45 1082213666 2 48703055 1.0126 0.3714
Interpretación:
RSS disminuye levemente al pasar al modelo con interacción (1130916720 → 1082213666).
Grados de libertad perdidos: 2 (por las dos interacciones agregadas).
El p-valor > 0.05 indica que el modelo con interacción no mejora significativamente el ajuste respecto al modelo sin interacción. Por lo tanto, el modelo ANCOVA sin interacción es suficiente.
library(ggplot2)
# Añadir predicciones de ambos modelos
Data$pred_sin_interaccion <- predict(modelo_ancova)
Data$pred_con_interaccion <- predict(modelo_interaccion)
# Convertir las dummies en factor para facilitar el gráfico
Data$Grupo <- factor(with(Data, ifelse(D2 == 1, "D2", ifelse(D3 == 1, "D3", "D1"))))
# Gráfico
ggplot(Data, aes(x = Spending, y = Salary, color = Grupo)) +
geom_point() +
geom_line(aes(y = pred_sin_interaccion, linetype = "Sin interacción")) +
geom_line(aes(y = pred_con_interaccion, linetype = "Con interacción")) +
labs(title = "Comparación de modelos ANCOVA vs. Interacción",
y = "Salary", linetype = "Modelo") +
theme_minimal()
La prueba de Chow sirve para verificar si dos o más grupos (por ejemplo, dos períodos de tiempo o dos regiones) tienen coeficientes de regresión diferentes en un modelo lineal. Es útil para detectar rupturas estructurales o si la relación entre variables cambia entre grupos.
# Modelo sin interacción (hipótesis nula: mismas pendientes)
modelo_ancova <- lm(Salary ~ Spending + D2 + D3, data = Data)
# Modelo con interacción (hipótesis alternativa: pendientes diferentes)
modelo_chow <- lm(Salary ~ Spending * (D2 + D3), data = Data)
# Prueba de Chow (comparación anova entre ambos modelos)
anova(modelo_ancova, modelo_chow)
## Analysis of Variance Table
##
## Model 1: Salary ~ Spending + D2 + D3
## Model 2: Salary ~ Spending * (D2 + D3)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 47 1130916720
## 2 45 1082213666 2 48703055 1.0126 0.3714
Interpretación:
# Crear dataframe
library(dplyr)
data_chow <- Data %>% select(Salary, Spending, D3)
# Ajustar modelo sin interacción
modelo_sin_inter <- lm(Salary ~ Spending + D3, data = data_chow)
# Ajustar modelo con interacción
modelo_con_inter <- lm(Salary ~ Spending * D3, data = data_chow)
# Comparar modelos (prueba tipo Chow)
anova(modelo_sin_inter, modelo_con_inter)
## Analysis of Variance Table
##
## Model 1: Salary ~ Spending + D3
## Model 2: Salary ~ Spending * D3
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 48 1191445676
## 2 47 1189680544 1 1765132 0.0697 0.7929
Interpretación:
El p valor > 0.05: Esto significa que no hay evidencia estadística suficiente para rechazar la hipótesis nula de igualdad de pendientes (y interceptos, dado que D3 está en el modelo) entre los grupos definidos por D3.
El modelo con interacción no mejora significativamente el ajuste respecto al modelo sin interacción. Por ende, la prueba tipo Chow no detecta diferencias estructurales en los coeficientes entre los grupos.
# Crear dataframe
data_chow_D2 <- Data %>% select(Salary, Spending, D2)
# Modelo sin interacción
modelo_sin_inter_D2 <- lm(Salary ~ Spending + D2, data = data_chow_D2)
# Modelo con interacción (prueba tipo Chow)
modelo_con_inter_D2 <- lm(Salary ~ Spending * D2, data = data_chow_D2)
# Prueba de Chow (comparación de modelos)
anova(modelo_sin_inter_D2, modelo_con_inter_D2)
## Analysis of Variance Table
##
## Model 1: Salary ~ Spending + D2
## Model 2: Salary ~ Spending * D2
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 48 1201286206
## 2 47 1142643361 1 58642845 2.4121 0.1271
Recuerda:
Modelo_sin_inter_D2: supone que el efecto de Spending es igual en ambos grupos (D2=0 y D2=1), solo cambia el intercepto.
Modelo_con_inter_D2: permite que la pendiente de Spending cambie según el grupo (interacción).
La función anova compara los modelos para ver si la interacción mejora significativamente el ajuste, equivalente a la prueba de Chow.
# Primero, convertir las variables dicotómicas en una variable categórica
Data$region <- factor(
ifelse(Data$D2 == 1, "Noreste_NorteCentro",
ifelse(Data$D3 == 1, "Sur", "Oeste"))
)
# Gráfico
library(ggplot2)
ggplot(Data, aes(x = Spending, y = Salary, color = region)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "Relación entre Gasto y Salario por Región (ANCOVA)",
x = "Spending (Gasto)",
y = "Salary (Salario)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
rm(list=ls())
library(readxl)
Data <- read_excel("Table 9_1.xlsx", col_types = c("text",
"numeric", "numeric", "numeric", "numeric"))
View(Data)
# Crear dummy de quiebre
Data$Segmento <- ifelse(Data$Spending > 10000, 1, 0)
# Regresión segmentada
modelo_segmentos <- lm(Salary ~ Spending + Segmento + Spending:Segmento, data = Data)
summary(modelo_segmentos)
##
## Call:
## lm(formula = Salary ~ Spending + Segmento + Spending:Segmento,
## data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11128.9 -2954.9 337.6 2774.8 17186.6
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 26797.6768 6295.5656 4.257 9.84e-05 ***
## Spending 2.3163 0.7600 3.048 0.00378 **
## Segmento 4343.8749 12482.8969 0.348 0.72940
## Spending:Segmento -0.4037 1.1733 -0.344 0.73233
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5075 on 47 degrees of freedom
## Multiple R-squared: 0.4623, Adjusted R-squared: 0.428
## F-statistic: 13.47 on 3 and 47 DF, p-value: 1.797e-06
Esto implica definir un punto de quiebre (por ejemplo, para gasto mayor o menor a 10,000) y crear dummies de corte.