Licença

This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

License: CC BY-SA 4.0

License: CC BY-SA 4.0

Citação

Sugestão de citação: FIGUEIREDO, Adriano Marcos Rodrigues. Econometria: exemplo multicolinearidade - horas de trabalho da mulher, Gujarati (2015, p.84-92 english second edition). Campo Grande-MS,Brasil: RStudio/Rpubs, 2019. Disponível em http://rpubs.com/amrofi/Gujarati_women_hours.

1 Introdução

Os primeiros passos são criar ou abrir um diretório de trabalho. Se optar por criar um novo projeto, haverá a possibilidade de criar em uma pasta vazia. Em seguida, sugere-se que coloque os dados nesta pasta, se possível em um arquivo MS Excel e chame a planilha de ‘dados’.Neste caso, a planilha de dados será colocada dentro do código gerado pela função dput(). Os dados básicos deste livro de Gujarati (2015) estão em https://www.macmillanihe.com/companion/gujarati-econometrics-by-example-2e/learning-resources/Data-sets/. Sugere-se copiar e colar o arquivo Table4_4.xls para o diretório do projeto a fim de melhor realizar o exercício.

Usarei a tabela 4.4, que refere-se a um dataset de variáveis socioeconômicas de mulheres casadas que estão no mercado de trabalho. São dados cross-section de 753 mulheres casadas para o ano de 1975, e existem 325 mulheres que não trabalham e portanto apresentam zero horas de trabalho. Os dados básicos foram parte do estudo de Mroz (1987).

2 Dados e regressão inicial

Aqui chamaremos os dados do arquivo .xls.

library(readxl)
Table4_4 <- read_excel("Table4_4.xls")
# View(Table4_4)
attach(Table4_4)

O arquivo básico contém 25 variáveis e 753 observações, a saber:

    age, educ, exper, faminc, fathereduc, federaltax, hage,
    heduc, hfathereduc, hhours, hmothereduc, hours, hsiblings,
    hwage, kids618, kidsl6, largecity, lfp, mothereduc, mtr,
    siblings, taxableinc, unemployment, wage, wage76

Utilizaremos apenas as variáveis que foram utilizadas em Gujarati (2015, p.84) a fim de reproduzir suas estimativas. São elas:

hours - horas trabalhadas em 1975 (variável dependente),
kidsl6 - número de crianças menores de 6 anos de idade,
kids618 - número de crianças entre 6 e 18 anos de idade,
age - idade da mulher em anos, 
educ - anos de escola,
wage - salário estimado dos rendimentos,
hhours - horas de trabalho do marido,
hage - idade do marido,
heduc - anos de escola do marido,
hwage - salário por hora do marido em 1975,
faminc - renda familiar em 1975,
mtr - taxa marginal de imposto federal enfrentada pela mulher,
mothereduc - anos de escola da mãe,
fathereduc - anos de escola do pai,
unemployment - taxa de desemprego no país de residência,
exper - experiência atual no mercado de trabalho

Vou criar um subset dos dados para retirar as mulheres que não estavam no mercado de trabalho, ou seja, aquelas com zero horas de trabalho.

dados <- Table4_4[which(hours > 0), ]
detach(Table4_4)
attach(dados)

3 Modelo

O modelo inicial é um modelo de regressão linear múltipla. Utilizarei a função nativa lm() para estimação. Usarei as funções AIC e BIC e incorporarei à saída da regressão mod1. Usarei o pacote stargazer para exibir os resultados.

mod1 <- lm(hours ~ age + educ + exper + faminc + fathereduc + hage + heduc + 
    hhours + hwage + kids618 + kidsl6 + wage + mothereduc + mtr + unemployment, 
    data = dados)
mod1$AIC <- AIC(mod1)
mod1$BIC <- BIC(mod1)
library(stargazer)
stargazer(mod1, title = "Título: Resultado da Regressão", align = TRUE, type = "text", 
    style = "all", keep.stat = c("aic", "bic", "rsq", "adj.rsq", "n"))

Título: Resultado da Regressão
===============================================
                        Dependent variable:    
                    ---------------------------
                               hours           
-----------------------------------------------
age                           -14.307          
                              (9.661)          
                            t = -1.481         
                             p = 0.140         
educ                          -18.398          
                             (19.342)          
                            t = -0.951         
                             p = 0.343         
exper                        22.881***         
                              (4.777)          
                             t = 4.789         
                            p = 0.00001        
faminc                        0.014**          
                              (0.006)          
                             t = 2.299         
                             p = 0.023         
fathereduc                    -7.471           
                             (11.192)          
                            t = -0.668         
                             p = 0.505         
hage                          -5.586           
                              (8.938)          
                            t = -0.625         
                             p = 0.533         
heduc                         -6.769           
                             (13.988)          
                            t = -0.484         
                             p = 0.629         
hhours                       -0.474***         
                              (0.073)          
                            t = -6.463         
                             p = 0.000         
hwage                       -141.782***        
                             (16.618)          
                            t = -8.532         
                             p = 0.000         
kids618                       -24.509          
                             (28.062)          
                            t = -0.873         
                             p = 0.383         
kidsl6                      -191.565**         
                             (87.832)          
                            t = -2.181         
                             p = 0.030         
wage                        -48.150***         
                             (10.412)          
                            t = -4.624         
                            p = 0.00001        
mothereduc                    -1.838           
                             (11.900)          
                            t = -0.154         
                             p = 0.878         
mtr                        -6,272.598***       
                            (1,085.438)        
                            t = -5.779         
                             p = 0.000         
unemployment                  -16.115          
                             (10.637)          
                            t = -1.515         
                             p = 0.131         
Constant                   8,595.360***        
                            (1,027.190)        
                             t = 8.368         
                             p = 0.000         
-----------------------------------------------
Observations                    428            
R2                             0.339           
Adjusted R2                    0.315           
Akaike Inf. Crit.            6,766.572         
Bayesian Inf. Crit.          6,835.577         
===============================================
Note:               *p<0.1; **p<0.05; ***p<0.01

3.1 Multicolinearidade

A identificação da multicolinearidade, conforme Gujarati (2015), pode ser feita de várias formas. A análise de correlação permitirá ter uma ideia inicial de possível multicolinearidade. Neste caso, está pegando todas as variáveis do dataset para as 428 observações válidas. As correlações em módulo com valores acima de 0.8 podem indicar presença de relação linear entre as variáveis. Neste caso, preocuparemos com as variáveis que colocamos no mod1 e entre as variáveis explicativas do modelo, elas não estão no quadrante de correlação (duas a duas) acima de 0,5. Isto não exclui as correlações “múltiplas”, ou seja, a possível relação entre mais de duas variáveis, ou seja, a multicolinearidade.

# install.packages('corrplot')
library(corrplot)
corel <- cor(dados)
corrplot(corel, method = "number")

corel
                taxableinc    federaltax    hsiblings  hfathereduc
taxableinc    1.0000000000  9.673636e-01 -0.174378871  0.209166769
federaltax    0.9673636449  1.000000e+00 -0.145222647  0.173021340
hsiblings    -0.1743788713 -1.452226e-01  1.000000000 -0.294841001
hfathereduc   0.2091667689  1.730213e-01 -0.294841001  1.000000000
              hmothereduc    siblings lfp       hours       kidsl6
taxableinc    0.232166431 -0.21367272  NA  0.10117308  0.033349609
federaltax    0.209559368 -0.17471305  NA  0.10202430  0.025108512
hsiblings    -0.288789830  0.21970269  NA -0.01369382 -0.054010719
hfathereduc   0.516627457 -0.21263100  NA  0.14133085 -0.017959488
                 kids618           age         educ        wage
taxableinc   -0.02248754 -1.689626e-02 -0.064448954 -0.03001339
federaltax   -0.03333923 -6.226309e-05 -0.077587664 -0.04517348
hsiblings    -0.01052657  4.927135e-02 -0.013846830  0.01842034
hfathereduc  -0.01199897 -2.632866e-02 -0.007296299 -0.01847172
                   wage76      hhours         hage       heduc       hwage
taxableinc    0.078242283 -0.06310674 -0.008581805 -0.03738014 -0.03900972
federaltax    0.035591554 -0.05605114 -0.002378438 -0.03747094 -0.04075278
hsiblings    -0.007439234 -0.04518268  0.050455816 -0.05603035 -0.03902662
hfathereduc   0.051499653  0.02682878  0.018727652 -0.01464326  0.07093214
                   faminc          mtr   mothereduc  fathereduc
taxableinc   -0.029239230  0.017763874 -0.007600266 -0.01327076
federaltax   -0.015703270  0.009003579 -0.005427587 -0.03777215
hsiblings    -0.014993133  0.041926904 -0.052296563 -0.10947876
hfathereduc   0.039086993 -0.099937548 -0.021161401  0.08275203
             unemployment     largecity       exper
taxableinc   -0.012261521 -0.0002866718  0.03765013
federaltax   -0.043243465 -0.0310761204  0.03886460
hsiblings    -0.007702540  0.0104805584  0.09592813
hfathereduc  -0.030700256  0.0898946518 -0.02437401
 [ reached getOption("max.print") -- omitted 21 rows ]

Outra opção é utilizar o fator de inflação da variância (Variance inflation factor - VIF). O resultado da função vif do pacote car será:

library(car)
# vif
reg1.vif <- vif(mod1)
tabela <- cbind(VIF = reg1.vif, TOL = I(1/reg1.vif))
knitr::kable(tabela)
VIF TOL
age 5.756163 0.1737268
educ 2.021618 0.4946533
exper 1.532452 0.6525489
faminc 5.144349 0.1943881
fathereduc 1.608908 0.6215396
hage 5.224349 0.1914114
heduc 1.864803 0.5362497
hhours 1.887424 0.5298226
hwage 3.643848 0.2744351
kids618 1.410795 0.7088202
kidsl6 1.225962 0.8156861
wage 1.229041 0.8136425
mothereduc 1.603344 0.6236963
mtr 7.215127 0.1385977
unemployment 1.077137 0.9283871
# VIF médio
c(VIFmedio = sum(reg1.vif)/length(reg1.vif))
VIFmedio 
2.829688 

Olhando os resultados, existe alguma relação colinear imperfeita entre as variáveis educacionais (fathereduc e mothereduc) e o resultado da educação da filha (educ). Outra questão pode ser levantada com respeito à inclusão das variáveis de crianças acima de 6 anos de idade (kids618), se ela deve estar no modelo. Ainda, as idades da mulher (age) e do marido (hage) estão correlacionadas. Assim, a alternativa adotada é a exclusão de algumas variáveis do modelo (fathereduc,hage,heduc,kids618,mothereduc).

mod2 <- lm(hours ~ age + educ + exper + faminc + hhours + hwage + kidsl6 + wage + 
    mtr + unemployment, data = dados)
mod2$AIC <- AIC(mod2)
mod2$BIC <- BIC(mod2)
library(stargazer)
stargazer(mod1, mod2, title = "Título: Resultado da Regressão", align = TRUE, 
    type = "text", style = "all", keep.stat = c("aic", "bic", "rsq", "adj.rsq", 
        "n"))

Título: Resultado da Regressão
================================================
                        Dependent variable:     
                    ----------------------------
                               hours            
                         (1)            (2)     
------------------------------------------------
age                    -14.307      -17.727***  
                       (9.661)        (4.903)   
                      t = -1.481    t = -3.616  
                      p = 0.140     p = 0.0004  
educ                   -18.398       -27.034*   
                       (19.342)      (15.795)   
                      t = -0.951    t = -1.712  
                      p = 0.343      p = 0.088  
exper                 22.881***      24.203***  
                       (4.777)        (4.653)   
                      t = 4.789      t = 5.201  
                     p = 0.00001    p = 0.00000 
faminc                 0.014**        0.014**   
                       (0.006)        (0.006)   
                      t = 2.299      t = 2.349  
                      p = 0.023      p = 0.020  
fathereduc              -7.471                  
                       (11.192)                 
                      t = -0.668                
                      p = 0.505                 
hage                    -5.586                  
                       (8.938)                  
                      t = -0.625                
                      p = 0.533                 
heduc                   -6.769                  
                       (13.988)                 
                      t = -0.484                
                      p = 0.629                 
hhours                -0.474***      -0.486***  
                       (0.073)        (0.070)   
                      t = -6.463    t = -6.904  
                      p = 0.000      p = 0.000  
hwage                -141.782***    -144.973*** 
                       (16.618)      (15.884)   
                      t = -8.532    t = -9.127  
                      p = 0.000      p = 0.000  
kids618                -24.509                  
                       (28.062)                 
                      t = -0.873                
                      p = 0.383                 
kidsl6                -191.565**    -180.441**  
                       (87.832)      (86.370)   
                      t = -2.181    t = -2.089  
                      p = 0.030      p = 0.038  
wage                  -48.150***    -47.433***  
                       (10.412)      (10.309)   
                      t = -4.624    t = -4.601  
                     p = 0.00001    p = 0.00001 
mothereduc              -1.838                  
                       (11.900)                 
                      t = -0.154                
                      p = 0.878                 
mtr                 -6,272.598***  -6,351.293***
                     (1,085.438)    (1,029.837) 
                      t = -5.779    t = -6.167  
                      p = 0.000      p = 0.000  
unemployment           -16.115        -16.504   
                       (10.637)      (10.559)   
                      t = -1.515    t = -1.563  
                      p = 0.131      p = 0.119  
Constant             8,595.360***  8,484.524*** 
                     (1,027.190)     (987.595)  
                      t = 8.368      t = 8.591  
                      p = 0.000      p = 0.000  
------------------------------------------------
Observations             428            428     
R2                      0.339          0.336    
Adjusted R2             0.315          0.320    
Akaike Inf. Crit.     6,766.572      6,758.751  
Bayesian Inf. Crit.   6,835.577      6,807.460  
================================================
Note:                *p<0.1; **p<0.05; ***p<0.01

É possível observar que a alteração tornou o modelo 2 com maior \(R^2\) ajustado (Adjusted R2 = 0.320), e menores valores de Akaike (AIC = 6758) e Bayesian (Schwarz) (BIC = 6807). A variável unemployment continua não significativa, não afetando a variável dependente (hours). É possível extrair novos valores de VIF e TOL para o modelo 2.

library(car)
# vif
reg2.vif <- vif(mod2)
tabela2 <- cbind(VIF = reg2.vif, TOL = I(1/reg2.vif))
knitr::kable(tabela2)
VIF TOL
age 1.493132 0.6697331
educ 1.357462 0.7366687
exper 1.464052 0.6830360
faminc 4.883432 0.2047740
hhours 1.757566 0.5689688
hwage 3.352382 0.2982954
kidsl6 1.193771 0.8376813
wage 1.213341 0.8241708
mtr 6.540321 0.1528977
unemployment 1.068847 0.9355873
# VIF médio
c(VIFmedio = sum(reg2.vif)/length(reg2.vif))
VIFmedio 
2.432431 

Conforme exposto por Gujarati(2015, p.88), ainda existe considerável colinearidade. As variáveis poderiam ser “mineradas” até encontrar o modelo melhor, mas Gujarati (2015) esclarece que tal procedimento de data fishing ou data mining retirando variáveis que “devem” estar no modelo podem tirar a legitimidade do modelo. É melhor deixar a variável não significativa no modelo pois existem razões teóricas ou práticas que indicam que deva estar.

Alternativas aparecem como a de utilizar o método de componentes principais para reduzir as variáveis do modelo (PCA ou Principal components analysis). Esta abordagem reduz o problema de multicolinearidade mas pode dificultar a interpretação desses componentes principais, pois agora não são as variáveis originais do modelo.

4 Componentes principais

A extração desses componentes será feita com a função pca. O resultado inclui 15 componentes principais em que para cada um tem-se a proporção da variância (=eigenvalue) e a variância acumulada de cada componente. Os componentes estão ranqueados do mais importante (PC1) para o menos importante (PC15).

attach(dados)
myvars <- c("hours", "age", "educ", "exper", "faminc", "fathereduc", "hage", 
    "heduc", "hhours", "hwage", "kids618", "kidsl6", "wage", "mothereduc", "mtr", 
    "unemployment")
dados2 <- dados[myvars]
pca1 <- prcomp(dados2[, -1], scale. = T)
summary(pca1)
Importance of components:
                          PC1    PC2     PC3     PC4     PC5     PC6
Standard deviation     1.8828 1.6975 1.20823 1.13864 1.01980 0.94035
Proportion of Variance 0.2363 0.1921 0.09732 0.08643 0.06933 0.05895
Cumulative Proportion  0.2363 0.4284 0.52574 0.61217 0.68150 0.74045
                           PC7     PC8    PC9    PC10    PC11    PC12
Standard deviation     0.90880 0.83573 0.8059 0.76642 0.64426 0.58902
Proportion of Variance 0.05506 0.04656 0.0433 0.03916 0.02767 0.02313
Cumulative Proportion  0.79552 0.84208 0.8854 0.92454 0.95221 0.97534
                          PC13    PC14    PC15
Standard deviation     0.42691 0.32348 0.28811
Proportion of Variance 0.01215 0.00698 0.00553
Cumulative Proportion  0.98749 0.99447 1.00000
summary(prcomp(dados2[, -1], rank. = 6, scale = TRUE))
Importance of first k=6 (out of 15) components:
                          PC1    PC2     PC3     PC4     PC5     PC6
Standard deviation     1.8828 1.6975 1.20823 1.13864 1.01980 0.94035
Proportion of Variance 0.2363 0.1921 0.09732 0.08643 0.06933 0.05895
Cumulative Proportion  0.2363 0.4284 0.52574 0.61217 0.68150 0.74045

O primeiro componente (PC1) corresponde a 23,63% do total com variância (eigenvalue) igual a

1.8828^2
[1] 3.544936

Posso escolher olhar apenas os seis primeiros e obter as loadings:

# apenas 6 PCs mais diretamente:
pz6 <- prcomp(dados2[, -1], rank. = 6, scale = TRUE)
print(pz6)
Standard deviations (1, .., p=15):
 [1] 1.8827689 1.6974732 1.2082309 1.1386403 1.0198046 0.9403523 0.9088027
 [8] 0.8357272 0.8059194 0.7664191 0.6442634 0.5890192 0.4269090 0.3234760
[15] 0.2881053

Rotation (n x k) = (15 x 6):
                      PC1         PC2         PC3         PC4         PC5
age           0.005233424 -0.52814056  0.11356561 -0.02084025  0.08913582
educ          0.382709064  0.07342791  0.27836863  0.06398997 -0.18787625
exper        -0.039057190 -0.37289221  0.26733301 -0.02479082 -0.25519407
faminc        0.424283604 -0.10570460 -0.31395537 -0.17929011  0.02917374
fathereduc    0.265567786  0.14249699  0.45851851  0.08112254  0.28909389
hage         -0.008198598 -0.51293274  0.10592894 -0.02127245  0.14071330
heduc         0.367918499  0.09059056  0.12886632 -0.01503319 -0.06864005
hhours        0.053224021  0.12890988  0.09853668 -0.71831985 -0.04927426
hwage         0.381685000 -0.09301603 -0.37268289  0.23971029  0.14143858
kids618      -0.056781025  0.32001427 -0.30919450 -0.06213606  0.29203852
kidsl6        0.013701393  0.27620487  0.01838755  0.27792466 -0.51459257
wage          0.231705483 -0.05163756 -0.03051288  0.05383397 -0.52639052
mothereduc    0.223754821  0.21445607  0.44988918  0.03075007  0.29879636
mtr          -0.450533339  0.12731424  0.22836573  0.19744541 -0.01828146
unemployment  0.085702193 -0.07076033 -0.03858228  0.50801208  0.20849447
                      PC6
age          -0.075121787
educ         -0.149627465
exper        -0.058126464
faminc        0.025538217
fathereduc    0.141788598
hage         -0.032664981
heduc        -0.230473213
hhours       -0.461421852
hwage         0.185369465
kids618      -0.100726997
kidsl6       -0.163191364
wage          0.219409002
mothereduc    0.237586876
mtr           0.002995639
unemployment -0.710635224

Agora farei a regressão conforme os componentes principais (Gujarati, 2015, p.91), a partir dos resultados do objeto pca1:

data1 <- data.frame(dados2[, 1], pca1$x[, 1], pca1$x[, 2], pca1$x[, 3], pca1$x[, 
    4], pca1$x[, 5], pca1$x[, 6])
colnames(data1) <- c("hours", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6")
attach(data1)
reg3 <- lm(hours ~ ., data = data1)
summary(reg3)

Call:
lm(formula = hours ~ ., data = data1)

Residuals:
    Min      1Q  Median      3Q     Max 
-1544.5  -628.1    59.2   534.8  3683.5 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1302.930     36.572  35.627  < 2e-16 ***
PC1           -1.494     19.447  -0.077 0.938810    
PC2          -84.042     21.570  -3.896 0.000114 ***
PC3           18.619     30.304   0.614 0.539293    
PC4         -105.740     32.157  -3.288 0.001093 ** 
PC5           -4.789     35.904  -0.133 0.893956    
PC6           56.356     38.937   1.447 0.148544    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 756.6 on 421 degrees of freedom
Multiple R-squared:  0.06338,   Adjusted R-squared:  0.05003 
F-statistic: 4.748 on 6 and 421 DF,  p-value: 0.0001071

4.1 Pacote factoextra

devtools::install_github("kassambara/factoextra")
library(factoextra)
res.pca <- prcomp(dados2[, -1], scale = TRUE)

Visualizar eigenvalues (scree plot). Mostrar as porcentagens das variâncias explicadas por cada componente principal.

fviz_eig(res.pca, choice = "eigenvalue")

Gráfico dos indivíduos com perfil parecido que serão agrupados juntos.

fviz_pca_ind(res.pca,
     col.ind = "cos2", # Color by the quality of representation
     gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
     repel = TRUE     # Avoid text overlapping
     )

Gráfico das variáveis que serão agrupadas. Variáveis correlacionadas positivas apontam para o mesmo lado do gráfico. Variáveis correlacionadas negativas apontam para lados opostos do gráfico.

fviz_pca_var(res.pca,
     col.var = "contrib", # Cor por contribuições ao PC
     gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
     repel = TRUE     # evitar sobreposição do texto
     )

4.1.1 Acesso aos resultados do PCA

library(factoextra)
# Eigenvalues
eig.val <- get_eigenvalue(res.pca)
knitr::kable(eig.val)
eigenvalue variance.percent cumulative.variance.percent
Dim.1 3.5448188 23.6321253 23.63213
Dim.2 2.8814154 19.2094359 42.84156
Dim.3 1.4598218 9.7321456 52.57371
Dim.4 1.2965018 8.6433455 61.21705
Dim.5 1.0400014 6.9333427 68.15040
Dim.6 0.8842625 5.8950833 74.04548
Dim.7 0.8259224 5.5061495 79.55163
Dim.8 0.6984399 4.6562660 84.20789
Dim.9 0.6495061 4.3300408 88.53793
Dim.10 0.5873982 3.9159881 92.45392
Dim.11 0.4150753 2.7671687 95.22109
Dim.12 0.3469436 2.3129575 97.53405
Dim.13 0.1822513 1.2150088 98.74906
Dim.14 0.1046367 0.6975781 99.44664
Dim.15 0.0830046 0.5533643 100.00000
# Results for Variables
res.var <- get_pca_var(res.pca)
res.var$coord  # Coordinates
                    Dim.1       Dim.2       Dim.3       Dim.4       Dim.5
age           0.009853328 -0.89650447  0.13721348 -0.02372954  0.09090112
educ          0.720552730  0.12464191  0.33633357  0.07286156 -0.19159707
exper        -0.073535664 -0.63297455  0.32300000 -0.02822783 -0.26024808
faminc        0.798827981 -0.17943073 -0.37933057 -0.20414695  0.02975152
fathereduc    0.500002774  0.24188484  0.55399621  0.09236939  0.29481927
hage         -0.015436065 -0.87068961  0.12798661 -0.02422167  0.14350007
                    Dim.6       Dim.7       Dim.8        Dim.9      Dim.10
age          -0.070640947  0.02049243 -0.26604698  0.178784557 -0.05096310
educ         -0.140702534 -0.06710099 -0.21616376 -0.179708199  0.01642578
exper        -0.054659355  0.01528986  0.26659936 -0.259875779 -0.49438405
faminc        0.024014921  0.04852204  0.15852175  0.148984587 -0.09752162
fathereduc    0.133331238 -0.04126890  0.01350925  0.267397886  0.07304306
hage         -0.030716590 -0.01809737 -0.30931091  0.234829732 -0.01550325
                  Dim.11       Dim.12        Dim.13        Dim.14
age          -0.06466258 -0.046719499 -0.0057847173 -0.1972513130
educ         -0.16800910  0.420350199  0.0397579662 -0.0051148113
exper         0.17992197  0.003233826  0.0404311160  0.0064927771
faminc       -0.01762699  0.077599504 -0.2281310411 -0.0860604202
fathereduc    0.43402416  0.063796954  0.0052393112 -0.0123419257
hage         -0.06887810 -0.009872123 -0.0017027865  0.1958007284
                    Dim.15
age           0.1116748673
educ          0.0031750934
exper        -0.0278207674
faminc       -0.1329510176
fathereduc    0.0002813481
hage         -0.0926807051
 [ reached getOption("max.print") -- omitted 9 rows ]
res.var$contrib  # Contributions to the PCs
                    Dim.1      Dim.2       Dim.3       Dim.4       Dim.5
age           0.002738873 27.8932450  1.28971481  0.04343158  0.79451944
educ         14.646622778  0.5391658  7.74890920  0.40947166  3.52974865
exper         0.152546412 13.9048600  7.14669405  0.06145847  6.51240111
faminc       18.001657623  1.1173463  9.85679726  3.21449438  0.08511074
fathereduc    7.052624919  2.0305394 21.02392197  0.65808658  8.35752765
hage          0.006721701 26.3100000  1.12209398  0.04525173  1.98002337
                    Dim.6       Dim.7       Dim.8        Dim.9      Dim.10
age          5.643283e-01  0.05084493 10.13415675 4.921265e+00  0.44215963
educ         2.238838e+00  0.54515317  6.69016346 4.972245e+00  0.04593242
exper        3.378686e-01  0.02830530 10.17628248 1.039797e+01 41.60986301
faminc       6.522005e-02  0.28506171  3.59789649 3.417429e+00  1.61908343
fathereduc   2.010401e+00  0.20620850  0.02612963 1.100862e+01  0.90829164
hage         1.067001e-01  0.03965442 13.69813473 8.490298e+00  0.04091785
                  Dim.11       Dim.12       Dim.13       Dim.14
age           1.00734711  0.629125732 1.836088e-02 3.718397e+01
educ          6.80046683 50.928819050 8.673166e-01 2.500202e-02
exper         7.79904623  0.003014217 8.969346e-01 4.028811e-02
faminc        0.07485647  1.735637323 2.855605e+01 7.078200e+00
fathereduc   45.38380730  1.173116042 1.506183e-02 1.455733e-01
hage          1.14297153  0.028090677 1.590925e-03 3.663908e+01
                   Dim.15
age          1.502479e+01
educ         1.214537e-02
exper        9.324721e-01
faminc       2.129516e+01
fathereduc   9.536423e-05
hage         1.034847e+01
 [ reached getOption("max.print") -- omitted 9 rows ]
res.var$cos2  # Quality of representation 
                    Dim.1       Dim.2        Dim.3        Dim.4
age          9.708808e-05 0.803720256 0.0188275385 0.0005630913
educ         5.191962e-01 0.015535605 0.1131202689 0.0053088075
exper        5.407494e-03 0.400656777 0.1043290007 0.0007968102
faminc       6.381261e-01 0.032195388 0.1438916792 0.0416759784
fathereduc   2.500028e-01 0.058508273 0.3069118048 0.0085321046
hage         2.382721e-04 0.758100390 0.0163805730 0.0005866895
                    Dim.5        Dim.6        Dim.7        Dim.8
age          0.0082630133 4.990143e-03 0.0004199397 0.0707809939
educ         0.0367094355 1.979720e-02 0.0045025423 0.0467267707
exper        0.0677290629 2.987645e-03 0.0002337798 0.0710752168
faminc       0.0008851529 5.767164e-04 0.0023543886 0.0251291445
fathereduc   0.0869184048 1.777722e-02 0.0017031223 0.0001824998
hage         0.0205922709 9.435089e-04 0.0003275148 0.0956732380
                    Dim.9       Dim.10       Dim.11       Dim.12
age          3.196392e-02 0.0025972378 0.0041812491 2.182712e-03
educ         3.229504e-02 0.0002698062 0.0282270583 1.766943e-01
exper        6.753542e-02 0.2444155938 0.0323719147 1.045763e-05
faminc       2.219641e-02 0.0095104672 0.0003107107 6.021683e-03
fathereduc   7.150163e-02 0.0053352889 0.1883769754 4.070051e-03
hage         5.514500e-02 0.0002403507 0.0047441925 9.745881e-05
                   Dim.13       Dim.14       Dim.15
age          3.346295e-05 3.890808e-02 1.247128e-02
educ         1.580696e-03 2.616129e-05 1.008122e-05
exper        1.634675e-03 4.215615e-05 7.739951e-04
faminc       5.204377e-02 7.406396e-03 1.767597e-02
fathereduc   2.745038e-05 1.523231e-04 7.915674e-08
hage         2.899482e-06 3.833793e-02 8.589713e-03
 [ reached getOption("max.print") -- omitted 9 rows ]

Referências

GUJARATI, Damodar N.; PORTER, Dawn C. Econometria básica. 5.ed. Porto Alegre: AMGH/Bookman/McGraw-Hill do Brasil, 2011.

GUJARATI, Damodar N. Econometrics by example. 2nd edition. Palgrave-Macmillan Publishers Limited, 2015.

KASSAMBARA, Alboukadel; MUNDT, Fabian (2017). factoextra: Extract and Visualize the Results of Multivariate Data Analyses. R package version 1.0.5.999. Disponível em: http://www.sthda.com/english/rpkgs/factoextra

MROZ, T.A. The sensitivity of an empirical model of married women’s hours of work to economic and statistical assumptions. Econometrica, v.55, p.765-999. 1987. Disponível em: http://unionstats.gsu.edu/9220/Mroz_Econometrica_LaborSupply_1987.pdf.

LS0tDQp0aXRsZTogIkVjb25vbWV0cmlhOiBleGVtcGxvIG11bHRpY29saW5lYXJpZGFkZSAtIGhvcmFzIGRlIHRyYWJhbGhvIGRhIG11bGhlciwgR3VqYXJhdGkgKDIwMTUsIHAuODQtOTIgZW5nbGlzaCBzZWNvbmQgZWRpdGlvbikiDQphdXRob3I6ICJBZHJpYW5vIE1hcmNvcyBSb2RyaWd1ZXMgRmlndWVpcmVkbyINCmUtbWFpbDogImFkcmlhbm8uZmlndWVpcmVkb0B1Zm1zLmJyIg0KYWJzdHJhY3Q6IA0KICBXZSBhbmFseXNlIG11bHRpY29sbGluZWFyaXR5ICB1c2luZyBleGFtcGxlIGZyb20gR3VqYXJhdGkncyBFY29ub21ldHJpY3MgYnkgRXhhbXBsZSwgMm5kIGVkaXRpb24gLSByZWdyZXNzaW9uIGFuZCBwcmluY2lwYWwgY29tcG9uZW50cyBhbmFseXNpcy4gDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclZCAlQiAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgdGhlbWU6IGRlZmF1bHQNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgZmlnX2NhcHRpb246IHRydWUNCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KYGBge3Iga25pdHJfaW5pdCwgZWNobz1GQUxTRSwgY2FjaGU9RkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShybWFya2Rvd24pDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iMTAwIikNCm9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9MTAwKQ0KYGBgDQoNCg0KTGljZW7Dp2Egey0jTGljZW7Dp2F9DQo9PT09PT09PT09PT09PT09PT09DQoNClRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIFRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgbGljZW5zZSwgdmlzaXQgPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8+IG9yIHNlbmQgYSBsZXR0ZXIgdG8gQ3JlYXRpdmUgQ29tbW9ucywgUE8gQm94IDE4NjYsIE1vdW50YWluIFZpZXcsIENBIDk0MDQyLCBVU0EuDQoNCiFbTGljZW5zZTogQ0MgQlktU0EgNC4wXShodHRwczovL21pcnJvcnMuY3JlYXRpdmVjb21tb25zLm9yZy9wcmVzc2tpdC9idXR0b25zLzg4eDMxL3BuZy9ieS1zYS5wbmcpeyB3aWR0aD0yNSUgfQ0KDQpDaXRhw6fDo28gey0jQ2l0YcOnw6NvfQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KU3VnZXN0w6NvIGRlIGNpdGHDp8OjbzoNCkZJR1VFSVJFRE8sIEFkcmlhbm8gTWFyY29zIFJvZHJpZ3Vlcy4gRWNvbm9tZXRyaWE6IGV4ZW1wbG8gbXVsdGljb2xpbmVhcmlkYWRlIC0gaG9yYXMgZGUgdHJhYmFsaG8gZGEgbXVsaGVyLCBHdWphcmF0aSAoMjAxNSwgcC44NC05MiBlbmdsaXNoIHNlY29uZCBlZGl0aW9uKS4gQ2FtcG8gR3JhbmRlLU1TLEJyYXNpbDogUlN0dWRpby9ScHVicywgMjAxOS4gRGlzcG9uw612ZWwgZW0gPGh0dHA6Ly9ycHVicy5jb20vYW1yb2ZpL0d1amFyYXRpX3dvbWVuX2hvdXJzPi4gDQoNCkludHJvZHXDp8Ojbw0KPT09PT09PT09PT09PT09PT09PQ0KDQpPcyBwcmltZWlyb3MgcGFzc29zIHPDo28gY3JpYXIgb3UgYWJyaXIgdW0gZGlyZXTDs3JpbyBkZSB0cmFiYWxoby4gU2Ugb3B0YXIgcG9yIGNyaWFyIHVtIG5vdm8gcHJvamV0bywgaGF2ZXLDoSBhIHBvc3NpYmlsaWRhZGUgZGUgY3JpYXIgZW0gdW1hIHBhc3RhIHZhemlhLiBFbSBzZWd1aWRhLCBzdWdlcmUtc2UgcXVlIGNvbG9xdWUgb3MgZGFkb3MgbmVzdGEgcGFzdGEsIHNlIHBvc3PDrXZlbCBlbSB1bSBhcnF1aXZvIE1TIEV4Y2VsIGUgY2hhbWUgYSBwbGFuaWxoYSBkZSAnZGFkb3MnLk5lc3RlIGNhc28sIGEgcGxhbmlsaGEgZGUgZGFkb3Mgc2Vyw6EgY29sb2NhZGEgZGVudHJvIGRvIGPDs2RpZ28gZ2VyYWRvIHBlbGEgZnVuw6fDo28gYGRwdXQoKWAuIE9zIGRhZG9zIGLDoXNpY29zIGRlc3RlIGxpdnJvIGRlIEd1amFyYXRpICgyMDE1KSBlc3TDo28gZW0gPGh0dHBzOi8vd3d3Lm1hY21pbGxhbmloZS5jb20vY29tcGFuaW9uL2d1amFyYXRpLWVjb25vbWV0cmljcy1ieS1leGFtcGxlLTJlL2xlYXJuaW5nLXJlc291cmNlcy9EYXRhLXNldHMvPi4gU3VnZXJlLXNlIGNvcGlhciBlIGNvbGFyIG8gYXJxdWl2byBgVGFibGU0XzQueGxzYCBwYXJhIG8gZGlyZXTDs3JpbyBkbyBwcm9qZXRvIGEgZmltIGRlIG1lbGhvciByZWFsaXphciBvIGV4ZXJjw61jaW8uIA0KDQo+IFVzYXJlaSBhIHRhYmVsYSA0LjQsIHF1ZSByZWZlcmUtc2UgYSB1bSBkYXRhc2V0IGRlIHZhcmnDoXZlaXMgc29jaW9lY29uw7RtaWNhcyBkZSBtdWxoZXJlcyBjYXNhZGFzIHF1ZSBlc3TDo28gbm8gbWVyY2FkbyBkZSB0cmFiYWxoby4gU8OjbyBkYWRvcyBjcm9zcy1zZWN0aW9uIGRlIDc1MyBtdWxoZXJlcyBjYXNhZGFzIHBhcmEgbyBhbm8gZGUgMTk3NSwgZSBleGlzdGVtIDMyNSBtdWxoZXJlcyBxdWUgbsOjbyB0cmFiYWxoYW0gZSBwb3J0YW50byBhcHJlc2VudGFtIHplcm8gaG9yYXMgZGUgdHJhYmFsaG8uIE9zIGRhZG9zIGLDoXNpY29zIGZvcmFtIHBhcnRlIGRvIGVzdHVkbyBkZSBNcm96ICgxOTg3KS4gDQoNCg0KRGFkb3MgZSByZWdyZXNzw6NvIGluaWNpYWwNCj09PT09PT09PT09PT09PT0NCg0KQXF1aSBjaGFtYXJlbW9zIG9zIGRhZG9zIGRvIGFycXVpdm8gLnhscy4gDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQpUYWJsZTRfNCA8LSByZWFkX2V4Y2VsKCJUYWJsZTRfNC54bHMiKQ0KI1ZpZXcoVGFibGU0XzQpDQphdHRhY2goVGFibGU0XzQpDQpgYGANCg0KTyBhcnF1aXZvIGLDoXNpY28gY29udMOpbSAyNSB2YXJpw6F2ZWlzIGUgNzUzIG9ic2VydmHDp8O1ZXMsIGEgc2FiZXI6DQoNCmBgYA0KICAgIGFnZSwgZWR1YywgZXhwZXIsIGZhbWluYywgZmF0aGVyZWR1YywgZmVkZXJhbHRheCwgaGFnZSwNCiAgICBoZWR1YywgaGZhdGhlcmVkdWMsIGhob3VycywgaG1vdGhlcmVkdWMsIGhvdXJzLCBoc2libGluZ3MsDQogICAgaHdhZ2UsIGtpZHM2MTgsIGtpZHNsNiwgbGFyZ2VjaXR5LCBsZnAsIG1vdGhlcmVkdWMsIG10ciwNCiAgICBzaWJsaW5ncywgdGF4YWJsZWluYywgdW5lbXBsb3ltZW50LCB3YWdlLCB3YWdlNzYNCmBgYCAgICANCg0KVXRpbGl6YXJlbW9zIGFwZW5hcyBhcyB2YXJpw6F2ZWlzIHF1ZSBmb3JhbSB1dGlsaXphZGFzIGVtIEd1amFyYXRpICgyMDE1LCBwLjg0KSBhIGZpbSBkZSByZXByb2R1emlyIHN1YXMgZXN0aW1hdGl2YXMuIFPDo28gZWxhczoNCg0KYGBgDQpob3VycyAtIGhvcmFzIHRyYWJhbGhhZGFzIGVtIDE5NzUgKHZhcmnDoXZlbCBkZXBlbmRlbnRlKSwNCmtpZHNsNiAtIG7Dum1lcm8gZGUgY3JpYW7Dp2FzIG1lbm9yZXMgZGUgNiBhbm9zIGRlIGlkYWRlLA0Ka2lkczYxOCAtIG7Dum1lcm8gZGUgY3JpYW7Dp2FzIGVudHJlIDYgZSAxOCBhbm9zIGRlIGlkYWRlLA0KYWdlIC0gaWRhZGUgZGEgbXVsaGVyIGVtIGFub3MsIA0KZWR1YyAtIGFub3MgZGUgZXNjb2xhLA0Kd2FnZSAtIHNhbMOhcmlvIGVzdGltYWRvIGRvcyByZW5kaW1lbnRvcywNCmhob3VycyAtIGhvcmFzIGRlIHRyYWJhbGhvIGRvIG1hcmlkbywNCmhhZ2UgLSBpZGFkZSBkbyBtYXJpZG8sDQpoZWR1YyAtIGFub3MgZGUgZXNjb2xhIGRvIG1hcmlkbywNCmh3YWdlIC0gc2Fsw6FyaW8gcG9yIGhvcmEgZG8gbWFyaWRvIGVtIDE5NzUsDQpmYW1pbmMgLSByZW5kYSBmYW1pbGlhciBlbSAxOTc1LA0KbXRyIC0gdGF4YSBtYXJnaW5hbCBkZSBpbXBvc3RvIGZlZGVyYWwgZW5mcmVudGFkYSBwZWxhIG11bGhlciwNCm1vdGhlcmVkdWMgLSBhbm9zIGRlIGVzY29sYSBkYSBtw6NlLA0KZmF0aGVyZWR1YyAtIGFub3MgZGUgZXNjb2xhIGRvIHBhaSwNCnVuZW1wbG95bWVudCAtIHRheGEgZGUgZGVzZW1wcmVnbyBubyBwYcOtcyBkZSByZXNpZMOqbmNpYSwNCmV4cGVyIC0gZXhwZXJpw6puY2lhIGF0dWFsIG5vIG1lcmNhZG8gZGUgdHJhYmFsaG8NCmBgYA0KDQpWb3UgY3JpYXIgdW0gc3Vic2V0IGRvcyBkYWRvcyBwYXJhIHJldGlyYXIgYXMgbXVsaGVyZXMgcXVlIG7Do28gZXN0YXZhbSBubyBtZXJjYWRvIGRlIHRyYWJhbGhvLCBvdSBzZWphLCBhcXVlbGFzIGNvbSB6ZXJvIGhvcmFzIGRlIHRyYWJhbGhvLg0KDQpgYGB7cn0NCmRhZG9zIDwtIFRhYmxlNF80WyB3aGljaChob3Vycz4wKSxdDQpkZXRhY2goVGFibGU0XzQpDQphdHRhY2goZGFkb3MpDQpgYGANCg0KDQpNb2RlbG8NCj09PT09PT09PT09PT09PT09DQoNCk8gbW9kZWxvIGluaWNpYWwgw6kgdW0gbW9kZWxvIGRlIHJlZ3Jlc3PDo28gbGluZWFyIG3Dumx0aXBsYS4gVXRpbGl6YXJlaSBhIGZ1bsOnw6NvIG5hdGl2YSBgbG0oKWAgcGFyYSBlc3RpbWHDp8Ojby4gVXNhcmVpIGFzIGZ1bsOnw7VlcyBgQUlDYCBlIGBCSUNgIGUgaW5jb3Jwb3JhcmVpIMOgIHNhw61kYSBkYSByZWdyZXNzw6NvIGBtb2QxYC4gVXNhcmVpIG8gcGFjb3RlIGBzdGFyZ2F6ZXJgIHBhcmEgZXhpYmlyIG9zIHJlc3VsdGFkb3MuIA0KDQpgYGB7cn0NCm1vZDE8LWxtKGhvdXJzfmFnZStlZHVjK2V4cGVyK2ZhbWluYysNCiAgICAgICAgICAgZmF0aGVyZWR1YytoYWdlK2hlZHVjK2hob3VycysNCiAgICAgICAgICAgaHdhZ2Ura2lkczYxOCtraWRzbDYrd2FnZSsNCiAgICAgICAgICAgbW90aGVyZWR1YyttdHIrdW5lbXBsb3ltZW50LGRhdGEgPSBkYWRvcykNCm1vZDEkQUlDPC1BSUMobW9kMSkNCm1vZDEkQklDPC1CSUMobW9kMSkNCmxpYnJhcnkoc3RhcmdhemVyKQ0Kc3RhcmdhemVyKG1vZDEsIA0KICAgICAgICAgIHRpdGxlPSJUw610dWxvOiBSZXN1bHRhZG8gZGEgUmVncmVzc8OjbyIsDQogICAgICAgICAgYWxpZ249VFJVRSwNCiAgICAgICAgICB0eXBlID0gInRleHQiLCBzdHlsZSA9ICJhbGwiLA0KICAgICAgICAgIGtlZXAuc3RhdD1jKCJhaWMiLCJiaWMiLCJyc3EiLCAiYWRqLnJzcSIsIm4iKQ0KICAgICAgICAgICkNCmBgYA0KDQojIyBNdWx0aWNvbGluZWFyaWRhZGUNCg0KQSBpZGVudGlmaWNhw6fDo28gZGEgbXVsdGljb2xpbmVhcmlkYWRlLCBjb25mb3JtZSBHdWphcmF0aSAoMjAxNSksIHBvZGUgc2VyIGZlaXRhIGRlIHbDoXJpYXMgZm9ybWFzLiBBIGFuw6FsaXNlIGRlIGNvcnJlbGHDp8OjbyBwZXJtaXRpcsOhIHRlciB1bWEgaWRlaWEgaW5pY2lhbCBkZSBwb3Nzw612ZWwgbXVsdGljb2xpbmVhcmlkYWRlLiBOZXN0ZSBjYXNvLCBlc3TDoSBwZWdhbmRvIHRvZGFzIGFzIHZhcmnDoXZlaXMgZG8gZGF0YXNldCBwYXJhIGFzIDQyOCBvYnNlcnZhw6fDtWVzIHbDoWxpZGFzLiBBcyBjb3JyZWxhw6fDtWVzIGVtIG3Ds2R1bG8gY29tIHZhbG9yZXMgYWNpbWEgZGUgMC44IHBvZGVtIGluZGljYXIgcHJlc2Vuw6dhIGRlIHJlbGHDp8OjbyBsaW5lYXIgZW50cmUgYXMgdmFyacOhdmVpcy4gTmVzdGUgY2FzbywgcHJlb2N1cGFyZW1vcyBjb20gYXMgdmFyacOhdmVpcyBxdWUgY29sb2NhbW9zIG5vIGBtb2QxYCBlIGVudHJlIGFzIHZhcmnDoXZlaXMgZXhwbGljYXRpdmFzIGRvIG1vZGVsbywgZWxhcyBuw6NvIGVzdMOjbyBubyBxdWFkcmFudGUgZGUgY29ycmVsYcOnw6NvIChkdWFzIGEgZHVhcykgYWNpbWEgZGUgMCw1LiBJc3RvIG7Do28gZXhjbHVpIGFzIGNvcnJlbGHDp8O1ZXMgIm3Dumx0aXBsYXMiLCBvdSBzZWphLCBhIHBvc3PDrXZlbCByZWxhw6fDo28gZW50cmUgbWFpcyBkZSBkdWFzIHZhcmnDoXZlaXMsIG91IHNlamEsIGEgbXVsdGljb2xpbmVhcmlkYWRlLiANCg0KYGBge3J9DQojaW5zdGFsbC5wYWNrYWdlcygiY29ycnBsb3QiKQ0KbGlicmFyeShjb3JycGxvdCkNCmNvcmVsPC1jb3IoZGFkb3MpDQpjb3JycGxvdChjb3JlbCxtZXRob2QgPSJudW1iZXIiKQ0KY29yZWwNCmBgYA0KDQoNCk91dHJhIG9ww6fDo28gw6kgdXRpbGl6YXIgbyBmYXRvciBkZSBpbmZsYcOnw6NvIGRhIHZhcmnDom5jaWEgKF9WYXJpYW5jZSBpbmZsYXRpb24gZmFjdG9yIC0gVklGXykuIE8gcmVzdWx0YWRvIGRhIGZ1bsOnw6NvIGB2aWZgIGRvIHBhY290ZSBgY2FyYCBzZXLDoToNCg0KYGBge3J9DQpsaWJyYXJ5KGNhcikNCiMgdmlmDQpyZWcxLnZpZjwtdmlmKG1vZDEpDQp0YWJlbGE8LWNiaW5kKFZJRj1yZWcxLnZpZixUT0w9SSgxL3JlZzEudmlmKSkNCmtuaXRyOjprYWJsZSh0YWJlbGEpDQojIFZJRiBtw6lkaW8NCmMoVklGbWVkaW89c3VtKHJlZzEudmlmKS9sZW5ndGgocmVnMS52aWYpKQ0KYGBgDQoNCk9saGFuZG8gb3MgcmVzdWx0YWRvcywgZXhpc3RlIGFsZ3VtYSByZWxhw6fDo28gY29saW5lYXIgaW1wZXJmZWl0YSBlbnRyZSBhcyB2YXJpw6F2ZWlzIGVkdWNhY2lvbmFpcyAoZmF0aGVyZWR1YyBlIG1vdGhlcmVkdWMpIGUgbyByZXN1bHRhZG8gZGEgZWR1Y2HDp8OjbyBkYSBmaWxoYSAoZWR1YykuIE91dHJhIHF1ZXN0w6NvIHBvZGUgc2VyIGxldmFudGFkYSBjb20gcmVzcGVpdG8gw6AgaW5jbHVzw6NvIGRhcyB2YXJpw6F2ZWlzIGRlIGNyaWFuw6dhcyBhY2ltYSBkZSA2IGFub3MgZGUgaWRhZGUgKGtpZHM2MTgpLCBzZSBlbGEgZGV2ZSBlc3RhciBubyBtb2RlbG8uIEFpbmRhLCBhcyBpZGFkZXMgZGEgbXVsaGVyIChhZ2UpIGUgZG8gbWFyaWRvIChoYWdlKSBlc3TDo28gY29ycmVsYWNpb25hZGFzLiBBc3NpbSwgYSBhbHRlcm5hdGl2YSBhZG90YWRhIMOpIGEgZXhjbHVzw6NvIGRlIGFsZ3VtYXMgdmFyacOhdmVpcyBkbyBtb2RlbG8gKGZhdGhlcmVkdWMsaGFnZSxoZWR1YyxraWRzNjE4LG1vdGhlcmVkdWMpLg0KDQpgYGB7cn0NCm1vZDI8LWxtKGhvdXJzfmFnZStlZHVjK2V4cGVyK2ZhbWluYysNCiAgICAgICAgICAgaGhvdXJzK2h3YWdlK2tpZHNsNit3YWdlKw0KICAgICAgICAgICBtdHIrdW5lbXBsb3ltZW50LGRhdGEgPSBkYWRvcykNCm1vZDIkQUlDPC1BSUMobW9kMikNCm1vZDIkQklDPC1CSUMobW9kMikNCmxpYnJhcnkoc3RhcmdhemVyKQ0Kc3RhcmdhemVyKG1vZDEsbW9kMiwgDQogICAgICAgICAgdGl0bGU9IlTDrXR1bG86IFJlc3VsdGFkbyBkYSBSZWdyZXNzw6NvIiwNCiAgICAgICAgICBhbGlnbj1UUlVFLA0KICAgICAgICAgIHR5cGUgPSAidGV4dCIsIHN0eWxlID0gImFsbCIsDQogICAgICAgICAga2VlcC5zdGF0PWMoImFpYyIsImJpYyIsInJzcSIsICJhZGoucnNxIiwibiIpDQogICAgICAgICAgKQ0KYGBgDQoNCsOJIHBvc3PDrXZlbCBvYnNlcnZhciBxdWUgYSBhbHRlcmHDp8OjbyB0b3Jub3UgbyBtb2RlbG8gMiBjb20gbWFpb3IgJFJeMiQgYWp1c3RhZG8gKEFkanVzdGVkIFIyID0gMC4zMjApLCBlIG1lbm9yZXMgdmFsb3JlcyBkZSBBa2Fpa2UgKEFJQyA9IDY3NTgpIGUgQmF5ZXNpYW4gKFNjaHdhcnopIChCSUMgPSA2ODA3KS4gQSB2YXJpw6F2ZWwgdW5lbXBsb3ltZW50IGNvbnRpbnVhIG7Do28gc2lnbmlmaWNhdGl2YSwgbsOjbyBhZmV0YW5kbyBhIHZhcmnDoXZlbCBkZXBlbmRlbnRlIChob3VycykuIMOJIHBvc3PDrXZlbCBleHRyYWlyIG5vdm9zIHZhbG9yZXMgZGUgVklGIGUgVE9MIHBhcmEgbyBtb2RlbG8gMi4NCg0KYGBge3J9DQpsaWJyYXJ5KGNhcikNCiMgdmlmDQpyZWcyLnZpZjwtdmlmKG1vZDIpDQp0YWJlbGEyPC1jYmluZChWSUY9cmVnMi52aWYsVE9MPUkoMS9yZWcyLnZpZikpDQprbml0cjo6a2FibGUodGFiZWxhMikNCiMgVklGIG3DqWRpbw0KYyhWSUZtZWRpbz1zdW0ocmVnMi52aWYpL2xlbmd0aChyZWcyLnZpZikpDQpgYGANCg0KQ29uZm9ybWUgZXhwb3N0byBwb3IgR3VqYXJhdGkoMjAxNSwgcC44OCksIGFpbmRhIGV4aXN0ZSBjb25zaWRlcsOhdmVsIGNvbGluZWFyaWRhZGUuIEFzIHZhcmnDoXZlaXMgcG9kZXJpYW0gc2VyICJtaW5lcmFkYXMiIGF0w6kgZW5jb250cmFyIG8gbW9kZWxvIG1lbGhvciwgbWFzIEd1amFyYXRpICgyMDE1KSBlc2NsYXJlY2UgcXVlIHRhbCBwcm9jZWRpbWVudG8gZGUgX2RhdGEgZmlzaGluZ18gb3UgX2RhdGEgbWluaW5nXyByZXRpcmFuZG8gdmFyacOhdmVpcyBxdWUgImRldmVtIiBlc3RhciBubyBtb2RlbG8gcG9kZW0gdGlyYXIgYSBsZWdpdGltaWRhZGUgZG8gbW9kZWxvLiDDiSBtZWxob3IgZGVpeGFyIGEgdmFyacOhdmVsIG7Do28gc2lnbmlmaWNhdGl2YSBubyBtb2RlbG8gcG9pcyBleGlzdGVtIHJhesO1ZXMgdGXDs3JpY2FzIG91IHByw6F0aWNhcyBxdWUgaW5kaWNhbSBxdWUgZGV2YSBlc3Rhci4gICAgIA0KDQpBbHRlcm5hdGl2YXMgYXBhcmVjZW0gY29tbyBhIGRlIHV0aWxpemFyIG8gbcOpdG9kbyBkZSBjb21wb25lbnRlcyBwcmluY2lwYWlzIHBhcmEgcmVkdXppciBhcyB2YXJpw6F2ZWlzIGRvIG1vZGVsbyAoUENBIG91IF9QcmluY2lwYWwgY29tcG9uZW50cyBhbmFseXNpc18pLiBFc3RhIGFib3JkYWdlbSByZWR1eiBvIHByb2JsZW1hIGRlIG11bHRpY29saW5lYXJpZGFkZSBtYXMgcG9kZSBkaWZpY3VsdGFyIGEgaW50ZXJwcmV0YcOnw6NvIGRlc3NlcyBjb21wb25lbnRlcyBwcmluY2lwYWlzLCBwb2lzIGFnb3JhIG7Do28gc8OjbyBhcyB2YXJpw6F2ZWlzIG9yaWdpbmFpcyBkbyBtb2RlbG8uDQoNCg0KQ29tcG9uZW50ZXMgcHJpbmNpcGFpcw0KPT09PT09PT09PT09PT09PQ0KDQpBIGV4dHJhw6fDo28gZGVzc2VzIGNvbXBvbmVudGVzIHNlcsOhIGZlaXRhIGNvbSBhIGZ1bsOnw6NvIGBwY2FgLiBPIHJlc3VsdGFkbyBpbmNsdWkgMTUgY29tcG9uZW50ZXMgcHJpbmNpcGFpcyBlbSBxdWUgcGFyYSBjYWRhIHVtIHRlbS1zZSBhIHByb3BvcsOnw6NvIGRhIHZhcmnDom5jaWEgKD1laWdlbnZhbHVlKSBlIGEgdmFyacOibmNpYSBhY3VtdWxhZGEgZGUgY2FkYSBjb21wb25lbnRlLiBPcyBjb21wb25lbnRlcyBlc3TDo28gcmFucXVlYWRvcyBkbyBtYWlzIGltcG9ydGFudGUgKFBDMSkgcGFyYSBvIG1lbm9zIGltcG9ydGFudGUgKFBDMTUpLg0KDQpgYGB7cn0NCmF0dGFjaChkYWRvcykNCm15dmFycyA8LSBjKCJob3VycyIsImFnZSIsImVkdWMiLCJleHBlciIsImZhbWluYyIsDQogICAgICAgICAgICJmYXRoZXJlZHVjIiwiaGFnZSIsImhlZHVjIiwiaGhvdXJzIiwNCiAgICAgICAgICAgImh3YWdlIiwia2lkczYxOCIsImtpZHNsNiIsIndhZ2UiLA0KICAgICAgICAgICAibW90aGVyZWR1YyIsIm10ciIsInVuZW1wbG95bWVudCIpDQpkYWRvczI8LWRhZG9zW215dmFyc10NCnBjYTEgPC0gcHJjb21wKGRhZG9zMlssLTFdLCBzY2FsZS4gPSBUKQ0Kc3VtbWFyeShwY2ExKQ0Kc3VtbWFyeShwcmNvbXAoZGFkb3MyWywtMV0sIHJhbmsuID0gNiwgc2NhbGUgPSBUUlVFKSkNCmBgYA0KDQoNCk8gcHJpbWVpcm8gY29tcG9uZW50ZSAoUEMxKSBjb3JyZXNwb25kZSBhIDIzLDYzJSBkbyB0b3RhbCBjb20gdmFyacOibmNpYSAoKmVpZ2VudmFsdWUqKSBpZ3VhbCBhIA0KDQpgYGAge3J9IA0KMS44ODI4XjIgDQpgYGAgDQoNClBvc3NvIGVzY29saGVyIG9saGFyIGFwZW5hcyBvcyBzZWlzIHByaW1laXJvcyBlIG9idGVyIGFzIF9sb2FkaW5nc186DQoNCmBgYHtyfQ0KIyBhcGVuYXMgNiBQQ3MgbWFpcyBkaXJldGFtZW50ZToNCnB6NiA8LSBwcmNvbXAoZGFkb3MyWywtMV0sIHJhbmsuID0gNiwgc2NhbGUgPSBUUlVFKQ0KcHJpbnQocHo2KQ0KYGBgDQoNCkFnb3JhIGZhcmVpIGEgcmVncmVzc8OjbyBjb25mb3JtZSBvcyBjb21wb25lbnRlcyBwcmluY2lwYWlzIChHdWphcmF0aSwgMjAxNSwgcC45MSksIGEgcGFydGlyIGRvcyByZXN1bHRhZG9zIGRvIG9iamV0byBgcGNhMWA6DQoNCmBgYHtyfQ0KZGF0YTE8LSBkYXRhLmZyYW1lKGRhZG9zMlssMV0sIHBjYTEkeFssMV0sDQogICAgICAgICBwY2ExJHhbLDJdLHBjYTEkeFssM10sDQogICAgICAgICBwY2ExJHhbLDRdLHBjYTEkeFssNV0scGNhMSR4Wyw2XSkNCmNvbG5hbWVzKGRhdGExKSA8LSBjKCJob3VycyIsICJQQzEiLCJQQzIiLCJQQzMiLA0KICAgICAgICAgICAgICAgICAgICAgIlBDNCIsIlBDNSIsIlBDNiIpDQphdHRhY2goZGF0YTEpDQpyZWczIDwtIGxtKGhvdXJzIH4gLiwgZGF0YT1kYXRhMSkNCnN1bW1hcnkocmVnMykNCmBgYA0KDQojIyBQYWNvdGUgYGZhY3RvZXh0cmFgDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJrYXNzYW1iYXJhL2ZhY3RvZXh0cmEiKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShmYWN0b2V4dHJhKQ0KcmVzLnBjYSA8LSBwcmNvbXAoZGFkb3MyWywtMV0sIHNjYWxlID0gVFJVRSkNCmBgYA0KDQoNClZpc3VhbGl6YXIgZWlnZW52YWx1ZXMgKF9zY3JlZSBwbG90XykuIE1vc3RyYXIgYXMgcG9yY2VudGFnZW5zIGRhcyB2YXJpw6JuY2lhcyBleHBsaWNhZGFzIHBvciBjYWRhIGNvbXBvbmVudGUgcHJpbmNpcGFsLiANCg0KDQpgYGB7cn0NCmZ2aXpfZWlnKHJlcy5wY2EsY2hvaWNlID0gImVpZ2VudmFsdWUiKQ0KYGBgDQoNCkdyw6FmaWNvIGRvcyBpbmRpdsOtZHVvcyBjb20gcGVyZmlsIHBhcmVjaWRvIHF1ZSBzZXLDo28gYWdydXBhZG9zIGp1bnRvcy4NCg0KYGBge3J9DQpmdml6X3BjYV9pbmQocmVzLnBjYSwNCiAgICAgY29sLmluZCA9ICJjb3MyIiwgIyBDb2xvciBieSB0aGUgcXVhbGl0eSBvZiByZXByZXNlbnRhdGlvbg0KICAgICBncmFkaWVudC5jb2xzID0gYygiIzAwQUZCQiIsICIjRTdCODAwIiwgIiNGQzRFMDciKSwNCiAgICAgcmVwZWwgPSBUUlVFICAgICAjIEF2b2lkIHRleHQgb3ZlcmxhcHBpbmcNCiAgICAgKQ0KYGBgDQoNCkdyw6FmaWNvIGRhcyB2YXJpw6F2ZWlzIHF1ZSBzZXLDo28gYWdydXBhZGFzLiBWYXJpw6F2ZWlzIGNvcnJlbGFjaW9uYWRhcyBwb3NpdGl2YXMgYXBvbnRhbSBwYXJhIG8gbWVzbW8gbGFkbyBkbyBncsOhZmljby4gVmFyacOhdmVpcyBjb3JyZWxhY2lvbmFkYXMgbmVnYXRpdmFzIGFwb250YW0gcGFyYSBsYWRvcyBvcG9zdG9zIGRvIGdyw6FmaWNvLg0KDQpgYGB7cn0NCmZ2aXpfcGNhX3ZhcihyZXMucGNhLA0KICAgICBjb2wudmFyID0gImNvbnRyaWIiLCAjIENvciBwb3IgY29udHJpYnVpw6fDtWVzIGFvIFBDDQogICAgIGdyYWRpZW50LmNvbHMgPSBjKCIjMDBBRkJCIiwgIiNFN0I4MDAiLCAiI0ZDNEUwNyIpLA0KICAgICByZXBlbCA9IFRSVUUgICAgICMgZXZpdGFyIHNvYnJlcG9zacOnw6NvIGRvIHRleHRvDQogICAgICkNCmBgYA0KDQojIyMgQWNlc3NvIGFvcyByZXN1bHRhZG9zIGRvIFBDQQ0KDQpgYGB7cn0NCmxpYnJhcnkoZmFjdG9leHRyYSkNCiMgRWlnZW52YWx1ZXMNCmVpZy52YWwgPC0gZ2V0X2VpZ2VudmFsdWUocmVzLnBjYSkNCmtuaXRyOjprYWJsZShlaWcudmFsKQ0KYGBgDQoNCmBgYHtyfQ0KIyBSZXN1bHRzIGZvciBWYXJpYWJsZXMNCnJlcy52YXIgPC0gZ2V0X3BjYV92YXIocmVzLnBjYSkNCnJlcy52YXIkY29vcmQgICAgICAgICAgIyBDb29yZGluYXRlcw0KcmVzLnZhciRjb250cmliICAgICAgICAjIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFBDcw0KcmVzLnZhciRjb3MyICAgICAgICAgICAjIFF1YWxpdHkgb2YgcmVwcmVzZW50YXRpb24gDQogDQpgYGANCg0KDQoNCg0KUmVmZXLDqm5jaWFzIHstI1JlZmVyw6puY2lhc30NCj09PT09PT09PT09PT09PT09DQoNCkdVSkFSQVRJLCBEYW1vZGFyIE4uOyBQT1JURVIsIERhd24gQy4gRWNvbm9tZXRyaWEgYsOhc2ljYS4gNS5lZC4gUG9ydG8gQWxlZ3JlOiBBTUdIL0Jvb2ttYW4vTWNHcmF3LUhpbGwgZG8gQnJhc2lsLCAyMDExLiANCg0KR1VKQVJBVEksIERhbW9kYXIgTi4gRWNvbm9tZXRyaWNzIGJ5IGV4YW1wbGUuIDJuZCBlZGl0aW9uLiBQYWxncmF2ZS1NYWNtaWxsYW4gUHVibGlzaGVycyBMaW1pdGVkLCAyMDE1LiAgICANCg0KS0FTU0FNQkFSQSwgQWxib3VrYWRlbDsgTVVORFQsIEZhYmlhbiAoMjAxNykuIGZhY3RvZXh0cmE6IEV4dHJhY3QgYW5kIFZpc3VhbGl6ZSB0aGUgUmVzdWx0cyBvZiBNdWx0aXZhcmlhdGUgRGF0YSBBbmFseXNlcy4gUiBwYWNrYWdlIHZlcnNpb24gMS4wLjUuOTk5LiBEaXNwb27DrXZlbCBlbTogPGh0dHA6Ly93d3cuc3RoZGEuY29tL2VuZ2xpc2gvcnBrZ3MvZmFjdG9leHRyYT4NCg0KTVJPWiwgVC5BLiBUaGUgc2Vuc2l0aXZpdHkgb2YgYW4gZW1waXJpY2FsIG1vZGVsIG9mIG1hcnJpZWQgd29tZW4ncyBob3VycyBvZiB3b3JrIHRvIGVjb25vbWljIGFuZCBzdGF0aXN0aWNhbCBhc3N1bXB0aW9ucy4gRWNvbm9tZXRyaWNhLCB2LjU1LCBwLjc2NS05OTkuIDE5ODcuIERpc3BvbsOtdmVsIGVtOiA8aHR0cDovL3VuaW9uc3RhdHMuZ3N1LmVkdS85MjIwL01yb3pfRWNvbm9tZXRyaWNhX0xhYm9yU3VwcGx5XzE5ODcucGRmPi4NCg==