The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
O pacote oferece quatro medidas com a mesma facilidade. Elas não são intercambiáveis, e nenhuma delas é “a melhor” — cada uma responde a uma pergunta diferente, e a facilidade de trocar uma pela outra é o principal risco de usar este pacote.
Esta vinheta é sobre escolher. A ordem dos avisos abaixo é a ordem em que as pessoas erram.
A tabela abaixo não está digitada aqui: ela é a tabela
reguas, que viaja com o pacote e pode ser consultada de
dentro do R.
| se você quer saber… | use | o que ela mede |
|---|---|---|
| quanto uma posição converte educação em renda | tse_para_isei() |
status socioeconômico, contínua |
| o quanto uma ocupação é socialmente estimada | tse_para_prestigio() |
prestígio, isto é, reputação e não recurso, contínua |
| a relação de emprego: quem contrata, quem é contratado | tse_para_egp() |
classe relacional, categórica |
| a estrutura de classes do dado eleitoral brasileiro | tse_para_classe() |
esquema próprio, que cobre os 17 códigos sem ISCO, categórica |
As outras cinco réguas — ISEI-08, ISEI-BR, prestígio-08, estrato e a partição da classe alta — estão na mesma tabela, com a mesma coluna dizendo quando cada uma é a escolha errada:
Correlacionam-se forte, e é justamente por isso que a diferença passa despercebida:
cw <- crosswalk_tse()
ok <- !is.na(cw$isei88) & !is.na(cw$siops88)
round(cor(cw$isei88[ok], cw$siops88[ok]), 3)
#> [1] 0.944Mas onde discordam, discordam na direção que importa:
cw$dif <- cw$siops88 - cw$isei88
d <- cw[ok, c("rotulo", "isei88", "siops88", "dif")]
rbind(head(d[order(d$dif), ], 3),
head(d[order(-d$dif), ], 3))
#> rotulo isei88 siops88 dif
#> 105 MINISTRO DO PODER JUDICIARIO E MAGISTRADO 90 76 -14
#> 168 MAGISTRADO 90 76 -14
#> 14 VETERINARIO 85 73 -12
#> 107 JARDINEIRO 23 38 15
#> 238 AGRICULTOR 23 38 15
#> 241 PESCADOR 23 38 15O magistrado tem ISEI 90 e prestígio 76: a posição converte credencial em retorno melhor do que a sociedade a estima. O enfermeiro faz o inverso — ISEI 43, prestígio 54.
A consequência é direta. Uma pesquisa sobre “quem tem posição de topo no recrutamento” e outra sobre “quem é socialmente valorizado” vão ordenar as profissões de saúde de formas diferentes, e as duas estarão certas. Escolha antes de rodar, e diga qual escolheu.
NA não é zero, e a ausência é generificadaDezessete dos 275 códigos não designam ocupação alguma — não informada, fora da PEA, vínculo sem função —, e por isso não têm ISEI, prestígio nem EGP:
Isso não é falha de cobertura: é a resposta correta. O erro é tratar esses casos como zero, ou tirá-los da conta sem dizer.
E há uma armadilha específica: o padrão de ausência é
fortemente generificado. Entre as candidaturas ao TSE,
cerca de 15% das mulheres caem na classe
"Fora da PEA por posição" — os códigos 581 e 931 —, contra
pouco mais de 1% dos homens.
Vale nomear a classe, porque a assimetria é dela e só dela: a outra
residual, "Inativo com trajetória", fica em torno de 4% nos
dois sexos. Quem somar as duas dilui justamente o
padrão que importa aqui.
Uma média de ISEI por gênero, com na.rm = TRUE, compara
então duas subpopulações truncadas de formas diferentes, e parte da
“vantagem feminina em status” que aparece pode vir daí. Quanto
exatamente, esta vinheta não mede — o ponto é que a comparação não é
entre iguais, e que a cobertura tem de ser relatada ao lado da
média.
Quem for comparar médias por grupo precisa reportar a cobertura junto:
# sempre, não às vezes
tapply(isei, genero, function(x) c(media = mean(x, na.rm = TRUE),
cobertura = mean(!is.na(x))))isei_retrospectivo() recupera parte disso carregando a
ocupação anterior da própria pessoa — a cobertura feminina sobe cerca de
seis pontos (os valores exatos estão em
?isei_retrospectivo). Não resolve; reduz.
Os mesmos 17 códigos sem ISEI têm classe:
table(cw$classe[is.na(cw$isco88)])
#>
#> Fora da PEA por posição Inativo com trajetória
#> 2 6
#> Militares e segurança pública Não informado
#> 1 4
#> Vínculo público não especificado
#> 4“Inativo com trajetória” e “Vínculo público não especificado” são posições sociais reconhecíveis; elas só não são pontos numa escala de status. Se a sua pergunta comporta uma categoria residual nomeada, o esquema categórico diz mais do que a escala contínua.
table(cw$estrato)
#>
#> Classe alta Classe média
#> 88 70
#> Classes populares Fora da PEA / não informado
#> 101 12
#> Vínculo público não especificado
#> 4“Fora da PEA / não informado” e “Vínculo público não especificado” não são estratos. Somá-los a “Classes populares” — a tentação óbvia, porque parecem “baixo” — inventa uma classe popular que não foi medida. Eles ficam à parte de propósito.
O EGP exige posição no emprego e número de subordinados. O TSE não pergunta o segundo:
tse_para_egp(c(111, 169, 601))
#> Warning: EGP calculado sem `n_supervisionados`. A divisão entre IVa (com
#> empregados) e IVb (sem) fica indeterminada — todos caem em IVb — e V fica
#> subestimada; para publicar prefira n_classes = 7 ou 5; veja ?isco88_para_egp.
#> [1] "I: dirigentes e profissionais superiores"
#> [2] "IVb: conta própria sem empregados"
#> [3] "IVc: proprietário rural"O aviso diz o que falta. Repare no que ele não diz mais: a pequena burguesia aparece, porque o dicionário do TSE marca quem trabalha por conta própria, e o pacote usa essa marca.
c(conta_propria = sum(tse_isco$conta_propria, na.rm = TRUE),
proprietario = sum(tse_isco$proprietario, na.rm = TRUE))
#> conta_propria proprietario
#> 12 10São marcas distintas, e é a primeira que o EGP usa. O agricultor e o
pescador trabalham por conta própria — o SEMPL = 2 que o
esquema exige para chegar a IVc — sem pertencerem à classe proprietária.
O que continua indeterminado é a divisão entre IVa (com empregados) e
IVb (sem).
Para publicar, colapse:
table(tse_para_egp(tse_isco$cod_tse, n_classes = 5, avisar = FALSE),
useNA = "no")
#>
#> I-III: colarinho branco IVab: pequena burguesia
#> 179 5
#> IVc+VIIb: agrícolas V+VI: trabalhadores qualificados
#> 8 38
#> VIIa: trabalhadores não qualificados
#> 28Em cinco classes, IVa e IVb se fundem em IVab e a indeterminação desaparece.
A PNAD Contínua vai mais longe: ela tem posição na ocupação e número
de empregados, o que separa IVa de IVb — a distinção
que aqui ficou indeterminada. Mas nem ela fecha o esquema: falta a
supervisão exercida sobre assalariados, que é o que define V. Nenhuma
das quatro portas do pacote a tem. Veja cod_para_egp().
Entre 2000 e 2002 o TSE reeditou a tabela de ocupações. Sete códigos passaram a designar outra ocupação:
q <- tse_quebra_2002[tse_quebra_2002$tipo == "reutilizado", ]
q[, c("cod_tse", "rotulo_ate_2000", "rotulo_apos_2002")]
#> cod_tse rotulo_ate_2000
#> 5 214 DELEGADO DE POLICIA
#> 6 391 CHEFE INTERMEDIARIO
#> 7 215 OCUPANTE DE CARGO DE DIRECAO E ASSESSORAMENTO SUPERIOR
#> 8 216 OFICIAIS DAS FORCAS ARMADAS E FORCAS AUXILIARES
#> 9 521 GOVERNANTA DE HOTEL, CAMAREIRO, PORTEIRO, COZINHEIRO E GARCOM
#> 13 158 DESENHISTA TÉCNICO
#> 25 211 PROCURADOR E ASSEMELHADOS
#> rotulo_apos_2002
#> 5 ESCULTOR E PINTOR
#> 6 TAQUÍGRAFO E ESTENÓGRAFO
#> 7 ARTISTA PLÁSTICO E ASSEMELHADOS
#> 8 EMBALADOR, EMPACOTADOR E ASSEMELHADOS
#> 9 GOVERNANTA
#> 13 TÉCNICO EM INFORMÁTICA
#> 25 ESTIVADOR, CARREGADOR E ASSEMELHADOSTraduzir uma candidatura de 1998 pelo dicionário atual classifica um ocupante de cargo de direção como artista plástico. Passe o ano e o problema se resolve:
tse_para_classe(c("215", "215"), ano = c(2000, 2020))
#> Warning: 1 candidatura(s) usam código(s) que o TSE REUTILIZOU depois (215): naquele ano designavam outra ocupação, e voltam NA.
#> Veja ?tse_vigencia.
#> [1] NA "Profissionais de nível superior"E o problema maior nem é esse. Mais frequente que a reutilização é a troca de inventário — códigos que sumiram e códigos que nasceram:
Comparando os períodos inteiros, o cadastro perde e ganha códigos:
r <- tse_ocupacao_rotulos
extintos <- setdiff(r$cod_tse[r$ate <= 2000], r$cod_tse[r$ate > 2000])
criados <- setdiff(r$cod_tse[r$de >= 2002], r$cod_tse[r$de < 2002])
c(extintos = length(extintos), criados = length(criados))
#> extintos criados
#> 13 122São 12,4% das candidaturas de 1998–2000 nos treze extintos, e 33,1%
das de 2002 em diante nos cento e vinte e dois criados — entre eles
COMERCIANTE e EMPRESÁRIO. Estas duas
participações são o único par de números desta vinheta que o pacote não
recalcula sozinho: tse_ocupacao_rotulos traz n
por vigência, não por ano, e por isso elas saem da microbase, em
data-raw/11_confere_retrospectivo.R. Uma série que
atravesse 2002 mede “Proprietários e empregadores” com dois vocabulários
incomensuráveis.
Não há um ano seguro para começar depois disso. A troca de inventário não se esgota em 2002:
for (p in list(c(2002, 2004), c(2004, 2006), c(2006, 2008))) {
cat(p[1], "->", p[2], ": ")
print(table(tse_diff_cadastro(p[1], p[2])$mudanca))
}
#> 2002 -> 2004 :
#> criado
#> 20
#> 2004 -> 2006 :
#> criado extinto rotulo
#> 34 3 13
#> 2006 -> 2008 :
#> criado
#> 6De 2002 para 2004 nada se extingue, mas de 2004 para 2006 três
códigos somem e treze trocam de rótulo — e dois dos sete reutilizados só
reaparecem em 2006 e 2008. O caminho honesto não é escolher um ano de
início: é declarar a descontinuidade e passar o
ano, que é o que resolve os reutilizados código a
código.
data.frame(
cod = c("111", "113", "411"),
rotulo = tse_para_rotulo(c("111", "113", "411")),
isei88 = tse_para_isei(c("111", "113", "411")),
isei08 = round(tse_para_isei08(c("111", "113", "411")), 1))
#> cod rotulo isei88 isei08
#> 1 111 MÉDICO 88 88.7
#> 2 113 ENFERMEIRO 43 68.7
#> 3 411 VENDEDOR DE COMÉRCIO VAREJISTA E ATACADISTA 43 29.7O médico fica onde estava; o enfermeiro sobe 26 pontos — e não por
ter mudado de lugar na classificação. A ISCO-88 já o punha entre os
profissionais de nível superior (2230 na ISCO-88), e já o
separava da enfermagem técnica (3231 na ISCO-88). O que ela
fazia era pontuá-lo em 43, abaixo dos escriturários,
que recebem 45. O que mudou foi a escala: o ISEI-08, reestimado por
Ganzeboom sobre o ISSP de 2002-2007, cobre homens e mulheres e o põe em
68,7. O vendedor cai 13 pelo mesmo mecanismo, em sentido contrário, com
a reorganização do subgrupo 52 por cima. Não é erro de
nenhuma das duas réguas: são recortes diferentes. Numa série que troque
de âncora no meio, os dois deslocamentos aparecem como mobilidade que
não houve.
Fique na ISCO-88 para comparar candidaturas entre si
— é onde o pacote está ancorado. Use a ISCO-08 para juntar o dado
eleitoral a fontes que já a usam, e para análise de gênero, onde o
ISEI-08 reavalia para cima as ocupações de cuidado que o escalonamento
de 1992, estimado só sobre homens, subestimava (veja
vignette("validacao")).
Desde a versão 0.5.0 há uma terceira régua,
tse_para_isei_br(), estimada na PNAD Contínua em vez de
importada. O aviso vale para ela igualmente, e com uma razão a mais: as
três não foram estimadas na mesma população nem no mesmo ano. A
brasileira é de um ano só, 2025, e serve para perguntar como o mercado
de trabalho brasileiro ordena as ocupações. Para
comparação internacional, ou para qualquer série longa, ela não
serve.
As duas travas são opt-in e ficam fora do caminho feliz. Chame-as:
checa_cobertura(c(111, 169, 257))
#> cobertura ok: 3 códigos observados, todos no dicionário.
invisible(checa_periodo(c("215", "111"), c(2000, 2020)))
#> Warning: 1 candidatura(s) até 2000 usam código(s) que o TSE reutilizou em 2002
#> (215). Elas estão classificadas pelo cadastro NOVO e portanto erradas; veja
#> ?checa_periodo.checa_cobertura() falha com erro se
aparecer código fora do dicionário. O modo silencioso de errar uma
medida de classe não é classificar mal um caso: é um código novo cair
num rótulo residual sem ninguém perceber.
Um ISEI de 68 sai impresso do mesmo jeito venha de onde vier. Mas “advogado” pressupõe inscrição na OAB, e “empresário” não pressupõe registro nenhum:
crosswalk_tse(c("131", "257"))[, c("cod_tse", "rotulo", "isei88", "componente_alta")]
#> cod_tse rotulo isei88 componente_alta
#> 1 131 ADVOGADO 85 Alta credenciada
#> 2 257 EMPRESARIO 68 Alta proprietáriaOs dois entram na classe alta, e os dois escores saem com a mesma tipografia — mas não com a mesma procedência. Para chegar a 85, é preciso estar inscrito na OAB; para chegar a 68, basta escrever “empresário” no formulário.
E o que esse 68 cobre:
p <- tse_autorrotulo_patrimonio
p[p$cod_tse == "257", c("cargo", "n", "p10", "mediana", "p90")]
#> cargo n p10 mediana p90
#> 25 VEREADOR 80829 16285 185000 996021
#> 26 PREFEITO 10691 129521 812544 5089263
#> 27 DEPUTADO ESTADUAL 5275 31723 410824 3300418
#> 28 DEPUTADO DISTRITAL 289 34773 420496 3867513
#> 29 DEPUTADO FEDERAL 2772 39985 646282 5935381
#> 30 SENADOR 95 352110 4678498 75937286
#> 31 GOVERNADOR 66 225763 3548117 74426844
#> 32 TODOS 100017 19804 229468 1496826Entre os que se declaram empresário, o patrimônio mediano vai de R$ 185 mil (candidatos a vereador) a R$ 4,7 milhões (candidatos a senador), e dentro do código os extremos distam dezenas de vezes:
Não é erro de medida: é uma mistura de duas populações — o microempreendedor e o capitalista — sob um rótulo só. Nenhum escore único está certo para as duas, e por isso trocar o 68 por outro número não resolveria.
Compare com o 131, que é ancorado na OAB. O gradiente por cargo existe nos dois — quem disputa posto mais alto é mais rico —, mas a distância entre os extremos é bem menor onde o rótulo pressupõe registro externo:
a <- p[p$cod_tse %in% c("131", "257") & p$cargo == "TODOS", ]
data.frame(a["rotulo"], razao_p90_p10 = round(a$p90 / a$p10, 1))
#> rotulo razao_p90_p10
#> 8 ADVOGADO 47.8
#> 32 EMPRESARIO 75.6Isso não invalida o código; torna-o menos confiável que os ancorados, de um jeito que a tabela não mostra. A saída é sensibilidade, não conserto:
d <- data.frame(cod = c("131", "257", "111", "265"))
d$isei <- tse_para_isei(d$cod)
d$isei_ancorado <- ifelse(d$cod %in% tse_codigos_autorrotulo, NA, d$isei)
d
#> cod isei isei_ancorado
#> 1 131 85 85
#> 2 257 68 NA
#> 3 111 88 88
#> 4 265 66 66São 13,3% das candidaturas. Rode com as duas colunas e relate as duas: se a sua conclusão só aparece na primeira, ela depende de autodeclaração sem âncora.
NA é resposta, não ausência de resposta — e a ausência
é generificada.ano, ou de uma nota
de rodapé.checa_cobertura() antes de analisar, sempre.tse_codigos_autorrotulo.These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.