Capítol 3 Teoria Setmana 3
3.1 Repas dia anterior
3.1.0.1 PAISOS.SAV
Alerta! Correlació no indica sempre causalitat. Poden existir altres factors ocults amb un efecte sobre ambdós factors.
library(foreign)
data <- read.spss( "http://84.89.132.1/~satorra/dades/PAISOS.SAV", use.value.labels = TRUE, to.data.frame = TRUE )
data <- data %>% select(PAIS, ESPVIDA, CALORIES, PIB, HABMETG , ALFAB)
data <- na.omit(data)
rownames(data)<-NULL # reiniciem la numeracio de les files3.1.1 Regressió simple
data <- data %>% mutate(
LPIB = log(PIB)
,Lhabmetges = log(HABMETG)
)
reg1 <- lm(ESPVIDA ~ CALORIES, data=data)
reg2 <- lm(ESPVIDA ~ CALORIES + ALFAB, data=data )
reg3 <- lm(ESPVIDA ~ CALORIES + LPIB + Lhabmetges +ALFAB, data=data)
stargazer(reg1, reg2, reg3, type='text')##
## ==============================================================================================
## Dependent variable:
## --------------------------------------------------------------------------
## ESPVIDA
## (1) (2) (3)
## ----------------------------------------------------------------------------------------------
## CALORIES 0.014*** 0.007*** 0.001
## (0.001) (0.001) (0.001)
##
## LPIB 1.821***
## (0.452)
##
## Lhabmetges -2.388***
## (0.523)
##
## ALFAB 0.278*** 0.165***
## (0.025) (0.026)
##
## Constant 27.061*** 25.403*** 55.475***
## (3.135) (2.183) (7.637)
##
## ----------------------------------------------------------------------------------------------
## Observations 120 120 120
## R2 0.559 0.789 0.857
## Adjusted R2 0.555 0.785 0.852
## Residual Std. Error 7.107 (df = 118) 4.938 (df = 117) 4.098 (df = 115)
## F Statistic 149.611*** (df = 1; 118) 218.659*** (df = 2; 117) 172.404*** (df = 4; 115)
## ==============================================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
3.1.2 Regressió lineal simple
\[ Y = \beta_0 + \beta_1x + \epsilon \]
- La \(\beta_0\) terme independent
- La \(\beta_1\) coeficient de regressió
- La esperança, \(E(Y)=\beta_0+\beta_1E(x)\)
- El coeficient, \(\beta_1\) és un increment en el valor esperat de \(Y\) d’un augmenta unitari en la variable X
- El \(\epsilon\) és un terme de pertorbació, variable estadística \(\epsilon∼N(0,\sigma^2)\), valor esperat zero i variància constant. Noteu que la variància de \(\epsilon\) representa la intensitat de variació de Y al voltant de la recta de regressió \(Y=\beta_0+\beta_1x\).
Ajust de la regressió:
\[ Y = b_0 + b_1x + \epsilon \]
\(b_0=27.061\), \(b_1=0.014\), \(b_0\) i \(b_1\) són estimacions de \(\beta_0\) i \(\beta_1\) respectivament.
Totes les estimacions estan subjectes a un error tipus (standard error). En el nostre exemple: l’error tipus de l’estimació ´de \(beta_1=0.014\) és \(0.001\).
Coeficient de determinació múltiple, \(R^2=0.559\) és a dir, \(55.9%\) de la variació de \(Y\) és deguda a la variable X.
3.1.3 Regressió lineal múltiple
\[ Y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \epsilon \]
- El \(\beta_0\) terme independent
- La \(\beta_1\), \(\beta_2\) coeficients de regressió parcial
- La Esperança: \(E(Y)=\beta_0+\beta_1E(x_1)+\beta_2E(x_2)\)
- \(\beta_2\) és un increment en el valor esperat de \(Y\) d’un augment unitari en la variable \(X_2\) quan \(X_1\) es manté constant. Idem per \(\beta_1\) (versus \(X_2\))
- \(\epsilon\) terme de perturbació, variable estadística \(\epsilon∼N(0,\sigma^2)\), valor esperat zero i variància constant. Noteu que la variància de \(\epsilon\) representa la intensitat de variació de Y al voltant de la recta de regressió \(Y=\beta_0+\beta_1x_1+\beta_2x_2\).
Regressió estimada:
\[ Y = b_0 + b_1x_1 + b_2x_2 \]
Els coeficients: \(b_0=25.403\); \(b_1=0.007\); \(b_2=0.278\)
El \(R^2=0.044\) és un \(4.4%\) de variació de \(Y\) ve explicada per la variació conjunta de \(X_1\) i \(X_2\).
3.2 Interpretació del model
3.2.1 Gráficament
3.2.1.1 Residus versus valors ajustats
plot(reg3,1)
- verifiquem la homoscedasticitat
3.2.1.2 Análisis normalitat
Q-Q plot.
plot(reg3,2)
Densitat residus.
plot(density(residuals(reg3)))
3.2.1.3 Outlyers
Distancia de Cook.
plot(reg3,4)
data$PAIS[c(4,35,89)]## [1] "Sierra Leona " "Sri Lanka " "Gabon "
Residus estandarditzats vs leverage
plot(reg3,5)
3.2.2 Gràfics de regressio parcial
library(car)## Loading required package: carData
## Warning: package 'carData' was built under R version 4.0.3
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
## The following object is masked from 'package:purrr':
##
## some
avPlots(reg3)
Per obtenir només un gràfic.
avPlots(reg3, ~ CALORIES)
3.3 Variance Inflation Factor (VIF)
Per identificar multicolinealitat entre les variables explicatives es pot usar el VIF o variance inflation factors (VIF). Com més gran es el calor, més alta la multicolinealitat. El VIF de una variable s’obté de la regressió d’aquesta contra la resta de variables del model: Es calcula el VIF per cada variable explicativa i aquelles amb valor més alt s’eliminen. LA frontera és arbitraria, tot i que s’acostuma a considerar valors superiors a 5 com a molt alts…
library(car)
vif(reg3)## CALORIES LPIB Lhabmetges ALFAB
## 3.250846 3.674479 4.517252 2.524628
3.4 Dades del Bank
Dades de salaris en un banc.
Imagina que hi ha un plet en aquesta empresa sobre discriminació per raó de gènere. De fet, el salari actual dels homes és molt superior al de les dones.
knitr::opts_chunk$set(echo = TRUE)
library(foreign) ;
d <- read.spss("https://griu.github.io/meacp_2021/www/data/bank2.sav", to.data.frame=TRUE)## re-encoding from CP1252
## Warning in read.spss("https://griu.github.io/meacp_2021/www/data/bank2.sav", : Undeclared level(s) 15750, 15900, 16200, 16350,
## 16500, 16650, 16800, 16950, 17100, 17250, 17400, 17700, 18150, 18450, 18750, 19200, 19650, 19800, 19950, 20100, 20400, 20550, 20700,
## 20850, 21000, 21150, 21300, 21450, 21600, 21750, 21900, 22050, 22200, 22350, 22500, 22650, 22800, 22950, 23100, 23250, 23400, 23550,
## 23700, 23850, 24000, 24150, 24300, 24450, 24600, 24750, 24900, 25050, 25200, 25350, 25500, 25650, 25800, 25950, 26100, 26250, 26400,
## 26550, 26700, 26850, 27000, 27150, 27300, 27450, 27600, 27750, 27900, 28050, 28200, 28350, 28500, 28650, 28800, 28950, 29100, 29160,
## 29250, 29340, 29400, 29550, 29700, 29850, 30000, 30150, 30270, 30300, 30450, 30600, 30750, 30900, 31050, 31200, 31350, 31500, 31650,
## 31950, 32100, 32400, 32550, 32850, 33000, 33150, 33300, 33450, 33540, 33750, 33900, 34410, 34500, 34620, 34800, 34950, 35100, 35250,
## 35550, 35700, 36000, 36150, 36600, 37050, 37500, 37650, 37800, 38400, 38550, 38700, 38850, 39150, 39300, 39600, 39900, 40050, 40200,
## 40350, 40800, 41100, 41550, 42000, 42300, 43000, 43410, 43500, 43650, 43950, 44875, 45000, 45150, 45250, 45625, 46000, 46875, 47250,
## 47550, 48000, 48750, 49000, 50000, 50550, 51000, 51250, 51450, 52125, 52650, 53125, 54000, 54375, 54875, 54900, 55000, 55500, 55750,
## 56500, 56550, 56750, 57000, 58125, 58750, 59375, 59400, 60000, 60375, 60625, 61250, 61875, 62500, 65000, 66000, 66250, 66750, 66875,
## 67500, 68125, 68750, 69250, 70000, 70875, 72500, 73500, 73750, 75000, 78125, 78250, 78500, 80000, 81250, 82500, 83750, 86250, 90625,
## 91250, 92000, 97000, 1e+05, 103500, 103750, 110625, 135000 added in variable: salario
## Warning in read.spss("https://griu.github.io/meacp_2021/www/data/bank2.sav", : Undeclared level(s) 9000, 9750, 10050, 10200, 10500,
## 10650, 10950, 11100, 11225, 11250, 11400, 11550, 12000, 12150, 12300, 12450, 12600, 12750, 12900, 13050, 13200, 13350, 13500, 13800,
## 13950, 14100, 14250, 14400, 14550, 14700, 15000, 15300, 15600, 15750, 16050, 16500, 16800, 17100, 17250, 17490, 18000, 18750, 19500,
## 19980, 20250, 20400, 20550, 21000, 21240, 21480, 21750, 21990, 22500, 23250, 23730, 24990, 25000, 25500, 26250, 27000, 27480, 27510,
## 27750, 28740, 29490, 30000, 30750, 31250, 31500, 31980, 32010, 32490, 33000, 33750, 34980, 35010, 35040, 36240, 36750, 37500, 39990,
## 42480, 42510, 43500, 44100, 45000, 47490, 52500, 60000, 79980 added in variable: salini
## Warning in read.spss("https://griu.github.io/meacp_2021/www/data/bank2.sav", : Undeclared level(s) 63, 64, 65, 66, 67, 68, 69, 70,
## 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 added in variable:
## tiempemp
## Warning in read.spss("https://griu.github.io/meacp_2021/www/data/bank2.sav", : Undeclared level(s) 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
## 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47,
## 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 74, 75, 76, 78, 79, 80, 81, 82, 83, 84,
## 85, 86, 87, 90, 91, 93, 94, 96, 97, 99, 101, 102, 103, 105, 106, 107, 108, 110, 113, 114, 115, 116, 117, 120, 121, 122, 123, 124,
## 125, 126, 127, 128, 129, 130, 132, 133, 134, 137, 138, 139, 143, 144, 149, 150, 151, 154, 155, 156, 159, 163, 165, 168, 169, 171,
## 173, 174, 175, 176, 180, 181, 182, 184, 190, 191, 192, 193, 194, 196, 198, 199, 205, 207, 208, 209, 210, 214, 216, 221, 228, 229,
## 231, 240, 241, 244, 246, 252, 258, 261, 264, 265, 271, 272, 275, 281, 284, 285, 288, 302, 305, 307, 308, 314, 315, 317, 318, 319,
## 320, 324, 338, 344, 348, 358, 359, 367, 371, 372, 375, 380, 381, 385, 387, 390, 408, 412, 429, 432, 438, 444, 451, 460, 476 added in
## variable: expprev
d1 <- read.spss("https://griu.github.io/meacp_2021/www/data/bank2.sav", to.data.frame=TRUE,use.value.labels = FALSE)## re-encoding from CP1252
d$educ <- d1$educ
d$salario <- d1$salario
d$salini <- d1$salini
d$tiempemp <- d1$tiempemp
d$expprev <- d1$expprev
d$edad <- d1$edadResidus.
hist(d$salini)
boxplot(salario ~ sexo, data=d)
t-test.
library(stargazer)
mod1 <- lm(salario ~ sexo, data=d)
mod2 <- lm(log(salario) ~ sexo, data=d)
stargazer(mod1,mod2, type='html')| Dependent variable: | ||
| salario | log(salario) | |
| (1) | (2) | |
| sexoMujer | -15,409.860*** | -0.412*** |
| (1,407.906) | (0.031) | |
| Constant | 41,441.780*** | 10.545*** |
| (950.411) | (0.021) | |
| Observations | 474 | 474 |
| R2 | 0.202 | 0.267 |
| Adjusted R2 | 0.201 | 0.266 |
| Residual Std. Error (df = 472) | 15,265.860 | 0.340 |
| F Statistic (df = 1; 472) | 119.798*** | 172.322*** |
| Note: | p<0.1; p<0.05; p<0.01 | |
Afegim covariables.
plot(salario ~ edad, data=d)
abline(lm(salario ~ edad, data=d), col="red")
library(stargazer)
mod1 <- lm(salario ~ sexo + edad, data=d)
mod2 <- lm(log(salario) ~ sexo + edad, data=d)
stargazer(mod1,mod2, type='html')| Dependent variable: | ||
| salario | log(salario) | |
| (1) | (2) | |
| sexoMujer | -15,216.770*** | -0.405*** |
| (1,400.366) | (0.031) | |
| edad | -178.228*** | -0.006*** |
| (59.257) | (0.001) | |
| Constant | 45,051.720*** | 10.673*** |
| (1,521.035) | (0.033) | |
| Observations | 473 | 473 |
| R2 | 0.218 | 0.303 |
| Adjusted R2 | 0.214 | 0.300 |
| Residual Std. Error (df = 470) | 15,150.260 | 0.333 |
| F Statistic (df = 2; 470) | 65.431*** | 102.202*** |
| Note: | p<0.1; p<0.05; p<0.01 | |