Considere o seguinte modelo de regressão linear múltipla:
\(Yi = β0 + β1Xi + β2X2 + Ui\)
em que ui
tem média zero e variância \(σ^2\).
(V ou F) Erros de medida da variável
dependente reduzem as variâncias dos estimadores de MQO de βhat1 e
βhat2.
Falso, erros de medida da variável dependente são uma fonte adicional
de variabilidade nos dados o que ode acarretar em um viés para os
estimadores e (ou) uma redução na eficiência dos Estimadores
2) Suponha que você queira estimar um
modelo que relaciona o número de crimes ocorridos no campus às matrícula
de alunos em em um grupo de faculdades. A amostra não é uma amostra
aleatória de faculdades, pois muitas delas não registraram crimes em
2019 no campus. Você acha que a falha das faculdades em informar os
crimes pode ser vista como uma seleção de amostra exógena?
Explique.
Faculdades com altos índices de criminalidade têm um incentivo para
não relatar estatísticas de crimes, já que os potenciais alunos podem
considerar o crime no campus como um fator importante ao decidir onde
cursar a faculdade, tornando assim a seleção da amostra, neste caso,
indiscutivelmente endógena. Se isso for verdade, a probabilidade de ser
incluído na amostra está inversamente relacionada a u na equação do
crime. Para uma determinada dimensão da faculdade, um valor maior de u
implica em mais crimes e, consequentemente, uma menor probabilidade de
que a faculdade relate seus números de crimes
A base de dados “PNAD2021_modificada” em .Rda contém xxxx observações
das seguintes variáveis da PNAD Contínua do 1o trimestre de 2021:
• SIT_domicilio: Situação local do domicílio (Urbano ou Rural)
• Rendimento: Rendimento no último mês em R$
• Educ: Anos de
Estudo em anos
• Sexo: Sexo (Masculino ou Feminino)
• Cor:
Cor/raça (Branca, Preta, Amarela, Parda, Indígena ou Não declarado)
• Idade: Idade em anos
• UF: Estado brasileiro
Os dados faltantes estão indicados por 99999.
• Etapa 1: Importe para o RStudio a base de
dados com load(). Verifique com comando anyNA() a existência de NA
(dados faltantes), analise a classe das variáveis str()e as estatísticas
descritivas summary().
#encoding
options(encoding = "UTF-8") #codificação dos caracteres
options(scipen = 999) #desliga a notação científica
rm(list = ls()) #limpa o environment
#packages
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(zoo)
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(lmtest)
library(sandwich)
library(stargazer)
##
## Please cite as:
##
## Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
library(hrbrthemes)
library(lmtest)
library(zoo)
library(sandwich)
setwd("C:/Users/rafael.souza/Documents/R_Projects/Lista 2")
load("PNAD2021_modificada.Rda")
pnad <- PNAD2021_modificada
anyNA(pnad)
## [1] FALSE
pnad <- na.omit(pnad)
• Etapa 2: Retire os valores faltantes
indicados por 99999. Iremos estimar o modelo apenas para o Estado de São
Paulo (indicado pelo no 35 na coluna UF da base). Filtre os dados
diferentes de 99999 e paulistas com o comando filter do pacote dplyr.
str(pnad)
## 'data.frame': 302263 obs. of 8 variables:
## $ SIT_domicilio: Factor w/ 2 levels "Rural","Urbano": 2 2 2 2 2 2 2 2 2 2 ...
## $ NUM_moradores: num 6 6 6 6 6 2 2 4 4 4 ...
## $ Renda : num 1045 1045 99999 99999 99999 ...
## $ Educ : num 5 10 10 12 12 0 5 12 7 1 ...
## $ Sexo : Factor w/ 2 levels "Masculino","Feminino": 2 2 2 1 2 2 1 2 1 1 ...
## $ Cor : Factor w/ 6 levels "Branca","Amarela",..: 5 5 5 5 5 5 5 1 1 1 ...
## $ Idade : num 39 20 16 73 59 37 31 44 20 8 ...
## $ UF : chr "11" "11" "11" "11" ...
## - attr(*, "na.action")= 'omit' Named int [1:17635] 6 44 83 88 99 100 127 142 154 200 ...
## ..- attr(*, "names")= chr [1:17635] "6" "44" "83" "88" ...
summary(pnad)
## SIT_domicilio NUM_moradores Renda Educ
## Rural : 76219 Min. : 1.00 Min. : 10 Min. : 0.000
## Urbano:226044 1st Qu.: 2.00 1st Qu.: 1800 1st Qu.: 5.000
## Median : 3.00 Median : 99999 Median : 9.000
## Mean : 3.56 Mean : 61372 Mean : 8.563
## 3rd Qu.: 4.00 3rd Qu.: 99999 3rd Qu.:12.000
## Max. :21.00 Max. :300000 Max. :16.000
## Sexo Cor Idade UF
## Masculino:145195 Branca :120017 Min. : 5.00 Length:302263
## Feminino :157068 Amarela : 1449 1st Qu.: 21.00 Class :character
## Indígena : 1239 Median : 38.00 Mode :character
## Não declarado: 59 Mean : 39.06
## Parda :154621 3rd Qu.: 55.00
## Preta : 24878 Max. :110.00
pnad <- pnad %>%
filter(Cor != "Não declarado") %>%
mutate(Cor = ifelse(Cor %in% c("Indígena","Parda","Preta"),"Pretos ou Pardos",Cor)) %>%
mutate(Cor = ifelse(Cor %in% "Amarela","Branca",Cor))
pnad <- pnad %>%
mutate(Cor = ifelse(Cor %in% c("1", "2"), "Branca", Cor))
unique(pnad$Cor)
## [1] "Pretos ou Pardos" "Branca"
pnad <- pnad %>%
filter(Renda != 99999, UF == "35")
unique(pnad$UF)
## [1] "35"
• Etapa 3: Com o comando lm estime a
seguinte regressão linear múltipla:
\(ln(Renda) = β0 + β1Educ + β2SexoFeminino
+ β3CorAmarela + β4CorIndígena + β5CorNãodeclarado + β6Parda+ β7CorPreta
+ β8Idade + β9Idade2 + β10DomicilioUrbano + β11Educ ∗ SexoFeminino +
u\)
modelo <- lm(log(Renda) ~ Educ + Sexo + Cor + Idade + I(Idade^2) + SIT_domicilio + Educ:Sexo, data = pnad)
summary(modelo)
##
## Call:
## lm(formula = log(Renda) ~ Educ + Sexo + Cor + Idade + I(Idade^2) +
## SIT_domicilio + Educ:Sexo, data = pnad)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.7182 -0.3612 -0.0109 0.3538 4.2238
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.03309074 0.06453916 77.985 < 0.0000000000000002 ***
## Educ 0.09491124 0.00243526 38.974 < 0.0000000000000002 ***
## SexoFeminino -0.62733157 0.04514265 -13.897 < 0.0000000000000002 ***
## CorPretos ou Pardos -0.13523622 0.01409175 -9.597 < 0.0000000000000002 ***
## Idade 0.06120328 0.00276017 22.174 < 0.0000000000000002 ***
## I(Idade^2) -0.00054214 0.00003157 -17.175 < 0.0000000000000002 ***
## SIT_domicilioUrbano 0.11003362 0.01871448 5.880 0.000000004236 ***
## Educ:SexoFeminino 0.02263917 0.00361888 6.256 0.000000000411 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6822 on 10635 degrees of freedom
## Multiple R-squared: 0.3146, Adjusted R-squared: 0.3141
## F-statistic: 697.4 on 7 and 10635 DF, p-value: < 0.00000000000000022
a) Em nosso modelo, utilizamos a variável
Idade como proxy da Experiência no mercado de trabalho.
Resposta: Verdadeiro
b) No teste RESET, não rejeitamos a hipótese nula de que nosso modelo foi especificado corretamente em um nível de significância de α = 5%.
reset_test <- resettest(modelo, power = 2)
reset_test
##
## RESET test
##
## data: modelo
## RESET = 604.05, df1 = 1, df2 = 10634, p-value < 0.00000000000000022
Resposta: Falso, p-value <
0.00000000000000022. Rejeita-se a hipotese Nula. Com isso podemos dizer
que há evidências de falta de especificação do modelo, o que sugere que
a forma funcional do modelo pode ser inadequada
c) Ao testar o modelo estimado acima contra um modelo em que fazemos o logaritmo natural da variável Idade, ou seja, ln(Idade) no lugar de Idade e Idade2. Rejeitamos as hipóteses nulas, em qualquer nível de significância usual.
modelo2 <- lm(log(Renda) ~ Educ + Sexo + Cor + log(Idade) + SIT_domicilio + Educ:Sexo, data = pnad)
summary(modelo2)
##
## Call:
## lm(formula = log(Renda) ~ Educ + Sexo + Cor + log(Idade) + SIT_domicilio +
## Educ:Sexo, data = pnad)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.7031 -0.3624 -0.0135 0.3546 4.1953
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.209765 0.084539 49.797 < 0.0000000000000002 ***
## Educ 0.097454 0.002434 40.033 < 0.0000000000000002 ***
## SexoFeminino -0.615752 0.045379 -13.569 < 0.0000000000000002 ***
## CorPretos ou Pardos -0.123623 0.014129 -8.749 < 0.0000000000000002 ***
## log(Idade) 0.623953 0.019847 31.439 < 0.0000000000000002 ***
## SIT_domicilioUrbano 0.113686 0.018813 6.043 0.000000001564 ***
## Educ:SexoFeminino 0.022447 0.003639 6.169 0.000000000711 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6859 on 10636 degrees of freedom
## Multiple R-squared: 0.3071, Adjusted R-squared: 0.3067
## F-statistic: 785.6 on 6 and 10636 DF, p-value: < 0.00000000000000022
reset_test <- resettest(modelo2, power = 2) # power = 2 para testar se há falta de forma funcional quadrática
reset_test
##
## RESET test
##
## data: modelo2
## RESET = 521.46, df1 = 1, df2 = 10635, p-value < 0.00000000000000022
# Executar o teste de Encompassing
encomptest(modelo,modelo2)
Resposta: Verdadeiro. Com isso concluímos
que o modelo expandido que inclui todas as variáveis do Modelo 1 e do
Modelo 2, além de log(Idade), é preferível aos modelos individuais. Isso
implica que o modelo expandido tem um melhor ajuste aos dados do que os
modelos individuais.
d) Os valores extremos dos resíduos padronizados são -5,455 e 6,217.
## Resíduos padrões para todas observações
studres = rstudent(modelo)
## Exibir valor extremos
min(studres)
## [1] -5.458409
max(studres)
## [1] 6.204099
Resposta: Verdadeiro
e) Pelo histograma de densidade dos resíduos padronizados, é possível observar barras isoladas nas extrem- idades. Portanto, há outliers em nossa estimação.
hist(studres, freq = FALSE, breaks = 100)
lines(density(studres), lwd=2)
Resposta: falso.