Não se esqueça de verificar o diretório de trabalho usando as funções getwd() e setwd(), esses passos foram detalhados nas rotinas anteriores.
Vamos continuar com a base de dados que você baixou no Classroom e que foi trabalhada na prática 2, Exemplo_AGUA.csv, fizemos algumas alterações nesta base e agora ela está nomeada como dados_agua_sna. Caso seja necessário importá-la novamente e prepará-la verifique a Prática 2.
Certamente existe uma dezena de formas de construir os comandos para calcular probabilidades no R/RStudio, aqui faremos uma dessas maneiras usando as funções básicas do software, ou seja, sem nenhum pacote. A ideia é entender a construção dos cálculos.
nrow() nos dá o número de linhas / colunas de uma matriz, então, informamos o banco de dados, dentro do banco de dados qual a coluna e, por fim, qual o critério.A fórmula empregada será P(A): número de resultados no evento A dividido pelo número de resultados no espaço amostral.
Neste exemplo, o número de resultados no evento A é de 44 municípios (pertecem a região de Ribeirão Preto) e o espaço amostral é o total de municípios que apresentam informações, 506.
nrow(dados_agua_sna[dados_agua_sna$Regic_interm =="Ribeirão Preto",])
[1] 44
nrow(dados_agua_sna)
[1] 506
PA <- nrow(dados_agua_sna[dados_agua_sna$Regic_interm == "Ribeirão Preto",])/nrow(dados_agua_sna)
PA
[1] 0.08695652
Ou seja, a probabilidade de ao selecionar aleatoriamente um município dentre os 506 e este ser da região de Ribeirão Preto é de 8,7%.
Probabilidade condicional simples: vamos calcular a probabilidade de selecionar, aleatoriamente, um município que tenha o IDHM_Tipo “alto”, dado que é da Região de Ribeirão Preto. O evento A é ser um município da região de Ribeirão Preto e o evento B é ser IDHM_Tipo alto, considerando que é da região de Ribeirão Preto.
A fórmula empregada será P(B|A): número de resultados no evento B condicionado ao evento A dividido pelo número de resultados no espaço amostral do evento A.
Neste exemplo, o número de resultados no evento B condicionado ao evento A é de 42 municípios (pertecem a região de Ribeirão Preto e apresentam IDHM do tipo “alto”) e o número de resultados no espaço amostral do evento A é de 44 municípios (pertecem a região de Ribeirão Preto). Seguindo as mesmas funções utilizadas anteriormente:
nrow(dados_agua_sna[dados_agua_sna$IDHM_tipo == "alto" & dados_agua_sna$Regic_interm == "Ribeirão Preto",])
[1] 42
nrow(dados_agua_sna[dados_agua_sna$Regic_interm == "Ribeirão Preto",])
[1] 44
PBdadoA <- nrow(dados_agua_sna[dados_agua_sna$IDHM_tipo == "alto" & dados_agua_sna$Regic_interm == "Ribeirão Preto",])/nrow(dados_agua_sna[dados_agua_sna$Regic_interm == "Ribeirão Preto",])
PBdadoA
[1] 0.9545455
Ou seja, a probabilidade de um município ter o IDHM_Tipo “alto”, dado que é da Região de Ribeirão Preto é de 95,45%.
O evento A é ser um município da região de Ribeirão Preto e o evento B|A é ser IDHM_Tipo alto, dado que é da região de Ribeirão Preto. A fórmula empregada será P(A)*P(B|A), pois os eventos são dependentes:
P(A) = número de resultados no evento A dividido pelo número de resultados no espaço amostral. Neste exemplo, o número de resultados no evento A é de 44 municípios (pertecem a região de Ribeirão Preto) e o espaço amostral é o total de municípios que apresentam informações, 506.
P(B|A) = número de resultados no evento B condicionado ao evento A dividido pelo número de resultados no espaço amostral do evento A. Neste exemplo, o número de resultados no evento B condicionado ao evento A é de 42 municípios (pertecem a região de Ribeirão Preto e apresentam IDHM do tipo “alto”) e o número de resultados no espaço amostral do evento A é de 44 municípios (pertecem a região de Ribeirão Preto).
Note que, nos dois exemplos anteriores já calculamos P(A) e P(B|A), vamos aproveitar que criamos objetos para cada um e usá-los aqui:
PA
[1] 0.08695652
PBdadoA
[1] 0.9545455
PA*PBdadoA
[1] 0.08300395
Ou seja, a probabilidade de que um município selecionado, aleatoriamente, seja da região de Ribeirão Preto e tenha um IDHM_Tipo “alto” é de 8,3%.
DICA: usando a função prob.table() é possível obter as probabilidades que calculamos anteriormente, conforme os critérios indicados.
Verifique na coluna “Ribeirão Preto”, o resultado foi exatamente o que encontramos detalhando cada passo em PA, ou seja, a probabilidade de ao selecionar aleatoriamente um município dentre os 506 e este ser da região de Ribeirão Preto é de 8,7%.
prop.table(table(dados_agua_sna$Regic_interm))
Araçatuba Araraquara Bauru Campinas Marília Presidente Prudente Ribeirão Preto
0.06916996 0.02766798 0.07312253 0.13241107 0.07114625 0.08498024 0.08695652
São José RPreto São José Campos São Paulo Sorocaba
0.14822134 0.06324111 0.09881423 0.14426877
Verifique na coluna “alto” e na linha “Ribeirão Preto” o resultado foi exatamente o que encontramos detalhando cada passo em PBdadoA, ou seja, a probabilidade de um município ter o IDHM_Tipo “alto”, dado que é da Região de Ribeirão Preto é de 95,45%.
prop.table(table(dados_agua_sna$Regic_interm,dados_agua_sna$IDHM_tipo),1)
alto medio muito alto
Araçatuba 0.91428571 0.05714286 0.02857143
Araraquara 0.78571429 0.00000000 0.21428571
Bauru 0.89189189 0.05405405 0.05405405
Campinas 0.82089552 0.08955224 0.08955224
Marília 0.88888889 0.08333333 0.02777778
Presidente Prudente 0.93023256 0.04651163 0.02325581
Ribeirão Preto 0.95454545 0.02272727 0.02272727
São José do Rio Preto 0.98666667 0.01333333 0.00000000
São José dos Campos 0.78125000 0.15625000 0.06250000
São Paulo 0.84000000 0.04000000 0.12000000
Sorocaba 0.65753425 0.34246575 0.00000000
Verifique na coluna “alto” e na linha “Ribeirão Preto” o resultado foi exatamente o que encontramos detalhando cada passo em PA*PBdadoA, ou seja, a probabilidade de que um município selecionado, aleatoriamente, seja da região de Ribeirão Preto e tenha um IDHM_Tipo “alto” é de 8,3%.
prop.table(table(dados_agua_sna$Regic_interm,dados_agua_sna$IDHM_tipo))
alto medio muito alto
Araçatuba 0.063241107 0.003952569 0.001976285
Araraquara 0.021739130 0.000000000 0.005928854
Bauru 0.065217391 0.003952569 0.003952569
Campinas 0.108695652 0.011857708 0.011857708
Marília 0.063241107 0.005928854 0.001976285
Presidente Prudente 0.079051383 0.003952569 0.001976285
Ribeirão Preto 0.083003953 0.001976285 0.001976285
São José do Rio Preto 0.146245059 0.001976285 0.000000000
São José dos Campos 0.049407115 0.009881423 0.003952569
São Paulo 0.083003953 0.003952569 0.011857708
Sorocaba 0.094861660 0.049407115 0.000000000
Cada distribuição de probabilidade tem seu próprio conjunto de parâmetros que precisam ser passados como argumentos nas funções do R/RStudio.
O R/RStudio fornece as seguintes funções para as distribuições, onde name representa o nome da distribuição fornecida:
dname(): função densidade
pname(): função distribuição cumulativa
qname(): quantis
rname(): geração de número aleatório
A distribuição binomial modela variáveis binárias (sim/não), ou seja, a probabilidade de x sucessos em n realizações.
n é o número de tentativas
x é o número de sucessos em n tentativas
p = probabilidade de sucesso em uma única tentativa
q = probabilidade de fracasso em uma única tentativa
Suponha que gostaríamos de saber qual a probabilidade de um município com IDHM_tipo “médio” ao selecionarmos, aleatoriamente, 8 municípios.
n é o número de tentativas
n <- 8
n
[1] 8
p = probabilidade de sucesso em uma única tentativa
p <- nrow(dados_agua_sna[dados_agua_sna$IDHM_tipo =="medio",])/nrow(dados_agua_sna)
p
[1] 0.09683794
q = probabilidade de fracasso em uma única tentativa
q <- 1-p
q
[1] 0.9031621
Considere os seguintes casos:
dbinom(3,size = n, prob = p)
[1] 0.03055998
pbinom(3, size = n, prob = p)
[1] 0.9955334
1-pbinom(3, size = n, prob = p)
[1] 0.004466588
Notem que, no caso em que temos o número de sucessos exato usamos a função densidade dbinom() e nos casos em que não temos um número de sucessos exato usamos a função distribuição cumulativa pbinom().Além disso, usamos os objetos (n e p), mas também poderíamos colocar os valores direto nos argumentos, por exemplo dbinom(3,size = 8, prob = 0.09683794).
A distribuição normal modela variáveis contínuas que apresentem média, mediana e moda centralizadas de maneira a produzir uma forma de sino simétrica em torno da média (ou pelo menos aproximadamente).
ATENÇÃO: como nosso conjunto de dados não é populacional, pois não estamos trabalhando com os 645 municípios do estado de São Paulo, mas sim com uma amostra de 506, deveríamos utilizar a distribuição t-Student por meio de um intervalo de confiança e ou um teste de hipótese para confirmar nossa inferência com certo grau de confiança. Contudo, vamos usar os dados para ilustrar a distribuição normal padrão apenas a título de exemplo.
Antes de proceder com os cálculos de distribuição vamos dar uma olhada na adequação dos dados à distribuição normal, usando o gráfico Qqplot. A distribuição de uma determinada variável também pode ser visualizada com um qqplot, que compara duas distribuições de dados traçando quantis. Para desenhar um qqplot comparando a distribuição de cons1 com uma curva normal, usaremos as funções qqnorm() e qqline(). Vamos escolher a variável consumo de água per capita em m3/ano (cons1):
qqnorm(dados_agua_sna$cons1)
qqline(dados_agua_sna$cons1, col = "red")
Figura 2 - Q-QPlot
O qqplot de cons1 sugere uma certa linearidade pela proximidade com a curva normal (em vermelho) nos quantis centrais, desviando da curva em valores extremos (muito altos e muito baixos - outliers).
Suponha que gostaríamos de saber qual a probabilidade de um município apresentar um consumo de água per capita em m3/ano (cons1) menor ou igual à 30 m3/ano. Precisamos informar na função os argumentos:
q: o valor da variável que estamos interessados em saber a probabilidade
mean: a média da variável que estamos interessados em saber a probabilidade
sd: o desvio padrão da variável que estamos interessados em saber a probabilidade
pnorm(q= 30, mean = mean(dados_agua_sna$cons1), sd = sd(dados_agua_sna$cons1))
[1] 0.1567932
Suponha que gostaríamos de saber qual a probabilidade de um município apresentar um consumo de água per capita em m3/ano (cons1) maior do que 65 m3/ano. Precisamos informar na função os mesmos argumentos citados anteriormente. Contudo, a função acumula a probabilidade até 65 m3/ano, mas queremos acima desse valor, então, usamos o complementar (1-)
1-pnorm(q= 65, mean = mean(dados_agua_sna$cons1), sd = sd(dados_agua_sna$cons1))
[1] 0.1327564
Notem que, usamos os objetos do banco de dados para a média(mean) e o desvio padrão (sd), mas também poderíamos colocar os valores direto nos argumentos.
Para uma variável aleatória que é normalmente distribuída (ou aproximadamente normalmente distribuída), a variável média amostral comporta-se tal qual outro modelo, a distribuição t.
A distribuição t é uma família de curvas, cada uma determinada por um parâmetro chamado de graus de liberdade n-k; sendo “n” o tamanho da amostra e “k” o número de coeficientes de análise. Assim, quando usamos a distribuição t para estimar uma média populacional (apenas um coeficiente), os graus de liberdade são iguais ao tamanho da amostra menos um.
Usaremos essa distribuição na construção de intervalos de confiança e testes de hipótese na análise inferencial.
A função mais usada será qt() para descobrir o t crítico (ou o t tabelado) para construir a margem de erro no intervalo de confiança e decidir sobre a rejeição ou não rejeição da hipótese nula no teste de hipótese.
Suponha que precisamos descobrir qual é o t crítico (ou t tabelado) para um nível de confiança de 95% quando o tamanho da amostra é o do nosso exemplo, ou seja, 506. Considere ainda, que queremos estimar a média populacional (apenas um coeficiente), os graus de liberdade (gl) são iguais ao tamanho da amostra menos um (n-1).
nível de confiança: colocar o nível de confiança com a expressao (1-alpha, sendo alpha o nível de significância) e dividir por dois, pois, no geral queremos bicaudal. Vamos usar 1-0.05 para obter 95% de nível de confiança.
gl ou df (degrees of freedom): 506-1 = 505
qt (p= 1-0.05 / 2, df=505)
[1] 1.964673
Notem que, a partir dos 30 g.l., a distribuição t tende a se aproximar da distribuição normal padrão, muito próximo do score z de 95%.
ATENÇÃO: não se esqueça de salvar seu script e exportar seus dados caso tenha feita alguma modificação, esses passos foram detalhados nas rotinas anteriores!