SocioeconomicEngine — classe, escolaridade e renda
Arquivo: persona_db/engines/socio.py
1. Classe social e mobilidade intergeracional
As seis classes do critério ABEP (A, B1, B2, C1, C2, D_E) têm distribuição marginal:
Quando a classe dos pais é conhecida, o sorteio usa a linha correspondente da matriz estocástica , com diagonal dominante (persistência intergeracional):
| Pais ↓ / Filho → | A | B1 | B2 | C1 | C2 | D_E |
|---|---|---|---|---|---|---|
| A | 0,62 | 0,20 | 0,10 | 0,05 | 0,02 | 0,01 |
| B1 | 0,08 | 0,55 | 0,22 | 0,10 | 0,03 | 0,02 |
| B2 | 0,03 | 0,10 | 0,58 | 0,20 | 0,06 | 0,03 |
| C1 | 0,01 | 0,04 | 0,12 | 0,56 | 0,18 | 0,09 |
| C2 | 0,01 | 0,02 | 0,06 | 0,16 | 0,57 | 0,18 |
| D_E | 0,01 | 0,01 | 0,04 | 0,10 | 0,24 | 0,60 |
SocioeconomicEngine.sample_class(rng, parent_class="C2") # → "C2" em ~57% dos casos
SocioeconomicEngine.sample_class(rng, parent_class=None) # usa a marginal π
Toda linha soma exatamente 1 — há um teste unitário dedicado a isso.
2. Escolaridade (logit multinomial)
A utilidade latente de cada nível é:
undefined