Estimar a idade a partir do primeiro nome

Estou fazendo uma análise com um milhão de obervações e acho, apesar de improvável, que idade pode ser confounding de uma relação entre duas outras variáveis que estou interessado. A questão é que meu banco de dados não tem idade, mas tem o primeiro nome.

Não estou interessado na idade exata e sim quem é mais velho que quem no banco (uma escala da idade). Pensei em usar a distribuição dos nomes por nascimentos (por 100 mil) do IBGE (a partir de 1970 até 2000, já que alguém que nasceu antes de 1970 e depois de 2000 é improvável estar na base) para estimar a idade mais provável de cada um dos nomes.

O número do IBGE seria ponderarado pela quantidade de pessoas vivas em cada faixa etária, assim se nasceram 100 José em 1970, mas morreram 20 (supondo que 20% da população nascida em 1970 está morta) e nasceram 90 em 2000 e morreram 1, José seria um nome de 2000 (89>80) ainda que nasceram menos José em 2000 que em 1970.

Duas perguntas:

  1. Isso é totalmente absurdo?
  2. Se não, o IBGE tem esses dados em algum lugar? (frequências dos nomes por nascimentos por censo)
2 Curtidas

Olá @danielmariani
Acho que já chegou na solução na API pelo que vi você comentando. Também conhecia pela API, em Python. Perguntei em um grupo de dados abertos também, mas ainda não responderam. No caso trocando ‘carlos’ pelo nome do seu interesse

import requests
url = "https://servicodados.ibge.gov.br/api/v1/censos/nomes/faixa?nome=carlos"
payload = {}
headers= {}
response = requests.request("GET", url, headers=headers, data = payload)
print(response.text.encode('utf8'))

{
“nome”: “CARLOS”,
“freq”: 4659,
“regiao”: 0,
“sexo”: “”,
“faixa”: “<1930”
},
{
“nome”: “CARLOS”,
“freq”: 15620,
“regiao”: 0,
“sexo”: “”,
“faixa”: “<1940”
},

1 Curtida

Valeu Reinaldo. Sim, consegui chegar na API. A solução em R ficou assim

freq_names_by_census <- function(name){
  json <- name %>% 
    toupper() %>% 
    iconv(to="ASCII//TRANSLIT") %>% 
    paste0("https://servicodados.ibge.gov.br/api/v1/censos/nomes/faixa?nome=", .) %>% 
    fromJSON() 
  if(!length(json)) return(NULL)
  df <- json %>% 
    select(freq, faixa) %>% 
    rename(censo = faixa) %>%
    mutate_at(vars(censo), gsub, pattern = "<", replacement = "") %>% 
    mutate_all(as.numeric)
  return(df)
}

Confundi o nome da sua requisição com o seu :confused: corrigido na edição :slightly_smiling_face:

1 Curtida