close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 15 years ago

Closed 15 years ago

#814 closed defect (fixed)

Unexpected results estimating Probit with BSR

Reported by: pgea@… 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)

AutoProbit.zip (22.3 KB) - added by pgea@… 15 years ago.

Download all attachments as: .zip

Change History (6)

Changed 15 years ago by pgea@…

Attachment: AutoProbit.zip added

comment:1 Changed 15 years ago by Víctor de Buen Remiro

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.

comment:2 Changed 15 years ago by pgea@…

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 Víctor de Buen Remiro

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 Víctor de Buen Remiro

Status: newaccepted

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 Víctor de Buen Remiro

Resolution: fixed
Status: acceptedclosed

(In [1847]) Fixed #814

Note: See TracTickets for help on using tickets.