Otra vuelta al caso del test que rechaza y el intervalo que contiene

Esta visita adicional al tema es consecuencia de mi revisión de todo el asunto de las pruebas de hipótesis. En particular, en el caso de prueba binomial, como en esta entrada, de la que la que lees es continuación.

En particular,

binom.test(79, 100, 0.7)

# Exact binomial test
#
# data:  79 and 100
# number of successes = 79, number of trials = 100, p-value = 0.04982
# alternative hypothesis: true probability of success is not equal to 0.7
# 95 percent confidence interval:
#   0.6970846 0.8650563
# sample estimates:
#   probability of success
# 0.79

es un caso en el que la prueba rechaza (al nivel de confianza del 5% siempre) y el intervalo de confianza del parámetro cubre el valor 0.7 de partida.

Premoniciones de Tirole sobre sobre el R Consortium

R

A J. Tirole tiene Nobel de economía. En 2002 escribió un artículo, Some Simple Economics of Open Source, en el que trataba de explicar desde un punto de vista económico y de organización industrial el porqué de esa rareza. Aparte de cuestiones como si sería extrapolable a otros sectores distintos del del desarrollo de software.

En la sección sobre la reacción de las compañías de software frente al fenómeno del software libre tiene un apartado titulado viviendo simbióticamente de [no con] un proyecto de código abierto que termina con la frase (mi traducción):

El test rechaza pero el intervalo contiene: [contra]ejemplos

De acuerdo con el saber popular, pruebas que rechazan acompañan a intervalos de confianza que no contienen.

Pero

foo <- function(N, p = 0.7){
  n <- qbinom(0.975, N, p)
  tmp <- binom.test(n, N, p)
  c(tmp$p.value, tmp$conf.int,
    tmp$conf.int[1] < p & p < tmp$conf.int[2])
}

res <- as.data.frame(t(sapply(20:200, foo)))
res$n <- 20:200

res[res$V1 < 0.05,]

no tiene cero filas.

PyData Madrid 2016, en abril de este año

Me llegan noticias de PyData Madrid 2016, que tendrá lugar en abril de este año en Madrid:

Os pongo un poco en contexto. Las PyData empezaron como conferencias de desarrolladores y usuarios de herramientas Python para trabajar con datos. Las primeras se hicieron en Silicon Valley, Nueva York, Londres,… Actualmente hay conferencias en NY, SV, Dallas, Seattle, Boston, Londres, Berlín, Amsterdam, París, Colonia, Tokio, Singapur,…, y Madrid. Como he comentado, empezaron un poco enfocadas en Python pero ahora están mucho más abiertas y se habla de Julia, Python, R, Scala,…

Internet: la frutería y el sushi bar

Internet es en gran medida (y lo fue aún más) una especie de frutería: si quieres manzanas, vas a donde las manzanas; si quieres peras, vas a donde las peras, etc. Esta manera de organizar la información en internet tiene que ver con su sustrato tecnológico: la gente conecta servidores y en ellos coloca información sobre temas diversos. Luego, los buscadores nos ayudan a ubicar aquello en lo que estamos interesados.

Repensando la tiranía de la anarquía

Tener y cumplir reglas te puede hacer libre. La falta de reglas o su incumplimiento puede restringir tu libertad. Mi ejemplo favorito es el de las escaleras mecánicas del metro. En muchas ciudades opera y se cumple una regla no siempre escrita: si quieres permanecer quieto, quédate en el lado derecho y deja el lado izquierdo para quienes quieran subir más aprisa. Esa regla (o costumbre) te permite optar: lado derecho y no caminar; lado izquierdo y avanzar más rápido.

Comparaciones de tres grupos: pruebas vs modelos

Una pregunta reciente en r-help-es se refería a la comparación en R de las proporciones en tres grupos. Obviando algunas pequeñas complicaciones en el problema, la respuesta canónica podría ser esta:

total <- c(56, 49,51)
positivos <- c(14, 10, 17)
prop.test(tmp$positivos, tmp$positivos + tmp$negativos)

# 3-sample test for equality of proportions without continuity correction
#
# data:  tmp$positivos out of tmp$positivos + tmp$negativos
# X-squared = 2.2289, df = 2, p-value = 0.3281
# alternative hypothesis: two.sided
# sample estimates:
#   prop 1    prop 2    prop 3
# 0.2500000 0.2040816 0.3333333

Los grupos no parecen ser desiguales.

Análisis estadístico de respuestas ocultas en encuestas

A veces se hacen encuestas sobre temas sobre los que los encuestados son reticentes a revelar la verdad (p.e., ¿es Vd. un zombi?). Un procedimiento conocido para recabar tal tipo de información es el siguiente:

  • Se le invita al encuestado a tirar al aire una moneda con las caras etiquetadas con y no; la moneda no es una moneda porque tiene una probabidad conocida (y distinta del 50%) de caer en .
  • El encuestado responde sí si la respuesta a la pregunta y el resultado de la tirada de la moneda coinciden y no en caso contrario.

A partir de la proporción de respuestas positivas y conocida la probabilidad del de la moneda, $latex q$, es posible estimar la proporción $latex \theta$ de respuestas positivas a la pregunta de subyacente de interés en la muestra. Efectivamente, los síes tienen una distribución binomial $latex B(p) = B(q\theta + (1-q)(1-\theta))$ y, una vez estimado (por máxima verosimilitud) $latex \hat{p}$, puede despejarse $latex \hat{p}$ de $latex \hat{p} = q\hat{\theta} + (1-q)(1-\hat{\theta})$ para obtener

¿A cuántos zombis conoces?

El artículo cuya lectura propongo hoy comienza así:

La zombificación es un gran problema de salud y de seguridad pública muy difícil de estudiar usando los métodos tradicionales basados en encuestas. Se cree que la tasa de penetración del teléfono entre la población zombi es pequeña. Además, los zombis son reacios a identificarse como tales al ser encuestados. Las entrevistas personales suponen un riesgo elevado para quienes las realizan. Las esperanzas originalmente depositadas en las encuestas a través del ordenador se desvanecieron ante el riesgo de que los virus propagasen la infección zombi.

Por si os interesa el tema de la energía, las centrales, las emisiones, etc.

R

Esta entrada será del interés de a quien le atraigan dos temas bastante independientes entre sí:

  • La energía, las centrales eléctricas, sus emisiones, etc.
  • SPARQL

Allá va el código

library(SPARQL)
library(ggplot2)

queryString = "PREFIX a: <http://enipedia.tudelft.nl/wiki/>
PREFIX prop: <http://enipedia.tudelft.nl/wiki/Property:>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?plant ?name ?elec_capacity_MW ?lat ?lon ?operator
where {
?plant prop:Country a:Spain .
#get the name
#?plant rdfs:label ?name .
?plant prop:Generation_capacity_electrical_MW ?elec_capacity_MW .
#?plant prop:Operator ?operator .
?plant prop:Latitude ?lat .
?plant prop:Longitude ?lon .
}"


d <- SPARQL(url="http://enipedia.tudelft.nl/sparql",
            query=queryString, format='csv',
            extra='&format=text%2Fcsv')

ggplot(d$results, aes(x = lon, y = lat, size = elec_capacity_MW)) +
  geom_point()

y lo que genera, que es