UP | HOME |

Intervalos de confianza paramétricos con R

Intervalos de confianza paramétricos con R

Detallamos a continuación la forma de proceder para calcular con R intervalos de confianza para parámetros poblacionales, tanto cuando conocemos la distribución teórica del estadístico pivotal, como cuando remuestreamos. Si el tamaño de la muestra alcanza un valor suficientemente grande, el Teorema Central del Límite permite utilizar con seguridad las funciones pivotales descritas aunque la muestra no provenga de una población normal.

El razonamiento filosófico no nos conducirá a conclusión alguna contraria a lo que está consignado en la revelación divina, porque la verdad no puede contradecir a la verdad, sino armonizarse con ella y servirle de testimonio confirmativo. - Averroes.

Statue of Averroes in Córdoba, Spain
Averroes, Córdoba

Intervalo de confianza para la media poblacional

Dada una muestra aleatoria simple \(\xi_1, \xi_2,\ldots, \xi_n\) proveniente de una población normal, el estadístico \[\frac{\overline{\xi} - \mu}{S/\sqrt{n}} \sim t_{n-1}\] compuesto por la media muestral \( \overline\xi\), la media poblacional \( \mu\), la (cuasi) desviación típica \(S\) y el tamaño muestral \(n\) sigue una distribución \(t\) de Student con \(n-1\) grados de libertad.

Los intervalos de confianza de la media poblacional se calculan en R mediante la función t.test(), tanto el bilateral como los unilaterales.

## Data and parameters
n <- 400 # Sample size
set.seed(123) # for reproducibility
x <- rchisq(n, df = 7) # Sampling data
alpha <- 0.05 # Significance level

## Bilateral confidence interval
t.test(x, conf.level = 1 - alpha)$conf.int
## One sided confidence intervals
t.test(x, alternative = "less", conf.level = 1 - alpha)$conf.int
t.test(x, alternative = "greater", conf.level = 1 - alpha)$conf.int
[1] 6.338586 7.013779
attr(,"conf.level")
[1] 0.95
[1]     -Inf 6.959301
attr(,"conf.level")
[1] 0.95
[1] 6.393065      Inf
attr(,"conf.level")
[1] 0.95

Intervalo de confianza para la varianza

El siguiente estadístico \[\frac{(n-1) S^2}{\sigma^2}\sim \chi^2_{n-1}\] sigue una distribución \( \chi^{2}\) con \(n-1\) grados de libertad cuando la muestra aleatoria simple proviene de una distribución normal.

Las funciones básicas de R no incluyen función alguna que calcule el intervalo de confianza para la varianza. El desarrollo de la función pivotal nos conduce a la siguiente expresión:

## Confidence interval for the variance
df <- length(x) - 1
lower <- var(x) * df / qchisq(alpha / 2, df, lower.tail = FALSE)
upper <- var(x) * df / qchisq(1 - alpha / 2, df, lower.tail = FALSE)
c(lower = lower, upper = upper)
   lower    upper 
10.31584 13.62015

Intervalo de confianza para la proporción

Sea \( \xi_{1}, \xi_{2}, \ldots, \xi_{n}\) una muestra aleatoria simple de una distribución de Bernouilli de parámetro \(p\). Entonces \[\frac{\hat{p} -p}{\sqrt{ \frac{\hat{p}(1-\hat{p})}{n}}} \sim Normal(0,1)\] cuando \(n\) alcanza un tamaño suficientemente grande. Para valores pequeños de \(n\) se opta por el intervalo de confianza exacto.

## Data and parameters
n <- 400 # Sample size
set.seed(123) # for reproducibility
p <- 0.7 # Population proportion
x <- sample(c(0, 1), size = n, replace = TRUE, prob = c(1 - p, p)) # Sampling data
alpha <- 0.05 # Significance level

## Bilateral confidence interval
prop.test(sum(x), n = length(x), conf.level = 1 - alpha)$conf.int

## One sided confidence intervals
prop.test(sum(x), n = length(x), alternative = "less", conf.level = 1 - alpha)$conf.int
prop.test(sum(x), n = length(x), alternative = "greater", conf.level = 1 - alpha)$conf.int

[1] 0.6649956 0.7558484
attr(,"conf.level")
[1] 0.95
[1] 0.000000 0.749391
attr(,"conf.level")
[1] 0.95
[1] 0.6726582 1.0000000
attr(,"conf.level")
[1] 0.95

Error máximo y tamaño muestral mínimo en la estimación de proporciones

Para calcular el error máximo y el tamaño muestral mínimo en la estimación de proporciones en la situación más desfavorable (\(p=0.5\)), fijamos el nivel de significación y desarrollamos la función pivotal de la proporción muestral.

## Maximum error
n <- 600 # Sample size
alpha <- 0.03 # Significance level
(error <- qnorm(1 - alpha / 2) * sqrt(0.5 * 0.5 / n))

## Required sample size
error <- 0.02
alpha <- 0.03
(n <- ceiling(qnorm(1 - alpha / 2)^2 * 0.5 * 0.5 / error^2))
[1] 0.04429678
[1] 2944

Intervalo de confianza para la diferencia de medias

Cuando observamos dos muestras aleatorias simples independientes que proceden de distribuciones normales, conviene comprobar si poseen la misma varianza (homogéneas) o no. Por defecto supondremos heterogeneidad de ambas muestras. El intervalo de confianza para la diferencia de medias se calcula como sigue:

## Data
set.seed(654)
x <- rnorm(300, 7, 3)
y <- rnorm(200, 8, 1)
alpha <- 0.025

## Confidence interval
t.test(x, y, conf.level = 1 - alpha)$conf.int
t.test(x, y, alternative = "less", conf.level = 1 - alpha)$conf.int
t.test(x, y, alternative = "greater", conf.level = 1 - alpha)$conf.int

[1] -1.7124080 -0.8731655
attr(,"conf.level")
[1] 0.975
[1]       -Inf -0.9261273
attr(,"conf.level")
[1] 0.975
[1] -1.659446       Inf
attr(,"conf.level")
[1] 0.975

Intervalo de confianza para la razón de varianzas

Con dos muestras aleatorias simples independientes que proceden de distribuciones normales el intervalo de confianza para el cociente de varianzas se calcula mediante la distribución F de Snedecor.

## Data
set.seed(654)
x <- rnorm(300, 7, 3)
y <- rnorm(200, 8, 1)
alpha <- 0.025

var.test(x, y, conf.level = 1 - alpha)$conf.int
[1]  6.071191 10.861347
attr(,"conf.level")
[1] 0.975

Intervalo de confianza para la diferencia de proporciones

Cuando disponemos de información sobre dos muestras aleatorias simples de Bernouilli independientes, se procede de la siguiente forma para calcular el intervalo de confianza de la diferencia de proporciones:

## Data
set.seed(234)
x <- sample(c(0, 1), size = 300, replace = TRUE, prob = c(0.2, 0.8)) # Sampling data
y <- sample(c(0, 1), size = 500, replace = TRUE, prob = c(0.6, 0.4)) # Sampling data
alpha <- 0.015

## Confidence interval
prop.test(c(sum(x), sum(y)), c(length(x), length(y)), conf.level = 1 - alpha)$conf.int
prop.test(c(sum(x), sum(y)), c(length(x), length(y)), alternative = "less", conf.level = 1 - alpha)$conf.int
prop.test(c(sum(x), sum(y)), c(length(x), length(y)), alternative = "greater", conf.level = 1 - alpha)$conf.int


[1] 0.3872262 0.5394404
attr(,"conf.level")
[1] 0.985
[1] -1.0000000  0.5315212
attr(,"conf.level")
[1] 0.985
[1] 0.3951455 1.0000000
attr(,"conf.level")
[1] 0.985

Intervalos de confianza mediante remuestreo

En los casos anteriores se conoce la distribución teórica del estimador. Normalmente se debe a que la población de referencia presenta un comportamiento normal, o bien a que el Teorema Central del Límite permite aproximar la distribución muestral a la distribución normal. En la mayoría de las situaciones basta con aplicar los anteriores intervalos de confianza para obtener resultados fiables.

Cuando se desconoce la distribución teórica subyacente del estimador, la técnica de los remuestreos (bootstrap) la aproxima mediante remuestreos a partir de la muestra original.

## Data
n <- 431 # Sample size
set.seed(123) # Reproducibility
x <- rchisq(n, 7) # Sampling data does not follow a Normal distribution.
alpha <- 0.03

Realizamos un número elevado de remuestreos con reemplazamiento (en este caso mil remuestreos). Para cada remuestreo calculamos el estimador del parámetro que deseamos inferir. Si por ejemplo, deseamos estimar la media poblacional, calculamos la media muestral. En este caso, calculemos el intervalo de confianza para la media poblacional.

meanxboot <- replicate(1000, {
    ## replace must be TRUE!
    y <- sample(x, length(x), replace = TRUE)
    mean(y)
})

## Confidence interval
quantile(meanxboot, probs = c(alpha/2, 1-alpha/2))
    1.5%    98.5% 
6.379058 7.094514

Aventurémonos a encontrar un intervalo de confianza para el percentil treinta y siete. Seguimos los pasos anteriores, pero en vez de calcular la media en cada remuestreo, determinamos el percentil treinta y siete.

quanxboot <- replicate(1000, {
    ## replace must be TRUE!
    y <- sample(x, length(x), replace = TRUE)
    quantile(y,probs=0.37)
})
quantile(quanxboot, probs = c(alpha/2, 1-alpha/2))
    1.5%    98.5% 
4.857012 5.630769

La ventaja del remuestreo reside principalmente en su sencillez. Se utiliza cuando se desconoce la distribución teórica subyacente. Aunque recuerde que «si no aprovecha la estructura subyacente, ¡deja dinero encima de la mesa!».