genderBR: predizendo sexo a partir de nomes próprios

No R e usando dados do Censo de 2010

Várias questões importantes nas Ciências Sociais estão ligadas ao sexo das pessoas. Se quisermos saber se mulheres recebem menores salários, se estão sub-representadas na política, se sofrem mais com as violências urbana e doméstica, entre outros, precisamos identificar o sexo das pessoas que investigamos. Entretanto, esse dado nem sempre é fácil de obter: vários bancos usados para responder às perguntas acima não contêm informações sobre o sexo das pessoas estudadas – embora alguns destes contenham outras que podem ser usada para inferir seus sexos.

O pacote genderBR para o R, que acabou de ser publicado no CRAN, serve para isso: ele usa uma informação relativamente simples de obter – nome próprio – e, a partir dela, prediz o sexo de uma pessoa com dados do Censo de 2010 realizado pelo IBGE. Se o nome João, por exemplo, é usado majoritariamente por individuos do sexo masculino no Brasil, temos alguma confiança em dizer que outro brasileiro qualquer com o mesmo nome provavelmente também seja do sexo masculino. Entre outras vantagens, este método é replicável, baseado em dados públicos e, o que é mais importante, muito mais rápido do que qualquer classificação manual de sexos a partir de nomes próprios. O passo-a-passo a seguir exemplifica isso.

Como instalar

Como o pacote genderBR está no CRAN e, portanto, pode ser instalado diretamente pelo R com:

install.packages("genderBR")

Ou, para versões beta do pacote, ele pode ser instalado com devtools:

if(!require("devtools")) install.packages("devtools")
devtools::install_github("meirelesff/genderBR")

Feito isso, para usar o pacote, basta carregá-lo:

library(genderBR)

Como usar

O pacote genderBR possui uma função principal, get_gender, que prediz o sexo de uma pessoa baseado no seu primeiro nome (com ou sem letras maiúsculas, acentos e sobrenomes), como no exemplo abaixo:

get_gender("maria")
## [1] "Female"
get_gender("MARIA")
## [1] "Female"
get_gender("Maria da Silva Conceição")
## [1] "Female"

A função funciona igualmente com um vetor de nomes:

get_gender(c("isabel", "marta", "silvia", "rodrigo", "roberto", "thiago"))
## [1] "Female" "Female" "Female" "Male"   "Male"   "Male"

Resumidamente, esta chamada envia uma requisição GET a API do Censo 2010 (que pode demorar a responder), calcula a proporção de mulheres que possuem o nome passado e, então, faz uma predição baseado num ponto de corte: por padrão, se mais de 0.9 das pessoas com o nome passado são do sexo feminino, segundo o Censo de 2010, a função prediz o sexo deste nome como Female; se mais 0.9 das pessoas com esse nome forem do sexo masculino, a predição será Male; por fim, nomes com proporções menores que 0.9 ou não encontrados na base do IBGE são classificados como missing (e.g., NA) Exemplos:

# Male
get_gender("joao")
## [1] "Male"
# NA
get_gender("muriel")
## [1] NA
# NA
get_gender("ashdfjg")
## [1] NA

É possível modificar a proporção usada para classificar corretamente um nome. Por exemplo, podemos considerar como do sexo masculino apenas pessoas cujo primeiro nome seja usado por 0.95 (95%) de pessoas identificadas como do sexo masculino pelo IBGE:

get_gender("augusto", threshold = 0.95)
## [1] "Male"

Além deste resulto básico, a função get_gender também permite saber a proporção de mulheres que usam um dado primeiro nome no país – com isto, é possível usar qualquer outra medida para predizer o sexo de uma pessoa. No exemplo abaixo, percebe-se que a probabilidade de alguém com o nome Muriel ser do sexo feminino no universo de entrevistados do Censo de 2010 é igual a 43%.

get_gender("muriel", prob = TRUE)
## [1] 0.4303515

Por fim, podemos obter os resultados por estado – partido da ideia de que o uso de um dado nome próprio entre sexos pode variar de região para região. Um bom exemplo é o do político goiano Iris Rezende, casado com sua xará Iris de Araújo.

# Probabilidade do nome Iris ser usado por uma mulher em SP
get_gender("iris", prob = TRUE, state = "SP")
## [1] 0.9491027
# Probabilidade do nome Iris ser usado por uma mulher em GO
get_gender("iris", prob = TRUE, state = "GO")
## [1] 0.5

Como o exemplo acima mostra, o nome Iris é muito mais comum para pessoas do sexo masculino em Goiás do que em São Paulo.

Outras funções

Além da função get_gender, o pacote genderBR possui outras duas funções que podem ser úteis em algumas situações. A primeira delas, get_states, serve para retornar um data.frame com o nome, a sigla e o código do IBGE de todos os estados brasileiros, o que pode ajudar nas consultas à função get_gender.

Já a segunda função, map_gender, serve para mapear os usos de um nome qualquer entre todos os estados do Brasil:

map_gender("mario", gender = "f")
## # A tibble: 19 x 6
##                   nome    uf  freq populacao  sexo  prop
##  *               <chr> <int> <int>     <int> <chr> <dbl>
##  1            Amazonas    13    60   3483985     f  1.72
##  2               Piauí    22    30   3118360     f  0.96
##  3      Rio de Janeiro    33   140  15989929     f  0.88
##  4 Rio Grande do Norte    24    23   3168027     f  0.73
##  5           São Paulo    35   293  41262199     f  0.71
##  6               Ceará    23    56   8452381     f  0.66
##  7      Santa Catarina    42    41   6248436     f  0.66
##  8         Mato Grosso    51    19   3035122     f  0.63
##  9          Pernambuco    26    54   8796448     f  0.61
## 10            Maranhão    21    40   6574789     f  0.61
## 11                Pará    15    46   7581051     f  0.61
## 12      Espírito Santo    32    21   3514952     f  0.60
## 13               Bahia    29    84  14016906     f  0.60
## 14             Alagoas    27    17   3120494     f  0.54
## 15             Paraíba    25    20   3766528     f  0.53
## 16              Paraná    41    55  10444526     f  0.53
## 17   Rio Grande do Sul    43    48  10693929     f  0.45
## 18        Minas Gerais    31    79  19597330     f  0.40
## 19               Goiás    52    20   6003788     f  0.33

Nela, basta passar as letras f, para Female, ou m, para Male, e a função retorna o total de pessoas em cada estado com o nome fornecido, além do total de usos daquele nome no sexo indicado.

Avaliando as predições

O método é confiável? Depois de ter feitos alguns testes, a precisão média do método sempre foi maior que 95%, sem sinal de viés. Aqui, vou exemplificar isso com um exemplo simples: os dados de candidaturas do TSE (extraídos com o electionsBR).

Basicamente, candidatos a cargos eletivos no Brasil reportam seus sexos no formulário de registro de suas candidaturas, informação que, posteriormente, é disponibilizada pelo TSE. Apesar de possíveis erros de mensuração – afinal, estes dados são auto-reportados e, como tal, estão sujeitos até mesmo a erros de imputação –, o genderBR faz um bom trabalho de classificar o sexo dos 104122 candidatos a cargos federais nas cinco eleições entre 1998 e 2014, como mostra a tabela abaixo.

Sexo declarado Sexo predito N %
Male Female 410 0.5%
Male Male 79485 95.5%
Male Unissex 1121 1.3%
Male Unknown 2201 2.6%
Female Female 19796 94.7%
Female Male 106 0.5%
Female Unissex 348 1.7%
Female Unknown 655 3.1%

Especificamente, o método classificou 99.5% das observações corretamente (desconsiderando os missings, que são mostrados aqui como Unissex, quando a proporção de usos do nome pelo sexo feminino ou masculino é menor que 0.9, ou Unknown, quando o nome não foi encontrado na base do TSE), e apenas 2.74% ficaram como missing. No geral, portanto, o método funciona.

Avatar
Fernando Meireles
Postdoc in Political Science

Postdoctoral Fellow in Political Science at IESP-UERJ. Studying comparative politics and political methodology.