Esse tópico é para tratar da resolução do exercício proposto na aula anterior. Trata-se de construir, para uma determinada Unidade da Federação em 2010, os seguintes arranjos domiciliares:

  • Responsável com cônjuge e com filhos (sem qualquer outra categoria).
  • Responsável com cônjuge e sem filhos (sem qualquer outra categoria).
  • Responsável mulher, sem cônjuge e com filhos (sem qualquer outra categoria).
  • Responsável com netos e sem filhos (sem qualquer outra categoria).
  • Responsável com filhos e netos (sem qualquer outra categoria).
  • Responsável com empregado(a) domestico(a) (sem qualquer outra categoria).
  • Outros.

No final, o aluno deverá mostrar uma tabela com total e percentual de domicílios em cada uma das formações acima.

Passo 1: Seleção

O primeiro passo para a atividade é selecionar a Unidade da Federação e fazer o download da documentação e do arquivo de pessoas dos microdados do Censo Demográfico de 2010.

Aqui, selecionamos Roraima (RR) como Unidade da Federação. A partir disso, carregamos o arquivo selecionando os campos necessário para nossa atividade.

RR<-read.fwf(file="C:/Users/letho/OneDrive/PROJETO PROFESSOR/UFJF/NUDES/TREINAMENTO R/PRIMEIRO DIA/DADOS/RR/RR/Amostra_Pessoas_14.txt",
             widths = c(-20,8,16,-9,2,-2,1),
             col.names =c("V0300", # CONTROLE                   
                          "V0010", # PESO AMOSTRAL                  
                          "V0502", # RELAÇÃO DE PARENTESCO OU DE CONVIVÊNCIA COM A PESSOA RESPONSÁVEL PELO DOMICÍLIO
                          "V0602"  # SEXO
                          ))
RR$PESO<-RR$V0010/10000000000000

Sempre é bom recordar que eu salvei o arquivo em uma pasta específica e utilizei o comando setwd() para definir a pasta como padrão. Como o arquivo não possui separador, utilizei o comando read.fwf() e o argumento widths foi aplicado com a série de caracteres, por linha, que será ignorado ou utilizado. Além disso, o campo V0010 - peso amostral - possui 13 casas decimais ainda não consideradas. Por isso, uma nova variável foi criada, RR$PESO, dividindo a variável RR$V0010 por 10 trilhões.

Passo 2: Criação de Variáveis

Nota-se há uma dificuldade em construir as categorias de domicílios proposta, considerando que o dado está disponível em cada linha, ou seja, não existe uma linha que contem todos os dados da formação do domicílio.

A estratégia é construir variáveis que nos digam qual a formação de cada domicílio. Veja o nosso “truque”! Primeiro, construímos as variáveis dos indivíduos que ocupam as posições de interesse.

RR$Responsavel<-ifelse(RR$V0502==1,1,0) # Responsável
RR$ResponsavelM<-ifelse(RR$V0502==1 & RR$V0602==2,1,0) # Responsável Mulher
RR$Conjuge<-ifelse(RR$V0502==2 | RR$V0502==3,1,0) # Conjuge
RR$Filho<-ifelse(RR$V0502%in%c(4,5,6),1,0) # Filho ou enteado
RR$Neto<-ifelse(RR$V0502==10,1,0) # Neto
RR$Empregado<-ifelse(RR$V0502==18,1,0) #Empregado(a)
RR$Outro<-ifelse(!RR$V0502%in%c(1,2,3,4,5,6,10,18),1,0) # Outro membro do domicílio. Reparem na exclamação (!)

Ao visualiar os dados - comando View(RR) - pode-se perceber que cada indivíduo possui sua classificação como 1 ou 0 em cada coluna criada, de acordo com a variável de relação com o responsável. Agora, vamos criar uma forma de que todos do mesmo domicílio compartilhem as informações. Para isso, usaremos um looping - comando for()- para que cada domicílio tenha o valor 1 em cada tipo de membro do domicílio, caso exista.

controle<-unique(RR$V0300)

for(i in controle){
  RR$Responsavel[RR$V0300==i]<-max(RR$Responsavel[RR$V0300==i],na.rm = TRUE)
  RR$ResponsavelM[RR$V0300==i]<-max(RR$ResponsavelM[RR$V0300==i],na.rm = TRUE)
  RR$Conjuge[RR$V0300==i]<-max(RR$Conjuge[RR$V0300==i],na.rm = TRUE)
  RR$Filho[RR$V0300==i]<-max(RR$Filho[RR$V0300==i],na.rm = TRUE)
  RR$Neto[RR$V0300==i]<-max(RR$Neto[RR$V0300==i],na.rm = TRUE)
  RR$Empregado[RR$V0300==i]<-max(RR$Empregado[RR$V0300==i],na.rm = TRUE)
  RR$Outro[RR$V0300==i]<-max(RR$Outro[RR$V0300==i],na.rm = TRUE)
}

A variável controle - RR$V0300 é única para cada domicílio. Assim sendo, solicitamos ao R que, para cada domicílio, atribua o valor máximo da variável para todos os indivíduos que coresidem. Em outros termos, todos aqueles que partilham o mesmo número de controle terão o valor máximo da variável, que só poderá ser 1 ou 0.

Com isso, podemos passar para a construção da nossa variável de Tipo de Família.

Passo 3: Tipo de Família

Nosso primeiro passo será recordar que queremos o percentual de domicílios. Isso exclui indivíduos em domicílios coletivos, por exemplo. Entretanto, sabemos que os domicílios particulares possuem, ao menos, o responsável. Assim sendo, iremos criar um novo objeto com apenas o responsável que, agora, possui as informações de quem reside com ele.

RRdom<-subset(RR,RR$V0502==1)

O próximo passo é utilizar o comando ifelse() para discriminar a combinação de participantes que caracteriza cada uma das formações domiciliares previamente definidas.

RRdom$TIPOFAM<-ifelse(RRdom$Conjuge==1 & 
                        RRdom$Filho==0 & 
                        RRdom$Neto==0 & 
                        RRdom$Empregado==0 & 
                        RRdom$Outro==0,
                      "Responsável com cônjuge e sem filhos",
                      ifelse(RRdom$ResponsavelM==1 &
                               RRdom$Conjuge==0 & 
                               RRdom$Filho==1 & 
                               RRdom$Neto==0 & 
                               RRdom$Empregado==0 & 
                               RRdom$Outro==0,
                             "Responsável mulher, sem cônjuge e com filhos",
                             ifelse(RRdom$Conjuge==0 & 
                                      RRdom$Filho==0 & 
                                      RRdom$Neto==1 & 
                                      RRdom$Empregado==0 & 
                                      RRdom$Outro==0,
                                    "Responsável com netos e sem filhos",
                                    ifelse(RRdom$Conjuge==0 & 
                                             RRdom$Filho==1 & 
                                             RRdom$Neto==1 & 
                                             RRdom$Empregado==0 & 
                                             RRdom$Outro==0,
                                           "Responsável com filhos e netos",
                                           ifelse(RRdom$Conjuge==0 & 
                                                    RRdom$Filho==0 & 
                                                    RRdom$Neto==0 & 
                                                    RRdom$Empregado==1 & 
                                                    RRdom$Outro==0,
                                                  "Responsável com empregado(a) domestico(a)",
                                                  ifelse(RRdom$Conjuge==1 & 
                                                                  RRdom$Filho==1 & 
                                                                  RRdom$Neto==0 & 
                                                                  RRdom$Empregado==0 & 
                                                                  RRdom$Outro==0,
                                                                "Responsável com cônjuge e com filhos",
                                                                "Outro arranjo domiciliar"))))))

Lembrem-se de que os arranjos devem discriminar aqueles que não devem fazer parte de cada uma das categorias, por exemplo a categoria “Outro”. Isso está descrito no enuncidado, quando descreve-se, para todos os tipos de arranjo a observação “sem qualquer outra categoria”.

Passo Final: A Tabela

A tabela é muito simples, depois de concluídas essas etapas. Considerando que o peso amostral é atribuído para o domicílio, o responsável irá carregado para o novo objeto criado. Nesse sentido, iremos utilizar a função xtabs() e transformar o objeto resultante em um data.frame.

xtabs(RRdom$PESO ~ RRdom$TIPOFAM)
## RRdom$TIPOFAM
##                     Outro arranjo domiciliar 
##                                  45553.80188 
##         Responsável com cônjuge e com filhos 
##                                  46441.36704 
##         Responsável com cônjuge e sem filhos 
##                                  11035.62179 
##    Responsável com empregado(a) domestico(a) 
##                                     82.26217 
##               Responsável com filhos e netos 
##                                   3056.14976 
##           Responsável com netos e sem filhos 
##                                    727.76748 
## Responsável mulher, sem cônjuge e com filhos 
##                                   9479.87236
dados<-data.frame(xtabs(RRdom$PESO ~ RRdom$TIPOFAM))
dados$perc<-round(100*dados$Freq/sum(dados$Freq),2)
dados$Freq<-round(as.numeric(dados$Freq),0)

dados
##                                  RRdom.TIPOFAM  Freq  perc
## 1                     Outro arranjo domiciliar 45554 39.14
## 2         Responsável com cônjuge e com filhos 46441 39.91
## 3         Responsável com cônjuge e sem filhos 11036  9.48
## 4    Responsável com empregado(a) domestico(a)    82  0.07
## 5               Responsável com filhos e netos  3056  2.63
## 6           Responsável com netos e sem filhos   728  0.63
## 7 Responsável mulher, sem cônjuge e com filhos  9480  8.15

Veja que, após a criação da tabela, o campo de frequência foi utilizado para a criação do valor percentual. Após essa etapa, optou-se por arredondar em valores inteiros a frequencia, a partir do comando round().

Podemos, também, ordenar os resultados com o comando order(). Ele ordena um vetor, segundo seus valores, segundo o argumento decreasing que, por padrão, é preenchido com FALSE. Se utilizarmos na tabela para ordenar as linhas, toda a tabela será reordenada.

dados[order(dados$perc, decreasing = TRUE),]
##                                  RRdom.TIPOFAM  Freq  perc
## 2         Responsável com cônjuge e com filhos 46441 39.91
## 1                     Outro arranjo domiciliar 45554 39.14
## 3         Responsável com cônjuge e sem filhos 11036  9.48
## 7 Responsável mulher, sem cônjuge e com filhos  9480  8.15
## 5               Responsável com filhos e netos  3056  2.63
## 6           Responsável com netos e sem filhos   728  0.63
## 4    Responsável com empregado(a) domestico(a)    82  0.07

Assim, a tabela está agora ordenada do maior valor para o menor. Com isso, chegamos ao final do exercício!