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:
No final, o aluno deverá mostrar uma tabela com total e percentual de domicílios em cada uma das formações acima.
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.
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.
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”.
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!