Intervalos confianza para media variable

Anuncio
Simulación de Intervalos de Confianza
A continuación aparecen tres scripts que permiten simular diferentes
situaciones: en breve:
•
Caso A: variable con distribución normal
•
Caso B: variable con distribución no normal
•
Caso C: uso incorrecto de la distribución del estadístico
(normal, en vez de t de Student)
Con el caso A se puede apreciar que la proporción de IC que
contienen la media coincide con el valor de la confianza utilizada
(95%). Los IC que fallan se colorean de rojo.
En el caso B, cuando la distribución de origen no es normal (se usa
una exponencial), y el tamaño de muestra es pequeño, entonces la
proporción de IC que contienen la media es menor que la confianza
empleada.
El caso C sirve para expresar la procedencia de la distribución t de
Student, por usar la estimación de σ en vez del valor real. Si se hace
incorrectamente, y se le supone al estadístico
x−µ
s n
una distribución N(0,1),
entonces los IC correspondientes no contienen la media en la
proporción correcta.
En la actividad propuesta se debe repetir la simulación (50 muestras
cada vez) lo suficiente como para que el efecto sea evidente. Por
ejemplo, si se repite 10 veces, hay que anotar y sumar cuántos IC
han fallado en cada vez. Así, para el caso A se esperan unos 25, pero
para el B o el C han de ser más, en función del tamaño de muestra
(la variable n).
Optativamente, puede cambiarse el tamaño n y ver qué ocurre (en el
caso B se representa también la auténtica distribución de la media
muestral, que no es Normal, pero que para n grandes será parecida).
También puede cambiarse fácilmente el código para obtener IC al
90%, o a cualquier otro nivel.
Intervalos de confianza para la media de la variable
0.00
0.04
0.08
0.12
CASO A: la variable sigue una distribución normal
150
160
170
mu=170
sig=10
n = 9
sig2 = sig/sqrt(n)
M=50
sam = array(rnorm(M*n, mu, sig), dim=c(M,n))
meds = apply(sam, 1, mean)
std = apply(sam, 1, sd)
icL = meds - qt(0.975, n-1)*std/sqrt(n)
icR = meds + qt(0.975, n-1)*std/sqrt(n)
ok = ifelse(icL<mu & icR>mu, "black", "red")
x = seq(mu-2*sig, mu+2*sig, len=61)
x2 = seq(mu-3*sig2, mu+3*sig2, len=61)
y = dnorm(x, mu, sig)
y2 = dnorm(x2, mu, sig2)
top = dnorm(mu, mu, sig2)
opar=par()
par(mfrow=c(2,1), mar=c(2,2,1,0.5))
plot(x, y, t="l", ylim=c(0, top))
lines(x2, y2, col="blue")
rug(meds)
plot(range(x), c(1, M), t="n", axes=F, ylab="",xlab="")
abline(v=mu, col="green2", lty=2)
segments(icL, 1:M, icR, 1:M, col=ok)
par(opar)
180
190
0.00
0.04
0.08
CASO B: la variable no sigue una distribución normal
0
5
10
15
20
25
# Es la distribución exacta de la
media_exp = function(x, n, t) {
n*dgamma(x*n, shape=n, rate=t) # media de n exponenciales
}
mu=10
rate = 1/mu
sig = 1/rate
n = 6
sig2 = sig/sqrt(n)
M=50
sam = array(rexp(M*n, rate), dim=c(M,n))
meds = apply(sam, 1, mean)
std = apply(sam, 1, sd)
icL = meds - qt(0.975, n-1)*std/sqrt(n)
icR = meds + qt(0.975, n-1)*std/sqrt(n)
ok = ifelse(icL<mu & icR>mu, "black", "red")
x = seq(0, qexp(0.95,rate), len=61)
x2 = seq(mu-3*sig2, mu+3*sig2, len=61)
y = dexp(x, rate)
y2 = dnorm(x2, mu, sig2)
# aproximación normal
y3 = media_exp(x2, n, rate)
# exacta
top = max(y3)
opar=par()
par(mfrow=c(2,1), mar=c(2,2,1,0.5))
plot(x, y, t="l", ylim=c(0, top))
lines(x2, y2, col="blue")
lines(x2, y3, col="violet")
rug(meds)
plot(range(x), c(1, M), t="n", axes=F, ylab="",xlab="")
abline(v=mu, col="green2", lty=2)
segments(icL, 1:M, icR, 1:M, col=ok)
par(opar)
30
CASO C: la variable sigue una distribución normal, pero la muestra es
pequeña y no se usa la t de Student sino la Normal.
alfa = 0.05
# para hacer IC(95%)
mu=50
sig=10
n = 5
sig2 = sig/sqrt(n)
M=50
sam = array(rnorm(M*n, mu, sig), dim=c(M,n))
meds = apply(sam, 1, mean)
std = apply(sam, 1, sd)
icL = meds - qnorm(1-alfa/2)*std/sqrt(n)
# qnorm en vez de qt es incorrecto
icR = meds + qnorm(1-alfa/2)*std/sqrt(n)
# idem: IC demasiado estrecho.
ok = ifelse(icL<mu & icR>mu, "black", "red")
fail=length(ok[ok=="red"])
msg=paste(fail,"CI failed to catch the mean.")
x = seq(mu-2*sig, mu+2*sig, len=61)
x2 = seq(mu-3*sig2, mu+3*sig2, len=61)
y = dnorm(x, mu, sig)
y2 = dnorm(x2, mu, sig2)
top = dnorm(mu, mu, sig2)
opar=par()
par(mfrow=c(2,1), mar=c(2,2,1,0.5))
plot(x, y, t="l", ylim=c(0, top), main=msg)
lines(x2, y2, col="blue")
rug(meds)
plot(range(x), c(1, M), t="n", axes=F, ylab="",xlab="")
abline(v=mu, col="green2", lty=2)
segments(icL, 1:M, icR, 1:M, col=ok)
par(opar)
0.10
0.08
0.06
Fail/M
0.12
0.14
0.16
El número de IC que no encierran la media es más alto de lo usual.
Con alfa = 0.05, debería haber un promedio de 2.5 intervalos. Si se
repite varias veces la ejecución (al menos 10) y se acumulan los
fallos, debería apreciarse el desvío, y cómo se amortigua a medida
que la muestra crece. Sugerencia: probar con n=3, 5, 7, 9, 11.
5
10
15
20
N
25
30
Descargar