Pular para o conteúdo principal

FamilyEngine — nupcialidade e fecundidade

Arquivo: persona_db/engines/family.py

Constantes de calibração​

ConstanteValorSignificado
P_CASAMENTO_ALGUM_DIA0,72fração que se casa ao menos uma vez
P_DIVORCIO0,21taxa de referência de divórcio
P_SEGUNDO_CASAMENTO0,38recasamento após divórcio ou viuvez
SAME_CLASS_PROB0,58homogamia de classe
SAME_EDU_PROB0,55homogamia educacional
SAME_RELIGION_PROB0,61homogamia religiosa

1. Hazard de primeiro casamento​

Curva gaussiana por idade e sexo:

h(idade)=pico⋅exp⁡ ⁣(−12(idade−μσ)2)h(\text{idade}) = \text{pico} \cdot \exp\!\left(-\tfrac{1}{2}\left(\frac{\text{idade} - \mu}{\sigma}\right)^2\right)

Sexoμ\muσ\sigmapico
masculino30,06,00,12
feminino27,05,00,13

first_marriage_age(sex) devolve None para os 28% que nunca se casam e, caso contrário, uma idade N(30;42)\mathcal{N}(30; 4^2) (homens) ou N(27;42)\mathcal{N}(27; 4^2) (mulheres), limitada ao intervalo [16, 55] anos.

2. Homogamia​

engine.spouse_class("C1") # 58% "C1"; senão, classe adjacente
engine.homogamy_age_diff() # |N(2,5; 4,2²)| anos de diferença

O cônjuge nunca "salta" mais de uma posição na ordem A → B1 → B2 → C1 → C2 → D_E.

3. Fecundidade​

Nfilhos∼Poisson(λclasse)N_{\text{filhos}} \sim \text{Poisson}(\lambda_{\text{classe}})

Classesλ\lambda
A, B1, B21,4
C11,9
C2, D_E2,6

Modificadores somam-se a λ\lambda antes do sorteio: doenca, divorcio e superior (ensino superior tipicamente reduz a fecundidade esperada).

engine.children_count("C2", {"superior": -0.6})

4. Divórcio (logístico)​

logit(p)=−1,35+0,8 xsauˊde mental+1,2 xantecedente+0,3 xdif. classe+0,5 xdesemprego−0,4 xfilhos pequenos−0,5 xreligiosidade\text{logit}(p) = -1{,}35 + 0{,}8\,x_{\text{saúde mental}} + 1{,}2\,x_{\text{antecedente}} + 0{,}3\,x_{\text{dif. classe}} + 0{,}5\,x_{\text{desemprego}} - 0{,}4\,x_{\text{filhos pequenos}} - 0{,}5\,x_{\text{religiosidade}}

A probabilidade final é limitada a 0,9. Note o acoplamento explícito com outros motores: antecedentes criminais do cônjuge (CriminalEngine) e transtorno mental (HealthEngine) elevam o risco; filhos pequenos e religiosidade alta protegem.

5. Ciclo de vida afetiva​

engine.union_lifecycle(sex="feminino", class_label="B2")
# {"casou": True, "primeiro_casamento_idade": 26.4, "conjuge_classe": "B2", "divorcio": False, …}

É o atalho usado por gen_08_relacionamentos para montar, de uma vez, namoro → casamento → (eventual) divórcio → recasamento, preservando a ordem cronológica.

6. Mortalidade auxiliar​

death_likelihood(age, sex) é uma aproximação grosseira usada em simulações de parentes ascendentes (que não passam pelo pipeline completo):

FaixaProbabilidade
< 5 anos0,008
5–390,002+0,0002⋅idade0{,}002 + 0{,}0002 \cdot \text{idade}
40–690,02+0,004⋅(idade−40)0{,}02 + 0{,}004 \cdot (\text{idade} - 40)
≥ 700,12+0,03⋅(idade−70)0{,}12 + 0{,}03 \cdot (\text{idade} - 70)

Homens recebem multiplicador 1,15 e o resultado é limitado a 0,99.

Onde isso aparece no schema​

relacionamento, namoro, casamento, divorcio, uniao_estavel, filho, guarda_compartilhada, pensao_alimenticia, familia, membro_familia, parentesco, arvore_genealogica.