Estoy tratando de comparar las desigualdades de Bernstein y Chebyshev aplicadas a la distribución Bernoulli con parámetro $p$ . Más específicamente - qué tan buenos son los límites que dan para diferentes tamaños de muestra. He escrito la simulación en R - los detalles se presentan a continuación. Los resultados y la pregunta precisa sobre ellos están en la parte inferior del post. Las desigualdades se establecen como sigue:
Dejemos que $\xi: Z \rightarrow \mathbb{R}$ sea una variable aleatoria con media $\mathbf{E}(\xi) = \mu$ y la varianza $\sigma^2(\xi) = \sigma^2 $ . Entonces, para cada $\varepsilon>0$ : $$ \underset{\mathbf{z} \in Z^m}{\mathrm{Prob}} \Bigg\{ \Bigg| \frac{1}{m} \sum_{i=1}^{m} \xi(z_i) - \mu \Bigg| \leq \varepsilon \Bigg\} \geq 1 - \frac{\sigma^2}{m \varepsilon^2} \qquad \qquad \mbox{(Chebyshev)}.$$ Si también $|\xi(z) - \mathbf{E}(\xi)| \leq M $ para casi todos los $z \in Z$ , entonces para cada $\varepsilon>0$ $$ \underset{\mathbf{z} \in Z^m}{\mathrm{Prob}} \Bigg\{ \Bigg| \frac{1}{m} \sum_{i=1}^{m} \xi(z_i) - \mu \Bigg| \leq \varepsilon \Bigg\} \geq 1 - 2e^{ - \frac{m\varepsilon^2}{2(\sigma^2 + \frac{1}{3}M\varepsilon)}} \qquad \qquad \mbox{(Bernstein)} .$$
Escribí funciones que calculan el límite inferior de la probabilidad, que la diferencia entre la media empírica y la media no es mayor que $\varepsilon$ dado por ambas desigualdades:
ChebyshevInequality <- function(m, epsilon, variance){
return( 1 - variance/(m*(epsilon^2)) )
}
BernsteinInequality <- function (m, epsilon, variance, M){
return( 1 - 2*exp( (-m*(epsilon^2))/(2*variance + 2*M*epsilon/3) ) )
}
El siguiente paso fue escribir la función que realiza un número de ensayos, donde cada ensayo realiza pasos:
-
generar m números extraídos según la distribución Bernoulli
-
calcular la diferencia entre la media empírica y la media
-
comprobar si la diferencia no supera $\varepsilon$
y luego calcula la fracción de ensayos en los que la diferencia entre la media empírica y la media no supera $\varepsilon$ . La función repite estos pasos 3 veces y también calcula los límites Chebyshev y Bernstein correspondientes.
empiricalBernoulli <- function(trials, sample, p = .5, epsilon = .05)
{
m <- sample
mean <- p
var <- p*(1 - p)
M <- max(p, 1 - p)
does.not.exceed.epsilon <- c(logical(trials))
empirical <- c(numeric(3))
for(j in 1:3){
for(i in 1:trials){
observations <- rbinom(m, 1, p)
difference <- abs(sum(observations)/m - mean)
does.not.exceed.epsilon[i] <- (difference <= epsilon)
}
empirical[j] <- sum(does.not.exceed.epsilon)/trials
}
C <- ChebyshevInequality(m, epsilon, var)
B <- BernsteinInequality(m, epsilon, var, M)
return(data.frame(SampleSize = m, ChebyshevLowerBound = C, BernsteinLowerBound = B, Empirical1 = empirical[1], Empirical2 = empirical[2], empirical3 = empirical[3]))
}
Al final escribí una tabla, que recoge esas informaciones para diferentes tamaños de muestra. Aquí "muestra" significa vector poblado con tamaños de muestra que quiero comprobar.
comparisonForBernoulli <- function(sample, trials = 1000, p = .5, epsilon = .05){
k <- length(sample)
df <- data.frame(SampleSize = numeric(k), ChebyshevLowerBound = numeric(k), BernsteinLowerBound = numeric(k), Empirical1 = numeric(k), Empirical2 = numeric(k), Empirical3 = numeric(k))
for(i in 1:k){
df[i,] <- empiricalBernoulli(trials, sample[i], p , epsilon)
}
return(df)
}
Hago esta simulación varias veces con parámetros:
sample1 <- seq(100,1000,100)
comparisonForBernoulli(sample = sample1, trials = 1000, p = .5, epsilon = .05)
Cada vez obtuve resultados extraños. Este es uno de los resultados:
SampleSize ChebyshevLowerBound BernsteinLowerBound Empirical1 Empirical2 Empirical3
1 100 2.220446e-16 -0.2327855 0.709 0.685 0.679
2 200 5.000000e-01 0.2401200 0.850 0.823 0.854
3 300 6.666667e-01 0.5316155 0.910 0.922 0.913
4 400 7.500000e-01 0.7112912 0.942 0.950 0.957
5 500 8.000000e-01 0.8220420 0.974 0.973 0.967
6 600 8.333333e-01 0.8903080 0.991 0.982 0.989
7 700 8.571429e-01 0.9323866 0.993 0.990 0.994
8 800 8.750000e-01 0.9583236 0.995 0.993 0.999
9 900 8.888889e-01 0.9743110 0.997 0.999 0.995
10 1000 9.000000e-01 0.9841655 0.999 0.997 0.999
PROBLEMA: Las probabilidades empíricas son a veces menores que el límite inferior de probabilidad de Bernstain. En el ejemplo anterior ocurre para tamaños de muestra $m \geq 700$ . No sé por qué ocurre. He comprobado mis funciones y no encuentro ningún error. ¿Puede alguien ayudarme a resolver este problema o explicar la causa probable? ¿Quizás hay algún error numérico? ¿O el error es producido por la función 'rbinom'? He realizado una simulación similar para una distribución uniforme en $[0,1]$ y el resultado fue similar.
0 votos
No tengo tiempo de revisar tu código, pero un vistazo a él sugiere que podrías estar confundiendo la media y la SD reales de las distribuciones subyacentes con sus estimaciones a partir de las muestras simuladas.
0 votos
Comentario de R totalmente no relacionado:
c(numeric(100))
etc. está repitiendo algo similar dos veces, porque dice: "hacer un vector de un número vector de longitud 100" así que usandonumeric(100)
(más eficiente si se conoce la longitud de antemano) o simplementec()
(vector vacío de longitud 0) ox <- NULL
(si no quiere asumir nada sobre el vector) es suficiente.