Sumário

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.

Enunciado do problema

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.

Solução teórica

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

Solução por Simulação Monte Carlo

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