O programa R inclui funcionalidade para operações com distribuições de probabilidades. Para cada distribuição há 4 operações básicas indicadas pelas letras:
A funcionalidade para distribuição normal é implementada por argumentos que combinam as letras acima com o termo norm. Vamos ver alguns exemplos com a distribuição normal padrão.
> dnorm(-1) [1] 0.2419707 > (1/sqrt(2*pi)) * exp((-1/2)*(-1)^2) [1] 0.2419707 > pnorm(-1) [1] 0.1586553 > qnorm(0.975) [1] 1.959964 > rnorm(10) [1] -0.0442493 -0.3604689 0.2608995 -0.8503701 -0.1255832 0.4337861 [7] -1.0240673 -1.3205288 2.0273882 -1.7574165
O primeiro valor acima corresponde ao valor da densidade da normal
Nota: cada vez que o comando rnorm é chamado diferentes elementos da amostra são produzidos, porque a semente do gerador é modificada. Para gerar duas amostras idênticas deve-se usar o comando set.seed como ilustrado abaixo.
> set.seed(214) # define o valor da semente > rnorm(5) # amostra de 5 elementos [1] -0.46774980 0.04088223 1.00335193 2.02522505 0.30640096 > rnorm(5) # outra amostra de 5 elementos [1] 0.4257775 0.7488927 0.4464515 -2.2051418 1.9818137 > set.seed(214) # retorna o valor da semente ao valor inicial > rnorm(5) # gera novamente a primeira amostra de 5 elementos [1] -0.46774980 0.04088223 1.00335193 2.02522505 0.30640096
As funções acima possuem argumentos adicionais, para os quais valores padrão (default) foram assumidos, e que podem ser modificados. Usamos args para ver os argumentos de uma função e help para visualisar a documentação detalhada:
> args(rnorm) function (n, mean = 0, sd = 1)
As funções relacionadas à distribuição normal tem (entre outros) os argumentos mean e sd para definir média e desvio padrão da distribuição que podem ser modificados como nos exemplos a seguir.
> qnorm(0.975, mean = 100, sd = 8) [1] 115.6797 > qnorm(0.975, m = 100, s = 8) [1] 115.6797 > qnorm(0.975, 100, 8) [1] 115.6797
Para informações mais detalhadas pode-se usar a função help. O comando
> help(rnorm)irá exibir em uma janela a documentação da função que pode também ser chamada com ?rnorm. Note que ao final da documentação são apresentados exemplos que podem ser rodados pelo usuário e que auxiliam na compreensão da funcionalidade.
Estas funções aceitam também vetores em seus argumentos como ilustrado nos exemplo abaixo.
> qnorm(c(0.05, 0.95)) [1] -1.644854 1.644854 > rnorm(4, mean=c(0, 10, 100, 1000)) [1] 0.1599628 9.0957340 100.5595095 999.9129392 > rnorm(4, mean=c(10, 20, 30, 40), sd=c(2, 5)) [1] 10.58318 21.92976 29.62843 42.71741Note que no último exemplo a lei da reciclagem foi utilizada no vetor de desvios padrão, i.e. os desvios padrão utilizados foram .
Cálculos de probabilidades usuais, para os quais utilizávamos tabelas estatísticas podem ser facilmente obtidos como no exemplo a seguir.
Seja uma v.a. com distribuição . Calcular as probabilidades:
> pnorm(95, 100, 10) [1] 0.3085375 > pnorm(110, 100, 10) - pnorm(90, 100, 10) [1] 0.6826895 > 1 - pnorm(95, 100, 10) [1] 0.6914625 > pnorm(95, 100, 10, lower=F) [1] 0.6914625Note a última probabilidade foi calculada de duas formas diferentes, sendo a segunda usando o argumento lower mais estável numericamente.
A seguir vamos ver comandos para fazer gráficos de distribuições de probabilidade. Vamos fazer gráficos de funções de densidade e de probabilidade acumulada. Estude cuidadosamente os comandos abaixo e verifique os gráficos por eles produzidos. A Figura 1 mostra gráficos da densidade (esquerda) e probabilidade acumulada da normal padrão produzidos com os comandos:
> plot(dnorm, -3, 3) > plot(pnorm, -3, 3)
A Figura
> plot(function(x) dnorm(x, 100, 8), 70, 130) > plot(function(x) pnorm(x, 100, 8), 70, 130)
Podemos incluir títulos e mudar texto dos eixos conforme mostrado na gráfico da esquerda da Figura
> plot(dnorm, -3, 3, xlab='valores de X', ylab='densidade de probabilidade') > title('Distribuicão Normal\nX ~ N(100, 64)') > plot(function(x) dnorm(x, 100, 8), 60, 140, ylab='f(x)') > plot(function(x) dnorm(x, 90, 8), 60, 140, add=T, col=2) > plot(function(x) dnorm(x, 100, 15), 60, 140, add=T, col=3) > legend(120, 0.05, c("N(100,64)","N(90,64)","N(100,225)"), fill=1:3)
Cálculos para a distribuição binomial são implementados combinando as letras básicas vistas acima com o termo binom. Vamos primeiro investigar argumentos e documentação com os comandos args e binom.
> args(dbinom) function (x, size, prob, log = FALSE) > help(dbinom)
Seja uma v.a. com distribuição Binomial com e . Vamos ver os comandos do R para:
Note que sendo uma distribuição discreta de probabilidades os gráficos são diferentes dos obtidos para distribuição normal e os cálculos de probabilidades devem considerar as probabilidades nos pontos. Os gráficos das funções de densidade e probabilidade são mostrados na Figura
> x <- 0:10 > fx <- dbinom(x, 10, 0.35) > plot(x, fx, type='h') > Fx <- pbinom(x, 10, 0.35) > plot(x, Fx, type='S') > dbinom(7, 10, 0.35) [1] 0.02120302 > pbinom(7, 10, 0.35) [1] 0.9951787 > sum(dbinom(0:7, 10, 0.35)) [1] 0.9951787 > 1-pbinom(7, 10, 0.35) [1] 0.004821265 > pbinom(7, 10, 0.35, lower=F) [1] 0.004821265 > pbinom(6, 10, 0.35) - pbinom(3, 10, 0.35) [1] 0.4601487 > sum(dbinom(4:6, 10, 0.35)) [1] 0.4601487
Nos exercícios abixo iremos também usar o R como uma calculadora estatística para resolver alguns exemplos/exercícios de probabilidade tipicamente apresentados em um curso de estatística básica.
Os exercícios abaixo com indicação de página foram retirados de:
Magalhães, M.N. & Lima, A.C.P. (2001) Noções de Probabilidade e
Estatística. 3 ed. São Paulo, IME-USP. 392p.
Paciente | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
Incidência | 2 | 5 | 0 | 2 | 1 | 5 | 3 | 3 | 3 | 2 | 0 | 1 | 1 |
Paciente | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
Incidência | 4 | 5 | 2 | 2 | 3 | 2 | 1 | 5 | 4 | 0 | 0 | 3 | 3 |
Incidência | 0 | 1 | 2 | 3 | 4 | 5 |
0.1 | 0.1 | 0.3 | 0.3 | 0.1 | 0.1 |