TBFPC#

class pymc_marketing.mmm.causal.TBFPC(target, *, target_edge_rule='any', bf_thresh=1.0, forbidden_edges=None, required_edges=None)[fuente]#

Algoritmo de descubrimiento causal del Factor Bayesiano de primer objetivo PC (TBF-PC).

Este algoritmo es una variante orientada a objetivos del algoritmo de Peter–Clark (PC), utilizando factores de Bayes (a través de la aproximación ΔBIC) como la prueba de independencia condicional.

Para cada prueba de independencia condicional de la forma

\[H_0 : Y \perp X \mid S \quad \text{vs.} \quad H_1 : Y \not\!\perp X \mid S\]

comparamos dos modelos lineales:

\[\begin{split}M_0 : Y \sim S \\ M_1 : Y \sim S + X\end{split}\]

donde \(S\) es un conjunto de variables de condicionamiento.

El Criterio de Información Bayesiano (BIC) se define como

\[\mathrm{BIC}(M) = n \log\!\left(\frac{\mathrm{RSS}}{n}\right) + k \log(n),\]

con la suma residual de cuadrados \(\mathrm{RSS}\), tamaño de muestra \(n\), y número de parámetros \(k\).

El factor de Bayes se aproxima a

\[\log \mathrm{BF}_{10} \approx -\tfrac{1}{2} \left[ \mathrm{BIC}(M_1) - \mathrm{BIC}(M_0) \right].\]

La independencia se declara si \(\mathrm{BF}_{10} < \tau\), donde \(\tau\) se establece a través del parámetro bf_thresh.

Referencias

  • Spirtes, Glymour, Scheines (2000). Causación, Predicción y Búsqueda. MIT Press. [algoritmo PC]

  • Spirtes y Glymour (1991). «Un algoritmo para la recuperación rápida de gráficos causales dispersos.»

  • Kass, R. y Raftery, A. (1995). «Factores de Bayes.»

Ejemplos

1. Uso básico con conjunto de condiciones completo

import numpy as np, pandas as pd

rng = np.random.default_rng(7)
n = 2000
C = rng.gamma(2,1,n)
A = 0.7*C + rng.gamma(2,1,n)
D = 0.5*C + rng.gamma(2,1,n)
B = 0.8*A + rng.gamma(2,1,n)
Y = 0.9*B + 0.6*D + 0.7*C + rng.gamma(2,1,n)

df = pd.DataFrame({"A":A,"B":B,"C":C,"D":D,"Y":Y})
df = (df - df.mean())/df.std()  # recommended scaling

model = TBFPC(target="Y", target_edge_rule="fullS")
model.fit(df, drivers=["A","B","C","D"])

print(model.get_directed_edges())
print(model.get_undirected_edges())
print(model.to_digraph())

2. Uso de bordes prohibidos

Puede especificar los bordes que no deben ser probados o incluidos (conocimiento previo sobre el dominio).

model = TBFPC(
    target="Y",
    target_edge_rule="any",
    forbidden_edges=[("A","C")]  # forbid A--C
)
model.fit(df, drivers=["A","B","C","D"])
print(model.to_digraph())

3. Gobierno conservador

Mantiene los bordes del conductor → objetivo si cualquier conjunto de condicionamiento muestra dependencia.

model = TBFPC(target="Y", target_edge_rule="conservative")
model.fit(df, drivers=["A","B","C","D"])
print(model.to_digraph())

Métodos

TBFPC.__init__(objetivo, *[, ...])

Cree un nuevo modelo de descubrimiento causal TBFPC.

TBFPC.fit(df, controladores)

Ajuste el procedimiento TBFPC al dataframe proporcionado.

TBFPC.get_all_cdags_from_cpdag([dot_cpdag])

Enumere todas las orientaciones acíclicas (extensiones consistentes) del CPDAG.

TBFPC.get_directed_edges()

Devolver los bordes dirigidos aprendidos por el algoritmo.

TBFPC.get_test_results(x, y)

Devuelva los diagnósticos ΔBIC para el par no ordenado (x, y).

TBFPC.get_undirected_edges()

Devolver los bordes no dirigidos que quedan después de la orientación.

TBFPC.summary()

Renderizar un resumen de texto del gráfico aprendido y el conteo de pruebas.

TBFPC.to_digraph()

Devuelva el grafo aprendido codificado en formato DOT.