Neste capítulo apresentamos os comandos R
para variáveis aleatórias contínuas. Para variáveis contínuas, o padrão dos comandos é muito parecido com o padrão utilizado no capítulo anterior para variáveis discretas. Valem os mesmos prefixos, i.e., d para densidade, p para função distribuição, q para quantis e r para simulação. A Tabela a seguir apresenta os principais sufixos para distribuições contínuas:
R
.Distribuição | Sufixo | Parâmetros |
---|---|---|
Exponencial | -exp |
rate |
Normal | -norm |
mean, sd |
Gama | -gamma |
shape, rate, scale |
Qui-quadrado | -rchisq |
df |
t-Student | -t |
df |
F-Snedecor | -f |
df1, df2 |
Apresentaremos a seguir uma sequência de comandos para construir os gráficos da função densidade e distribuição acumulada de uma v.a. Normal padrão. Esta sequência de comandos pode ser utilizada para qualquer distribuição contínua.
x<-seq(-3,3,0.1) # Cria um intervalo de -3 a 3
fdnorm<-dnorm(x = x, mean = 0, sd=1) # Calcula a fdp da distr. normal para o intervalo x
fdanorm<-pnorm(q = x, mean = 0, sd=1) # Calcula a fda da distr. normal para o intervalo x
## Imprimindo os gráficos da fdp e fda:
par(mfrow=c(1,2))
plot(x=x,y=fdnorm,type="l", col="blue",lwd=2, main="f.d.p. da Distrib. Normal padrão",xlab="z")
plot(x=x,y=fdanorm,type="l", col="blue",lwd=2, main="f.d.a. da Distrib. Normal padrão",xlab="z")
lines(x=c(0,0),y=c(0,fdanorm[x==0]),lty=2, col="gray")
Assim, para imprimir os gráficos das f.d.p. e f.d.a. de outras distribuições contínuas, basta modificar o sufixo -norm
para a distribuição desejada e calcular a f.d.p e f.d.a para um intervalo conveninente x
e parâmetros adequados da distribuição desejada. Uma forma alternativa é simplesmente utilizar o comando curve(.)
:
par(mfrow=c(1,2))
curve(dnorm(x = x, mean = 0, sd=1), xlim=c(-3,3), col="blue",lwd=2, main="f.d.p. da Distrib. Normal padrão",xlab="z")
curve(pnorm(q = x, mean = 0, sd=1), xlim=c(-3,3), col="blue",lwd=2, main="f.d.a. da Distrib. Normal padrão",xlab="z")
lines(x=c(0,0), y=c(0,fdanorm[x==0]), lty=2, col="gray")
Ver Exemplo 7.10.
Para o cálculo da área entre dois valores \(z_a\) e \(z_b\) da distribuição normal padrão, deve-se proceder da seguinte forma:
z_a=-1.96
z_b=1.96
#Cálculo da f.d.a até z_a = -1.96
pnorm(q = z_a, mean = 0, sd = 1)
## [1] 0.024998
#Cálculo da f.d.a até z_b = 1.96
pnorm(q = z_b, mean = 0, sd = 1)
## [1] 0.975
#Cálculo da f.d.a entre z_a = -1.96 e z_b = 1.96
pnorm(q = z_b, mean = 0, sd = 1) - pnorm(q = z_a, mean = 0, sd = 1)
## [1] 0.95
Estes valores correspondem ao cálculo da probabilidade das seguintes regiões da fdp:
Dessa forma, a Figura 7.12 Pode ser construída a partir dos seguintes comandos:
z<-seq(-3,3,0.1) # Cria um intervalo de -3 a 3
fdnorm<-dnorm(x = z, mean = 0, sd=1) # Calcula a fdp da distr. normal para o intervalo x
plot(x=z,y=fdnorm,type="l", col="blue",lwd=2, main="f.d.p. da Distrib. Normal padrão")
lines(x=c(1,1),y=c(0,fdnorm[x==1]),lty=2, col="gray") # Linha cinza tracejada em z=-1
lines(x=c(-1,-1),y=c(0,fdnorm[x==-1]),lty=2, col="gray") # Linha cinza tracejada em z=1
Figura 7.12: f.d.p. de uma v.a. Normal padrão: \(Z \sim N(0,1)\)
regiao=seq(-1,3,0.01) # Regiao a ser sombreada na figura
cord.x <- c(min(regiao),regiao,max(regiao))
cord.y <- c(0,dnorm(regiao,mean=2),0)
curve(dnorm(x,2,1),xlim=c(-1,5),bty="n", main='',xlab="",ylab="",xaxt="n") #A opção `xaxt="n"` suprime o eixo x
axis(1,at=3,labels = "y") # Comando para imprimir o eixo x com labels especificos
polygon(cord.x,cord.y,col='lightgray') # imprime a regiao sombreada
Figura 7.13: representação Gráfica de F(y) como área
curve(pnorm(q = x, mean = 0, sd=1), xlim=c(-3,3), col="blue",lwd=2,ylab="",xlab="z")
lines(x=c(0,0), y=c(0,fdanorm[x==0]), lty=2, col="gray")
Figura 7.14: f.d.a. da normal padrão
regiao=seq(1,2,0.01)
cord.x <- c(min(regiao),regiao,max(regiao))
cord.y <- c(0,dnorm(regiao),0)
curve(dnorm(x,0,1),xlim=c(-3,3),main='',xaxt="n",ylab="")
axis(1,at=c(1,2),labels = c("a","b"))
polygon(cord.x,cord.y,col='lightgray')
Figura 7.15: ilustração gráfica da \(P(a\le X \le b)\) para uma v.a. normal
regiao=seq(0,2,0.01)
cord.x <- c(min(regiao),regiao,max(regiao))
cord.y <- c(0,dnorm(regiao),0)
curve(dnorm(x,0,1),xlim=c(-3,3),main='',xaxt="n",xlab="z") #A opção `xaxt="n"` suprime o eixo x
axis(1,at=c(0,2),labels = c("0","z_c")) # Comando para imprimir o eixo x com labels especificos
polygon(cord.x,cord.y,col='lightgray') # Comando para sombrear a região no gráfico
Figura 7.16: \(P(0\le Z \le z_c)\) fornecido pela Tabela III
O cálculo da probabilidade para \(z_c=1.73\) é:
pnorm(1.73)-pnorm(0)
## [1] 0.45818
Para as demais probabilidades do exemplo, faremos:
(a) \(P(-1.73\le Z\le 0)\)
pnorm(0)-pnorm(-1.73)
## [1] 0.45818
1-pnorm(1.73)
## [1] 0.041815
pnorm(-1.73)
## [1] 0.041815
pnorm(1.73)-pnorm(0.47)
## [1] 0.27736
par(mfrow=c(1,3))
regiao=seq(0,1.73,0.01)
cord.x <- c(min(regiao),regiao,max(regiao))
cord.y <- c(0,dnorm(regiao),0)
curve(dnorm(x,0,1),xlim=c(-3,3),main='',xlab="z")
polygon(cord.x,cord.y,col='lightgray')
regiao1=seq(-3,-1.73,0.01)
regiao2=seq(1.73,3,0.01)
cord.x1 <- c(min(regiao1),regiao1,max(regiao1))
cord.x2 <- c(min(regiao2),regiao2,max(regiao2))
cord.y1 <- c(0,dnorm(regiao1),0)
cord.y2 <- c(0,dnorm(regiao2),0)
curve(dnorm(x,0,1),xlim=c(-3,3),main='',xlab="z")
polygon(cord.x1,cord.y1,col='lightgray')
polygon(cord.x2,cord.y2,col='lightgray')
regiao=seq(0.47,1.73,0.01)
cord.x <- c(min(regiao),regiao,max(regiao))
cord.y <- c(0,dnorm(regiao),0)
curve(dnorm(x,0,1),xlim=c(-3,3),main='',xlab="z")
polygon(cord.x,cord.y,col='lightgray')
Figura 7.17: Ilustração do cálculo de probabilidade para a N(0,1).
No R
, é possivel calcular probabilidades para v.a. X com média e desvio padrão diferentes de 0 e 1, respectivamente, sem a necessidade de transformá-las para uma v.a. Z, desde que se especifique os valores de média e desvio padrão da distribuição desejada. No exemplo, \(P(2\le X\le 5)\):
pnorm(5,mean=3,sd=4)-pnorm(2,mean=3,sd=4)
## [1] 0.29017
par(mfrow=c(1,2))
regiao=seq(2,5,0.01)
cord.x <- c(min(regiao),regiao,max(regiao))
cord.y <- c(0,dnorm(regiao,3,4),0)
curve(dnorm(x,3,4),xlim=c(-9,15),main='X - Normal(3,16)')
polygon(cord.x,cord.y,col='lightgray')
lines(x=c(3,3),y=c(0,dnorm(3,3,4)))
regiao=seq(-0.25,0.5,0.01)
cord.x <- c(min(regiao),regiao,max(regiao))
cord.y <- c(0,dnorm(regiao),0)
curve(dnorm(x,0,1),xlim=c(-3,3),main='Z - Normal Padrão',xlab="z")
polygon(cord.x,cord.y,col='lightgray')
lines(x=c(0,0),y=c(0,fdnorm[x==0]))
Figura 7.18: Ilustração do cálculo de \(P(2\le X\le 5)\) para a v.a. N(3,16).
Note que, apesar de a probabilidade e o formato da curva serem as mesmas, o que muda de uma figura para outra é a escala. Se imprimirmos ambos os gráficos na mesma escala, veremos o que acontece quando fazemos a transformação para a normal padrão:
pnorm(10000,mean=10000,sd=1500)
## [1] 0.5
1-pnorm(10000,mean=10000,sd=1500)
## [1] 0.5
pnorm(15000,mean=10000,sd=1500)-pnorm(12000,mean=10000,sd=1500)
## [1] 0.090782
1-pnorm(20000,mean=10000,sd=1500)
## [1] 1.3084e-11
par(mfrow=c(1,2))
curve(dexp(x,1),xlim=c(0,5),main="f.d.p para X~exponencial(1)",xlab="(a)")
curve(pexp(x,1),xlim=c(0,5),main="f.d.a para X~exponencial(1)",xlab="(b)")
Figura 7.8: Distribuição Exponencial com \(\beta=1\).
Para o cálculo da probabilidade \(P(T>500)\), o comando é:
1-pexp(500,rate=1/500)
## [1] 0.36788
Queremos calcular \(P(Y\ge 7)\), com Y~bin(10,1/2). Já vimos no Capítulo 6 que o comando para tal cálculo é:
1-pbinom(6,size=10,prob = 1/2)
## [1] 0.17188
A aproximação normal para esta variável, nesta região, é:
1-pnorm(6.5,mean=5, sd=sqrt(2.5))
## [1] 0.17139
ymax=0.3
barplot(height = dbinom(0:10,size=10,prob = 1/2),col = "white",ylim=c(0,ymax))
par(new=T)
barplot(height = c(rep(0,7),dbinom(7:10,size=10,prob = 1/2)),ylim=c(0,ymax),
border=c(rep(NA,7),rep("black",4)), col = c(rep(NA,7),rep("gray",4)))
par(new=T)
curve(dnorm(x,mean=5, sd=sqrt(2.5)),xlim=c(-0.8,10.8),ylim=c(0.0,ymax),xaxs="i",yaxs="i",ylab="")
Figura 7.20: Aproximação de \(P\ge7\) pela N(5,2.5)
\(P(3<Y\le 6)=\)
pbinom(6,size=10,prob=1/2)-pbinom(3,size=10,prob=1/2)
## [1] 0.65625
\(P(3.5\le X \le 6.5)=\)
pnorm(6.5,mean=5,sd=sqrt(2.5))-pnorm(3.5,mean=5,sd=sqrt(2.5))
## [1] 0.65722
ymax=0.3
barplot(height = dbinom(0:10,size=10,prob = 1/2),col = "white",ylim=c(0,ymax))
par(new=T)
barplot(height = c(rep(0,4),dbinom(4:6,size=10,prob = 1/2),rep(0,4)),ylim=c(0,ymax),
border=c(rep(NA,4),rep("black",3),rep(NA,4)), col = c(rep(NA,4),rep("gray",3),rep(NA,4)))
par(new=T)
curve(dnorm(x,mean=5, sd=sqrt(2.5)),xlim=c(-0.8,10.8),ylim=c(0.0,ymax),xaxs="i",yaxs="i",ylab="")
Figura 7.21: Aproximação de \(P(3<Y\le7)\) pela N(5,2.5)
curve(dgamma(x,shape = 3, scale = 1),xlim=c(0,10))
Figura 7.25: Gráfico da f.d.p. de uma distribuição gama, \(\alpha=3\) e \(\beta=1\).
par(mfrow=c(1,3))
curve(dchisq(x,df=1),xlim=c(0,10),xlab="(a) df=1")
curve(dchisq(x,df=2),xlim=c(0,10),xlab="(b) df=2")
curve(dchisq(x,df=3),xlim=c(0,10),xlab="(c) df=3")
Figura 7.26: Gráficos da distribuição qui-quadrado.
\(Y\sim \chi^2(10)\), então:
\(P(Y>y_0)=0.99\Rightarrow y_0=2.558\).
qchisq(1-.99,df=10)
## [1] 2.5582
regiao=seq(2.6,20,0.01)
cord.x <- c(min(regiao),regiao,max(regiao))
cord.y <- c(0,dchisq(regiao,10),0)
curve(dchisq(x,10),xlim=c(0,20),xlab="",ylim=c(0,0.15),ylab="",
col="lightblue3",lwd=2,xaxt="n")
axis(1,at=2.6,labels = "y_0=2.558")
polygon(cord.x,cord.y,col='lightblue3')
Figura 7.27: Valores tabelados da distribuição \(\chi^2(\nu)\).
\(P(Y>y_0)=0.05\Rightarrow y_0=18,307\).
qchisq(1-0.05,df=10)
## [1] 18.307
regiao=seq(18.3,20,0.01)
cord.x <- c(min(regiao),regiao,max(regiao))
cord.y <- c(0,dchisq(regiao,10),0)
curve(dchisq(x,10),xlim=c(0,20),ylim=c(0,0.15),xlab="",ylab="",
col="lightblue3",lwd=2,xaxt="n")
axis(1,at=18.3,labels = "y_0=18.307")
polygon(cord.x,cord.y,col='lightblue3')
Figura 7.27: Valores tabelados da distribuição \(\chi^2(\nu)\).
Para \(\nu>30\):
print(paste("Aproximação Normal: ",round(qnorm(1-0.099),3)))
## [1] "Aproximação Normal: 1.287"
print(paste("Valor /qui-quadrado: ",round(qchisq(1-0.1,df=30),3)))
## [1] "Valor /qui-quadrado: 40.256"
curve(dnorm(x),ylim=c(0,0.5),xlim=c(-3,3),xlab="",col="darkred",ylab="")
par(new=TRUE)
curve(dt(x,df=1),ylim=c(0,0.5),xlim=c(-3,3),xlab="",col="blue",lty=2,ylab="")
legend(-3,0.5,lty=c(1,2), col=c("darkred","blue"),legend=c("normal padrão", "t-student"),bty="n",lwd=c(2,2),cex=0.75)
Figura 7.28: A Distribuição t de Student e a distribuição normal padrão
\(P(-1.943 < t(6)< 1.943)=\)
pt(1.943,df = 6)-pt(-1.943,df = 6)
## [1] 0.89998
\(P( t(6)> 2.447)=\)
1-pt(2.447,df = 6)
## [1] 0.024997
\(F \sim F(5,7)\), então \(P(F > 3.97)=\)
pf(3.97,df1 = 5, df2 = 7)
## [1] 0.94996
Para calcular o \(f_0\), fazemos:
qf(0.05,df1 = 5, df2 = 7)
## [1] 0.20509
print(paste("Q(0.5)=",round(qnorm(0.5),3)))
## [1] "Q(0.5)= 0"
print(paste("Q(0.25)=",round(qnorm(0.25),3)))
## [1] "Q(0.25)= -0.674"
print(paste("Q(0.3)=",round(qnorm(0.3),3)))
## [1] "Q(0.3)= -0.524"
print(paste("Q(0.75)=",round(qnorm(0.75),3)))
## [1] "Q(0.75)= 0.674"
print(paste("Q(0.5)=",round(qexp(0.5,rate = 1/2),3)))
## [1] "Q(0.5)= 1.386"
Para obter a f.d.a. da distribuição normal, utilizamos, como antes, o comando pnorm
:
pnorm(8.65,mean=10,sd=25)
## [1] 0.47847
Para obter F(x), utilizamos, como antes, o comando qnorm
:
qnorm(0.8269,mean=10,sd=25)
## [1] 33.55
Da mesma forma, os comandos para a distribuição exponencial serão pexp
e qexp
, respectivamente:
pexp(0.85,rate=2)
## [1] 0.81732
qexp(0.345,rate=2)
## [1] 0.21156
curve(pnorm(q = x, mean = 0, sd=1), xlim=c(-4,4), col="blue",lwd=2,ylab="",xlab="z")
lines(x=c(0,0), y=c(0,fdanorm[x==0]), lty=2, col="gray")
Figura 7.31: Gráfico da f.d.a. da N(0,1). R.