Closed dhersz closed 2 years ago
Isso foi um erro de uma pequena correção que estava sendo feita quando pop_total == 0 & soma(pop por cores) > 0. Quando esse caso acontecia, eu estava zerando o pop_total, mas acabei esquecendo de zerar o pop_homens e pop_mulheres.
Essa correção serve pra "esconder" um problema maior: o que fazer quando uma grande tem pop > 0 mas não tem nenhum setor inserido (ou quase não tem) nela que tenha população por cor ou por idade?
Exemplo: a grade abaixo tem população (pela grade) de 6 pessoas. As únicas interseções de setores com alguma população são os dois pedacinhos no superior, do esquerdo e do centro. Quando faz a interpolação, a área/população de interseção dessas áreas é tão pequena que essa grade acaba não pegando nenhuma população por cor/idade. Nesse caso, por exemplo, a grade vai "ter" 0.11 pop_branca de um setor e 0.03 pop_branca do outro. Então a grade vai ter no total 0.14 pop_branca, que quando arredonda dá 0.
Por fim, essa grade vai ficar com pop_total = 3 e soma(pop por cor) = 0. Esse tipo de situação vai acontecer em áreas mais remotas.
Talvez seja possível adotar uma solução somente para esses casos mais remotos, como, por exemplo, em vez de pegar a interseção área/população, adotar 1 ou 0. Tipo, nesse caso ai, adotar que a proporção por cor dentro dessa grade é a proporção média que foi observada nos setores que tiveram alguma interseção. Ou trabalhar algo em cima do arredondamento.
O jeito que tá sendo feito hoje (pra ajudar até eu mesmo entender): 1) O pedacinho superior da esquerda concentra 2% da população da grade, que dá 0.13 pessoas; 2) A proporção de população branca que tem no setor que está no pedacinho é de 89%; 3) A quantidade de pessoas brancas que tem no pedacinho é 0.13 * 0.89 = 0.11 pessoas brancas
A idéia de usar a proporção da população por cor dos setores foi justamente pra garantir que os totais por cor/idade sejam baseados na população da grande. Só não estávamos contando com essa interseção com setores sem população por cor/idade (ou seja, proporções zeradas).
isso aqui foi resolvido?
Trazendo junto a issue https://github.com/ipeaGIT/acesso_oport/issues/103#issuecomment-1048835432
Dando uma dimensao do problema:
Solução 1: Nesse caso, acho que vale a pena a gente considerar a pop_total na grade como verdadeira, e aplicar a proporcao de pop cor e idade que tem os hex vizinhos dela. O problema desas proporção eh que adicionaria mais uma camada de erro arredondamento. Por ex, se o pop_total for 2, e a proporcao do vizinho for 25% de cada cor, ficaríamos com 0.5 habitantes para cada grupo de cor. Quando arredondasse, cada grupo ia ficar com 1 habitante, totalizando 4, que eh o dobro do pop_total. Solução 2: distribuir o pop_total igualmente ou aleatoriamente por cada classe de cor/idade. Se for distribuir igualmente, vai dar problema quando o pop_total for menor que 7, que eh o total de classes Solução 3, indesejada: zerar o pop_total. Se fossemos zerar o pop_total (grade), "perderíamos" cerca de 2600 habitantes, o que da 0.044% da população total do rio. Pra Fortaleza, ta dando 0.006%
Uma forma de minimizar os erros de arredondamento eh so fazer o arredondamento da pop na segunda etapa, quando passar da grade -> hex. Ai a base das grade ficaria com a populacao quebrada
Kaue, esse problema foi resolvido agora q a gente voltou a usar a interseção entre centroide da grade e os hexagonos?
Esses testes indicam q ta tudo OK
> hex_junto[pop_total == 0 & renda_total > 0]
Empty data.table (0 rows and 40 cols): id_hex,h3_resolution,geometry,sigla_muni,ano,cor_branca...
> hex_junto[pop_total == 0 & (quintil != 0)]
Empty data.table (0 rows and 40 cols): id_hex,h3_resolution,geometry,sigla_muni,ano,cor_branca...
> hex_junto[pop_total == 0 & (decil != 0)]
Empty data.table (0 rows and 40 cols): id_hex,h3_resolution,geometry,sigla_muni,ano,cor_branca...
> hex_junto[pop_total > 0 & renda_total == 0]
Empty data.table (0 rows and 40 cols): id_hex,h3_resolution,geometry,sigla_muni,ano,cor_branca...
> hex_junto[pop_total > 0 & idade_0a5 + idade_6a14 + idade_15a18 + idade_19a24 + idade_25a39 + idade_40a69 + idade_70 == 0]
Empty data.table (0 rows and 40 cols): id_hex,h3_resolution,geometry,sigla_muni,ano,cor_branca...
> hex_junto[pop_total > 0 & cor_branca + cor_amarela + cor_indigena + cor_negra == 0]
Empty data.table (0 rows and 40 cols): id_hex,h3_resolution,geometry,sigla_muni,ano,cor_branca...
Não sei se esse problema surgiu agora com o novo processo de agregação ou já existia:
Created on 2022-02-01 by the reprex package (v2.0.1)