Curvas de equiprobabilidad de la t bivariada

El otro día me entretuve pintando curvas de equiprobabilidad de la distribución de Cauchy (nota: debería haberlas llamado cuasicuasiconvexas en lugar de cuasiconvexas en su día). Pero la t es una_ cuerda tendida entre _la Cauchy y la normal y es instructivo echarles un vistazo a las curvas de equiprobabilidad según crecen los grados de libertad. Sobre todo, porque arrojan más información sobre la manera y el sentido en el que la t converge a la normal. Son:

Análisis estadístico de mezclas

No es algo que ocurra habitualmente. Creo que conozco a alguien que me dijo que lo tuvo que hacer una vez. Pero podría ocurrir en algún momento que tuvieses que analizar mezclas, es decir, situaciones experimentales en las que lo importante es la proporción de ciertos ingredientes (con la restricción obvia de que dichas proporciones suman la unidad).

Para más datos, Mixture Experiments in R Using mixexp, que describe el paquete de R mixexp.

La probabilidad de que el parámetro esté en el intervalo de confianza es .95

Si dices lo anterior, corres el riesgo de que un estadístico gruñón frunza mucho el ceño.

Hace muchos, muchos años, las gentes ávidas de saber más acudieron al tabernáculo donde se congregaban los sapientísimos estadísticos frecuentistas implorándoles una herramienta con que estimar el error de sus estimaciones puntuales. Estos cavilaron luengamente y décadas después entregaron a los representantes de los hombres, reunidos en el ágora, unas tablas de piedra que tenían grabadas a cincel la teoría de los intervalos de confianza. Pero, les advirtieron, los intervalos de confianza no son lo que vosotros queréis sino otra cosa y a quien ose interpretarlos torcidamente le pasará lo que a aquella señora que comió la manzana inadecuada: será expulsado del paraíso de la teoría como Dios manda.

¿Lineal o logística?

Hay cosas tan obvias que ni se plantea la alternativa. Pero luego va R. Gomila y escribe Logistic or Linear? Estimating Causal Effects of Treatments on Binary Outcomes Using Regression Analysis que se resume en lo siguiente: cuando te interese la explicación y no la predicción, aunque tu y sea binaria, usa regresión lineal y pasa de la logística.

Nota: La sección 4.2 de An Introduction to Statistical Learning de se titula precisamente Why Not Linear Regression?

WoE,... pero ¿y las interacciones?

Esto del WoE he tenido que aplicarlo (de manera no estándar, además) en alguna ocasión. Pero forzado por las circunstancias (que, concretamente, eran el misteriosísimo y no siempre conforme a lo que cabría esperar que hace ranger de las variables categóricas). Digamos que a veces toca, pero no es tampoco algo de lo que enorgullecerse.

Pero cuando escucho o leo a los apologetas del WoE, siempre me pregunto mucho por lo que tendrán que decir sobre la pérdida de información en términos abstractos y, en otros más concretos, qué ocurre con las interacciones.

Sobre la normalización de las direcciones postales

Lo de las direcciones postales es un caos. Trabajar con ellas, una tortura. Y cualquier proyecto de ciencia de datos que las emplee se convierte en la n-ésima reinvención de la rueda: normalización y tal.

Cuando todo debería ser más sencillo. Cada portal en España tiene asociado un número de policía, un identificador numérico único. Independientemente de que quienes lo habiten se refieran a él de formas variopintas, vernaculares y, en definitiva, desnormalizadas y desestandarizadas hasta pedir basta.

La densidad de una Cauchy bivariada es cuasiconvexa

Primero, las curvas de nivel:

x <- seq(-50, 50, length.out = 1000)

tmp <- expand.grid(x = x, y = x)
tmp$z <- log(dcauchy(tmp$x) * dcauchy(tmp$y))

ggplot(tmp, aes(x = x, y = y, z = z)) + stat_contour()

Lo de la cuasiconvexidad está contado aquí.

Las consecuencias estadísticas y probabilísticas, para otro rato.

model4you

Un grupo de estudiantes se examina en horas distintas con exámenes parecidos pero no iguales. Se pretende estudiar si el examen tiene algún efecto sobre la nota final y para eso se hace algo así como

bmod_math <- lm(pcorrect ~ group, data = MathExam)

para obtener una distribución de la nota media por grupo descrita bien

cbind(estimate = coef(bmod_math), confint(bmod_math))

##              estimate      2.5%      97.5%
## (Intercept)  57.600184  55.122708  60.07766
## group2       -2.332414  -5.698108  1.03328

o bien, gráficamente, así:

Agoreros

Anderson et al. (2015) documented the existence of customers who systematically purchase new products that fail.

Tal se lee en The Surprising Breadth of Harbingers of Failure un artículo que abunda sobre la cuestión de la existencia ya no solo de clientes agoreros sino, incluso de códigos postales agoreros donde aquellos se arraciman.

Desafortunadamente, el artículo omite decirnos cuáles son, dónde están y, por supuesto, alguna foto de quienes los habitan.

Comparación y selección de modelos bayesianos

En el mundo bayesiano existen, cuando menos, dos escuelas:

  • La flowerpower, que sostiene que los modelos bayesianos son subjetivos y, por lo tanto, inasequibles a la confrontación con la realidad objetiva.
  • La de los que tienen un jefe que les paga un salario, al que le da igual si los modelos son bayesianos o no pero a quien le interesa por encima de todo saber si representan razonablemente el proceso subyacente.

Los segundos cuentan con referencias como Comparison of Bayesian predictive methods for model selection. Es un artículo, en cierto modo, desasosegadoramente antibayesiano: miradlo y encontraréis en él cosas que se parecen demasiado a la validación cruzada, al RMSE, etc.

El "método delta", ahora con NIMBLE

NIMBLE ha sido uno de mis más recientes y provechosos descubrimientos. Mejor que hablar de él, que otros lo harán mejor y con más criterio que yo, lo usaré para replantear el problema asociado el método delta que me ocupó el otro día.

Casi autoexplicativo:

library(nimble)

src <- nimbleCode({
    T_half <- log(.5) / k
    k ~ dnorm(-0.035, sd = 0.00195)
})

mcmc.out <- nimbleMCMC(code = src,
    constants = list(),
    data = list(), inits = list(k = -0.035),
    niter = 10000,
    monitors = c("k", "T_half"))

out <- as.data.frame(mcmc.out)

# hist(out$T_half), sd(out$T_half), etc.

Cosas: