Estoy luchando por implementar una regresión lineal en pymc3 con una probabilidad personalizada.
Anteriormente publiqué esta pregunta en CrossValidated y se recomendó publicar aquí ya que la pregunta está más orientada al código (publicación cerrada aquí )
Suponga que tiene dos variables independientes x1, x2 y una variable objetivo y, así como una variable indicadora llamada delta.
Fragmento de ejemplo de datos observados:
x_1 x_2 𝛿 observed_target 10 1 0 100 20 2 0 50 5 -1 1 200 10 -2 1 100¿Alguien sabe cómo se puede implementar esto en pymc3? Como punto de partida...
model = pm.Model() with model as ttf_model: intercept = pm.Normal('param_intercept', mu=0, sd=5) beta_0 = pm.Normal('param_x1', mu=0, sd=5) beta_1 = pm.Normal('param_x2', mu=0, sd=5) std = pm.HalfNormal('param_std', beta = 0.5) x_1 = pm.Data('var_x1', df['x1']) x_2 = pm.Data('var_x2', df['x2']) mu = (intercept + beta_0*x_0 + beta_1*x_1)En caso de que esto sea útil, al leer los documentos, parece que algo similar podría funcionar, pero no he podido probarlo y fue demasiado largo para incluir un comentario.
model = pm.Model() with model as ttf_model: intercept = pm.Normal('param_intercept', mu=0, sd=5) beta_0 = pm.Normal('param_x1', mu=0, sd=5) beta_1 = pm.Normal('param_x2', mu=0, sd=5) std = pm.HalfNormal('param_std', beta = 0.5) x_1 = pm.Data('var_x1', df['x1']) x_2 = pm.Data('var_x2', df['x2']) delta = pm.Data('delta', df['delta']) # Or whatever this column is target = pm.Data('target', df['observed_target']) ypred = (intercept + beta_0*x_0 + beta_1*x_1) # Intermediate result target_ge_ypred = pm.math.ge(target, ypred) # Compare target to intermediate result zero = pm.math.constant(0) # Use this if delta==1 and target<ypred # EDIT: Check delta alternate = pm.math.switch(target_ge_ypred, ypred, zero) # Alternative result mu = pm.math.switch(pm.math.eq(delta, zero), ypred, alternate) # Actual result wanted?