Nesta nota técnica resolvemos, teoricamente e por simulação Monte Carlo, o problema de encontrar a média teórica ou esperança do número de gols em partida a partir de premissas sobre a ocorrência de gols.
Encontre a esperança matemática e a variância teórica do número de gols em um partida de futebol com 90 min, assumindo que a ocorrência de 1 gol num intervalo qualquer de 1 minuto tem probababilidade \(p\). Assuma que a ocorrência de gols em intervalos distintos são eventos independentes. Obtenha o resultado teórico e estime os resultados teóricos por simulação Monte Carlo, obtendo um intervalo de >confiança para a média teórica (esperança) de gols por partida.
Assuma que \(X_i\) é uma variável aleatória Bernoulli, \(X\in \{0,1\}\) com \(P(X=1)=p\) e \(P(X=0)=1-p\). Nesse problema \(X_i\) representa a ocorrência ou não de gol no minuto \(i\). Logo, se \(T\) representa o total de gols na partida, temos:
Como \(E(X_i)=p\) e \(V(X_i)=p(1-p)\) chegamos a
Exemplificando, se \(n=90\) e \(p=0,02\), temos:
## E(T)= 1.8
## V(T)= 1.764
Podemos estimar a média teórica de gols por partida através de métodos amostrais, usando a técnica conhecida como simulação Monte Carlo. Nesse caso, poderíamos facilmente “simular” um elevado número \(n\) de partidas e considerar a média dos resultados obtidos.
Por exemplo, para simular o total de gols por nos 90 min de uma partida de futebol, poderíamos usar a função rbinom do R que permite sortear uma amostra independente de \(n\) variáveis aleatórias com distribuição Bernoulli com parâmetro \(p\). O exemplo abaixo ilustra o uso dessa função para sortear os gols em cada minuto (vetor gols_minuto) e o total de gols em uma partida quando temos \(p=0.03\).
set.seed(101)
gols_minuto<-rbinom(90,1,0.03) # 1 indica distribuição Bernoulli
gols_minuto
## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [36] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
## [71] 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
# Achando o total de gols
sum(gols_minuto)
## [1] 2
Nos comandos acima a execução prévia do comando set.seed(101) garante que os comandos subsequentes apresentem os mesmos resultados, mesmo que sejam executados em outras condições. O valor 101 é arbitrário, mas deve ser usado nesse caso para obter os mesmos resultados apresentados abaixo.
A seguir o sorteio do total de gols de outra partida sendo obtido diretamente.
sum(rbinom(90,1,0.03)) # gols em outra partida
## [1] 5
Como podemos sortear ou simular um número \(n\) grande de partidas, poderíamos estimar a média teórica de gols por partidas (que já sabemos que é \(90 p\)) considerando os resultados da Lei dos Grandes Números.
Especificamente, se \(g_i\) indica o total de gols sorteado para a partida \(i\) (de \(n\) partidas no total), e \(\mu\) representa a média teórica de gols por partida, sabemos que
ou seja, a média de gols converge para \(\mu\) (demonstrável nas formas quase certa, média de ordem r, probabilidade e distribuição).
A próxima função apresenta uma possível operacionalização dessas noções.
simgols<-function(min,p,n){ # min é o total de minutos da partida
tot_gols<-0
for(i in 1:n){
tot_gols<-tot_gols+sum(rbinom(min,1,p))
}
cat("Média de gols em ", n, "partidas é ", tot_gols/n,"\n")
cat("Média teórica (esperança)", n*p,"\n")
}
## Testando a função com n=50000 e p=0.02
simgols(90,0.02,50000)
## Média de gols em 50000 partidas é 1.7944
## Média teórica (esperança) 1000
Uma segunda versão da função, mais aprimorada, é apresentada a seguir. Essa versão usa o vetor g para armazenar o número de gols de cada partida \(i\) simulada, para depois serem obtidos a média e variância amostrais. A função também estima o intervalo de confiança para \(\mu\) através de
em que \(k\) é o quantil \(1-\alpha/2\) de uma Normal padronizada, \(\bar g\) é a média de gols nas \(n\) simulações e \(s\) é o desvio padrão amostral obtido nas \(n\) simulações. Pelo intervalo de confiança podemos afirmar que \(\mu\) está dentro do intervalo com probabilidade \(1-\alpha\). Valores usuais de \(\alpha\) são 0,05 e 0,01.
A implementação e teste da função com
é apresentada abaixo. Note que \(\mu\), a média teórica, que no caso é \(90 p=1,8\), está contida dentro do intervalo de confiança obtido.
simgols2<-function(min,p,n,alfa){
## min é o número de minutos por partida
## p é a probabilidade de gol em 1 minuto
## n é o total de partidas simuladas
## alfa define a probabilidade 1-alfa do intervalo de confiança
total<-0
g<-rep(0,n) # vetor para o total de gols por partida
for(i in 1:n){
g[i]<-sum(rbinom(min,1,p)) # simulando gols na partida i
}
gbar<-mean(g)
s<-sd(g)
cat("Média aritmética de gols = ", gbar,"\n")
cat("Variância amostral de gols = ", s^2,"\n")
cat("Desvio padrão amostral de gols = ", s,"\n")
# encontrando o intervalo de confiança
k<-qnorm(1-alfa/2)
l1<-gbar-k*s/sqrt(n)
l2<-gbar+k*s/sqrt(n)
cat("Intervalo de confiança a ", 1-alfa,"\n")
cat("lim inf =",l1,"lim sup=",l2,"\n")
}
## Testando a função
simgols2(90,0.02,100000,0.05)
## Média aritmética de gols = 1.79437
## Variância amostral de gols = 1.758784
## Desvio padrão amostral de gols = 1.326191
## Intervalo de confiança a 0.95
## lim inf = 1.78615 lim sup= 1.80259