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 2 mostra gráficos da densidade (esquerda) e probabilidade acumulada da produzidos com os comandos:
> 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 3 e nos dois primeiros comandos abaixo. Os demais comandos mostram como colocar diferentes densidades em um um mesmo gráfico como ilustrado à direita da mesma 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 4.
> 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 |
Estudos anteriores assumem que a incidência de câncer em parentes próximos pode ser modelada pela seguinte função discreta de probabilidades:
Incidência | 0 | 1 | 2 | 3 | 4 | 5 |
![]() |
0.1 | 0.1 | 0.3 | 0.3 | 0.1 | 0.1 |