Con Stan y los paquetes frontend rstanarm
o brms
puedo analizar fácilmente los datos al estilo bayesiano como lo hice antes con modelos mixtos como lme
. Si bien tengo la mayor parte del libro y los artículos de Kruschke-Gelman-Wagenmakers-etc en mi escritorio, estos no me dicen cómo resumir los resultados para una audiencia médica, divididos entre la ira de Skylla de Bayesian y el Caribdis de los revisores médicos ( "Queremos significados, no esas cosas difusas").
Un ejemplo: la frecuencia gástrica (1 / min) se mide en tres grupos; Los controles saludables son la referencia. Hay varias medidas para cada participante, por lo que, a la frecuencia, utilicé el siguiente modelo mixto lme
:
summary(lme(freq_min~ group, random = ~1|study_id, data = mo))
Resultados ligeramente editados:
Fixed effects: freq_min ~ group
Value Std.Error DF t-value p-value
(Intercept) 2.712 0.0804 70 33.7 0.0000
groupno_symptoms 0.353 0.1180 27 3.0 0.0058
groupwith_symptoms 0.195 0.1174 27 1.7 0.1086
Para simplificar, usaré el error estándar 2 * como IC del 95%.
En contexto frecuentista, habría resumido esto como:
- En el grupo de control, la frecuencia estimada fue de 2.7 / min (quizás agregue IC aquí, pero a veces evito esto debido a la confusión creada por el IC absoluto y el diferencial).
- En el grupo sin síntomas, la frecuencia fue mayor en 0.4 / min, IC (0.11 a 0.59) / min, p = 0.006 que el control.
- En el grupo with_symptoms, la frecuencia fue mayor en 0.2 / min, IC (-0.04 a 0.4) / min, p = 0.11 que el control.
Se trata de la complejidad máxima aceptable para una publicación médica, el revisor probablemente me pedirá que agregue "no significativo" en el segundo caso.
Aquí es lo mismo con los anteriores stan_lmer
y los predeterminados.
freq_stan = stan_lmer(freq_min~ group + (1|study_id), data = mo)
contrast lower_CredI frequency upper_CredI
(Intercept) 2.58322 2.714 2.846
groupno_symptoms 0.15579 0.346 0.535
groupwith_symptoms -0.00382 0.188 0.384
donde CredI tiene intervalos creíbles del 90% (vea la viñeta rstanarm por qué el 90% se usa por defecto).
Preguntas:
- ¿Cómo traducir el resumen anterior al mundo bayesiano?
- ¿En qué medida se requiere una discusión previa? Estoy bastante seguro de que el documento volverá con la "suposición subjetiva" habitual cuando menciono los anteriores; o al menos con "sin discusión técnica, por favor". Pero todas las autoridades bayesianas solicitan que la interpretación solo sea válida en el contexto de los antecedentes.
- ¿Cómo puedo entregar algún sustituto de "importancia" en la formulación, sin traicionar los conceptos bayesianos? Algo como "creíblemente diferente" (uuuh ...) o casi creíblemente diferente (buoha ..., suena como "al borde de la significación).
Jonah Gabry y Ben Goodrich (2016). rstanarm: modelado de regresión aplicada bayesiano a través de Stan. Paquete R versión 2.9.0-3. https://CRAN.R-project.org/package=rstanarm
Equipo de desarrollo de Stan (2015). Stan: una biblioteca de C ++ para probabilidad y muestreo, versión 2.8.0. URL http://mc-stan.org/ .
Paul-Christian Buerkner (2016). brms: modelos de regresión bayesiana con Stan. Paquete R versión 0.8.0. https://CRAN.R-project.org/package=brms
Pinheiro J, Bates D, DebRoy S, Sarkar D y R Core Team (2016). nlme: Modelos de efectos mixtos lineales y no lineales . Paquete R versión 3.1-124, http://CRAN.R-project.org/package=nlme>.
group_nosymptoms
y luego decir que la probabilidad de que sea negativa es 1 / draws
. Pero para la intercepción, la cadena nunca va a vagar en territorio negativo para estos datos, por lo que supongo que se podría decir que la probabilidad es menor que 1 / draws
.
mean(as.matrix(freq_stan)[,"groupwith_symptoms"] < 0)
.