Opened 15 years ago
Closed 15 years ago
#814 closed defect (fixed)
Unexpected results estimating Probit with BSR
Reported by: | Owned by: | Víctor de Buen Remiro | |
---|---|---|---|
Priority: | highest | Milestone: | BSR API |
Component: | Math | Version: | |
Severity: | critical | Keywords: | |
Cc: |
Description
Da la impresión que al intentar estimar un modelo Probit con BSR no se hace otra cosa que estimarlo como si fuera una regresión lineal.
Es posible que no se esté definiendo bien el Probit, o que de algún modo, algo no esté funcionando como debe.
Adjunto un ejemplo donde se estima un modelo probit con un output aleatorio y con dos inputs: una costante y el mismo output.
En el ejemplo se soluciona mediante Probit, LinReg y la construcción de los ASCII que devuelve MMS.
Al comparar los resultados de los parámetros, se ve qué BSR nos devuelve algo similar al caso de una regresión lineal.
¿Está mal definido el modelo en los ASCII de BSR?
Attachments (1)
Change History (6)
Changed 15 years ago by
Attachment: | AutoProbit.zip added |
---|
comment:1 Changed 15 years ago by
comment:2 Changed 15 years ago by
Yo no veo el parecido por ningún lado.
Vamos a ver, no seamos tercos, esto tiene que tener una solución sencilla.
La definición del modelo probit propuesto es la siguiente:
Probit(output) = beta1 * output + beta2 * constant
donde los residuos del modelo serían infinitos, ya que al ser el output binomial
el Probit(output) son infinitos y menos infinitos.
El modelo puede reescribirse como:
output = InverseProbit(beta1 * output + beta2 * constant) + noise
donde la función InverseProbit coincide con la DistNormal de TOL.
definimos el filtro y el prefiltro como:
filter = InverseProbit(beta1 * output + beta2 * constant)
prefilter = beta1 * output + beta2 * constant.
Veamos un ejemplo:
Sean:
output = (1, 0, 0, 1)
constant = (1, 1, 1, 1)
así:
Probit(output) = (Inf, -Inf, -Inf, Inf)
Solucíon de BSR
Admitamos que los parámetros que salen (como dice BSR) son:
beta1 = 1
beta2 = 0
Así pues:
prefilter = (1, 0, 0, 1)
filter = (0.85, 0.5, 0.84, 0.5)
y el noise sería:
noise = (0.15, 0.5, 0.5, 0.15)
Solucíon de Probit
Admitamos ahora el resultado del MLE Probit:
beta1 = 2K
beta2 = -K
Así pues:
prefilter = (2K, 0, 0, 2K) - (K, K, K, K) = (K, -K, -K, K)
filter ~ (1, 1, 1, 1) con K>>0
y el noise sería:
noise ~ (0, 0, 0, 0)
comment:3 Changed 15 years ago by
Todavía no entiendo muy bien tu razonamiento pero sí veo más de un problema en el código del ejemplo.
Para empezar, esto no simula un modelo probit sino un modelo cualitativo con distribución uniforme, que no sé si tendrá nomre propio pero no es probit:
Matrix Z = Rand(100,1,0,0); Matrix constant = Z+1; Matrix output = IfMat(GT(Rand(100,1,0,1),Z+0.7),Z+1,Z+0);
Para no repetir aqui las fórmulas del modelo probit me remito a wikipedia. Siguiendo el esquema de ingeniería inversa podemos crear un modelo probit de realidad virtual con este código TOL
//Number of rows Real m = 100; Matrix zero = Rand(m,1,0,0); Matrix one = zero+1; //Inputs Matrix constant = one; Matrix X = constant; //Number of input variables Real n = Columns(X); //Simulated parameters Matrix b = Rand(n,1,2,2); //Linear filter Matrix F = X*b; //Simulated dtandard independent normal residuals Matrix e = Gaussian(m,1,0,1); //Latent linear output Matrix Y.lat = F+e; //Simulated probit model Matrix output = IfMat(GT(Y.lat,zero),one,zero);
Luego haces la estimación máximo-verosímil de un modelo en el que el output forma parte del input,
Set res1 = Probit(output, output|constant);
Bajo mi punto de vista esto no es un modelo válido de la clase probit ni de ninguna otra clase de modelos, es decir, no es un modelo, pues usa como explicación el propio objeto a explicar, eso no es más que una ecuación determinista bastante trivial
output=output+0*constant
En el modelo que pretendes crear no hay más que una variable que es la constante, es decir, su estimación máximo-verosímil sería algo así
Set res1 = Probit(output, constant);
La parte BSR no la puedo probar con el fichero adjunto porque no define ningún modelo. Lógicamente BSR dice que la variable input que es igual al output tiene media 1 y desviación 0, y el resto de variables, ya le podríamos añadir a 500 más que daría igual, pues estamos ante una fórmula determinista.
comment:4 Changed 15 years ago by
Status: | new → accepted |
---|
Bueno, finalmente he comprendido la lógica del razonamiento y pese a que el ejemplo no me sirva tal cual, si me ha servido para crear un chequeo sencillo.
He probado BysMcmc::Bsr::OneNode::@Probit un modelo con una única variable constante y efectivamente el parámetro se estima mal y los residuos están sesgados.
comment:5 Changed 15 years ago by
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
No veo ningún motivo por el cual los parámetros deban ser necesariamente muy distintos. Son modelos muy parecidos, tienen la misma estructura explicativa y sólo cambia la distribución de los residuos.
Para salir de dudas, sería bueno que pudiéramos formular un test que midiera de forma objetiva la calidad de la estimación.
Lo que hace BSR paraestimar un modelo Probit está explicado en el manual de BSR en el apartado 6.3.3 y en la propia descripción del filtro ProbitFilter
En el fichero .../bsr/_oneNode.tol tienes una clase Class @Probit que hace la transformación del filtro lineal en probabilidades, bien para una realización puntual de los parámetros, bien integradas para toda la muestra simulada.