Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

A Tabela a seguir mostra a função \(F\) de distribuição acumulada de uma variável aleatória discreta. Encontre a função \(f\) de distribuição de probabilidade

0 votos
101 visitas
perguntada Mar 14 em Estatística por Vinícius Oliveira (11 pontos)  
editado Mai 21 por Vinícius Oliveira

A imagem será apresentada aqui.

Referência: Questão 3, Problemas do Capítulo 2 do Livro "Mathematical Statistics and Data Analysis" de John A. Rice (3ª Edição)

Compartilhe

2 Respostas

+1 voto
respondida Mar 14 por Vinícius Oliveira (11 pontos)  
editado Mar 20 por Vinícius Oliveira

Introdução

Esse exercício poderia ser resolvido de forma relativamente simples e rápida manualmente ou até mesmo no excel. Para tanto, bastaria recorrermos a um resultado bastante difundido em cursos introdutórios de estatística para graduação. Em particular, para variáveis discretas, temos que:

\( P(x = k) = F(k) - F(k -1) \hspace{0.3cm} ( \star) \)

Contudo, nesta resolução, buscamos não só solucionar o problema, como também aprofundar o entendimento do conteúdo em 2 frentes: a primeira é fornecer alguma intuição detalhada do porquê se utiliza a equação \( ( \star) \). Já a segunda consiste em ilustrar como podemos usar uma linguagem de programação para resolver problemas simples de estatística.

Nesse sentido, seguiremos o seguinte roteiro. Começamos apresentando o argumento chave para resolver o exercício. Em seguida, generalizamos essa estratégia. Por fim, implementamos a solução proposta em Python

Apresentação do argumento

No exemplo proposto no exercício, a função distribuição acumulada nos fornece a probabilidade de a variável aleatória discreta \(x\) pertencer a um tipo de conjunto específico.

\( F(k) = P ( x \le k ) = P (x \in A_{k})\), em que \(A_{k} = \{k, k-1, k-2,..., 0\}\)

Cada \(A_k\) pode ser entendido como um evento, isto é, um subconjunto do espaço amostral \( \Omega\). Nesse caso, \( \Omega = \{0,1,2,3,4,5\} \)

Nesse contexto, suponha, por exemplo, que quiséssemos saber a probabilidade de \(x\) ser igual a \(2\). Isto é, qual o valor de \( P ( x = 2 ) \). Para isso, há 2 conjuntos do tipo \(A_k\) essenciais. Com intuito de encontrá-los, pensemos nas seguintes perguntas.

  1. Qual o menor conjunto do tipo \(A_k\) que contém \(k = 2\)? Ora, certamente é \(A_2 = \{2,1,0\}\).
  2. Qual o único conjunto do tipo \(A_k\) que contém todos os elementos de \(A_2\), exceto \(k = 2?\) Se pensarmos um pouco, esse conjunto é \(A_1= \{1, 0\}\)

Nesse sentido, como \(A_1 \subset A_2\), se "removermos de \(A_2\) todos os elementos de \(A_1\), sobraria apenas \(k = 2\)", justo o elemento cuja probabilidade desejamos calcular. Formalmente, isso significa:

\( C = A_2 \setminus A_1 = \{2\} \)

Mais ainda, se lembrarmos que cada \(A_k\) é um evento associado ao espaço amostral \( \Omega = \{0,1,2,3,4,5\} \), podemos usar a seguinte propriedade:

Propriedade 1: para \(A\) e \(B\) eventos associados a um dado espaço amostral \(\Omega\), se \(A \subset B\), então \(P( x \in A \setminus B) = P(x \in A) - P(x \in B)\).

Assim, se usarmos a Propriedade 1 em nosso problema, a probabilidade desejada é equivalente ao seguinte:

\( P(x = 2) = P (x \in C) = P(x \in A_2 \setminus A_1) = P(x \in A_2) - P(x \in A_1) =\)

\( = P( x \le 2) - P(x \le 1) = F(2) - F(1)\)

\( \Rightarrow P(x = 2) = F(2) - F(1) = 0.3 - 0.1 = 0.2\)

Generalização da Estratégia

Note que, na estratégia proposta anteriormente, para saber a probabilidade de \(x=2\), estamos, essencialmente, trabalhando com \(k=2\) e \(k-1\) ao fazermos \(F(2) - F(1)\). De fato, poderíamos repetir o procedimento acima descrito para cada valor de \(k\) e encontraríamos resultado análogo. Em geral, considerando a variável aleatória deste exercício, temos a seguinte relação para obter a função de distribuição de probabilidade \(f\) :

\( f(k) = P(x = k) = F(k) - F(k-1) \hspace{0,15cm} \forall \hspace{0,15cm} k = 0,1,2,3,4,5 \hspace{0.3cm} (1) \)

Implementação em Python

Com base na generalização resumida pela equação \((1) \), vamos, enfim, solucionar o exercício. Contudo, para facilitar a implementação, reescreva \((1) \) da seguinte forma:

\(f(k+1) = P(x=k+1) = F(k+1) - F(k) \hspace{0.3cm} (2) \)

Nesse sentido, com base na tabela do enunciado do exercício, o primeiro passo é importar a biblioteca numpy e definir 2 vetores auxiliares: \( k\) com os valores \( \{0,1,2,3,4,5\}\) assumidos pela variável aleatória, e \(F\) como conjunto imagem de \(F(k)\). É importante que esses vetores estejam conforme a tabela, ou seja, emparelhados em ordem crescente. O código a seguir realiza essa tarefa:

 import numpy as np

k = [x for x in range(6)] # valores assumidos pela v.a

F = (0, 0.1, 0.3, 0.7, 0.8, 1) # Imagem de F(k)

Feito isso, o passo seguinte é, com base em \((2)\), definir uma função \(f(x)\) que receba o vetor \( F\) e retorne o conjunto imagem da função de distribuição de probabilidade \(f\), consoante o código a seguir:

def f(x):
    f = np.empty(len(x))
    f[0] = x[0]
    for i in range(len(x)-1):
        f[i+1] = x[i+1] - x[i]
    return f

Finalmente, definimos, no código abaixo, uma outra função, chamada \(fr(x)\), cujo argumento é qualquer número real. Essa função compara esse número com os elementos do vetor \(k\) e associa, se existir, o valor correspondente ao do output da função \(f(x)\) aplicada no vetor \(F\). Caso não haja correspondência, \(fr(x) = 0.\)

def fr(x):
     y = 0
     for i in range(len(k)):
         if x == k[i]:
             y = f(F)[i]
         else: y = y + 0
     return y

A função \(fr(x)\) é a função de distribuição de probabilidade solicitada. De fato, podemos testar, por exemplo, a probabilidade de \(x \) ser igual a \(2\) e encontraremos como resultado \(0.2\)

 fr(2) 

Por outro lado, se testarmos qualquer valor \( k \not \in \Omega = \{0,1,2,3,4,5\}\), \(fr(k) = 0\). Ou seja, como é de se esperar, a probabilidade de a variável aleatória ser igual a valor fora do espaço amostral é \( 0 \).

fr(57)

Por fim, note que a solução é flexível no sentido de, uma vez construídas as funções \( f(x)\) e \( fr(x) \), podemos redefinir os vetores \( k \) e \( F \) para qualquer dimensão e valores desejados para as entradas. Ou seja, é possível aplicar essa solução para diversas distribuições diferentes. O único requisito é que \( k \) e \( F \) estejam emparelhados em ordem crescente, tal qual na tabela do enunciado da questão

Código Ininterrupto

O código abaixo é o mesmo apresentado anteriormente. A diferença é que aqui não há as pausas para cada explicação

import numpy as np

k = [x for x in range(6)] # valores assumidos pela v.a

F = (0, 0.1, 0.3, 0.7, 0.8, 1) # Imagem de F(k)

def f(x):
    f = np.empty(len(x))
    f[0] = x[0]
    for i in range(len(x)-1):
        f[i+1] = x[i+1] - x[i]
    return f

def fr(x):
     y = 0
     for i in range(len(k)):
         if x == k[i]:
             y = f(F)[i]
         else: y = y + 0
     return y

fr(2)

fr(57)

Comentário Final

Ao enunciarmos a Propriedade 1, omitimos uma questão técnica, dispensável para um estudo introdutório de probabilidade, relacionada ao fato de o evento precisar ser "bem comportado", no sentido de pertencer a uma classe de conjuntos chamada sigma álgebra. Para mais detalhes, sugere-se qualquer livro sobre Teoria da Medida ou, para uma explicação intuitiva, o capítulo 4 do livro "A Primer in Econometric Theory" de John Stachurski.

0 votos
respondida Mar 20 por Thiago Lappicy (6 pontos)  

Ótima resposta feita por Vinícius, dando algo bem completo do ponto de vista teórico, até algo mais extenso, programando um modelo em python. Apesar de completa e bem detalhada, a questão em sí pede algo bem simples, possível de ser implementado facilmente até mesmo em um excel, pois pela própria definição apresentada na resposta e em diversos livros da área, para variáveis discretas temos que:

F(k + 1) = F(k + 1) - F(k)

Portanto a questão poderia ser facilmente respondida na mão ou em um excel ou algo do tipo, tendo em vista que as vezes é preferível a criação de um modelo mais parcimonioso, mais simples do que algo mais complexo - quando ambas estão corretas.

Tendo isso em mente, também é possível criar um script em R para poder responder qualquer questão similar a esta. Esse script podendo ser interativo ou não. Para esse problema, optou-se por fazer um interativo.

Portanto, a primeira coisa que deve ser feita, para um programa interativo, é pedir os valores de k (variável discreta) e os valores de F(k) (função de distribuição acumulada). Depois deve-se verificar se os vetores k e F(k) possuem o mesmo comprimento, caso não, houve algo errado (no sentido de que existe algum dado a mais ou a menos).

Em seguida é criada uma matriz com 3 colunas (uma sendo o valor de k, outra com valor de F(k) e a última com o valor de p(k) que será preenchido). Caso os valores de k dados pelo usuário não esteja em ordem crescente, é feito isso automaticamente, junmente com os valores de F(k) associados a cada k. Por último é calculado p(k) para cada k, sendo o primeiro igual a própria F(k). Caso queira ainda, é possível desenhar um gráfico mostrando o que é a F(k), representada por uma linha, e a p(k) representada por barras. O código completo está mostrado a seguir e embaixo do código está o gráfico para a questão.

frequency_function <- function() {

  pergunta1 <-
readline("Valores de k (Variável Aleatória Discreta): ")
  pergunta2 <-
readline("Valores de F(k) (função de distribuição acumulada):")

  k <- as.numeric(unlist(strsplit(pergunta1, ",")))
  F_k <- as.numeric(unlist(strsplit(pergunta2, ",")))

  if(length(k) != length(F_k)) {
   return("Comprimento de k e F(k) diferentes!") }

  # probabilidade p
  p <- matrix(nrow = length(k), ncol = 3)
  colnames(p) <- c("k", "F(k)", "p(k)")
  p[,1] <- k
  p[,2] <- F_k

  # Se não tiver em ordem crescente
  if(!all(diff(p[,1]) >= 0)) {
    p[,1] <- p[order(p[,1]), 1]
    p[,2] <- p[order(p[,1]), 2]
  }

  # preencher p
  for(i in 1:length(k)) {
    if(i == 1) p[i, 3] <- F_k[i]
    if(i > 1) p[i, 3] <- F_k[i] - F_k[(i-1)]
  }

p <<- p

  return(p)
}

# Aqui ele chama a função interativa
if(interactive()) frequency_function()

# Aqui é para fazer o gráfico
require(plotrix)

plot <- barp(p[2:nrow(p), 3], col = "grey70", xlab = "k",
             ylim = c(0, 1.1), xlim = c(0, (nrow(p)-0.5)))
lines(x = p[,1], y = p[,2])
points(x = p[,1], y = p[,2])

Segue a imagem do gráfico feito para essa questão:

A imagem será apresentada aqui.

comentou Mar 20 por Vinícius Oliveira (11 pontos)  
editado Mar 21 por Vinícius Oliveira
Obrigado pela resposta, Thiago! De fato, nesse caso,  seria mais simples solucionar o problema "na mão" ou até mesmo no excel. Na verdade, o objetivo da minha resposta foi não só solucionar o problema, como também aprofundar o entendimento do conteúdo em 2 sentidos:

1- Proporcionar, do ponto de vista teórico, alguma intuição detalhada sobre o porquê se utiliza a fórmula
P(x = k + 1) = F(k + 1) - F(k) sem precisar demonstrar formalmente o resultado

2 - Construir um algoritmo que resolvesse não só o problema em análise, como também  problemas mais gerais desse tipo com dados mais extensos, caso em que a resolução manual torna-se dispendiosa. Nesse cenário, resolver o problema, por exemplo, no excel, ainda seria viável e intuitivo. Contudo, implementamos a solução em python apenas para ilustrar como, com poucas linhas de código, podemos resolver problemas simples de estatística a partir de uma linguagem de programação

Diante de tudo isso, percebi, a partir do seu comentário, a importância de explicitar previamente os objetivos da minha resposta. Por isso, adicionei, na introdução da solução, um comentário esclarecendo isso
...