Preparo Prévio:
Hoje:
Próxima aula:
In [1]:
%matplotlib inline
import os
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from scipy import stats
from scipy.stats import norm
Num determinado momento em um certo país, a taxa de juros ($X$) pode variar 0,25 pontos percentuais (pp), para cima ou para baixo, ou manter-se constante. Já a taxa de câmbio ($Y$) pode variar para mais ou para menos em 1 pp, ou manter-se constante. A tabela seguinte reflete as distribuições marginais e conjunta dessas duas taxas representadas, aqui, por $X$ e $Y$.
Um investidor aplica a mesma quantia num fundo que acompanha a variação da taxa de juros ($X$) e num fundo que acompanha a variação cambial ($Y$). Ao final do dia ele resgatará seu investimento.
In [2]:
#Valores da tabela
y=[-1,0,1] #colunas
x=[-0.25,0,0.25] #linhas
probXY=[[[] for i in range(3)] for i in range(3)]
pxy=[0.05,0.07,0.26,0.075,0.21,0.12,0.125,0.07,0.02]
k=0
for i in range(3):
for j in range(3):
probXY[i][j]=pxy[k]
k+=1
print(probXY)
In [3]:
#item 1
#Distribuição de X
probX=[0,0,0]
for i in range(3):
for j in range(3):
probX[i]+=probXY[i][j]
for i in range(3):
print("Probabilidade de X=",x[i]," é igual a ", probX[i])
espX=0
varX=0
for i in range(3):
espX+=x[i]*probX[i]
for i in range(3):
varX+=(x[i]-espX)**2*probX[i]
print("Esperança de X=",espX)
print("Variância de X=",varX)
In [4]:
#item 1
#Distribuição de Y
probY=[0,0,0]
for i in range(3):
for j in range(3):
probY[j]+=probXY[i][j]
for i in range(3):
print("Probabilidade de Y=",y[i]," é igual a ", probY[i])
espY=0
varY=0
for i in range(3):
espY+=y[i]*probY[i]
for i in range(3):
varY+=(y[i]-espY)**2*probY[i]
print("Esperança de Y=",espY)
print("Variância de Y=",varY)
In [5]:
#item 1
#Covariância e Correlação
cov=0
for i in range(3):
for j in range(3):
cov+=(x[i]-espX)*(y[j]-espY)*probXY[i][j]
corr=cov/(varX*varY)**(0.5)
print("Covariância entre X e Y=", cov)
print("Correlação entre X e Y=", corr)
In [6]:
#item 2
#Distribuição do G=0.5*X +0.5*Y
g=[]
probG=[]
for i in range(3):
for j in range(3):
a = 0.5*x[i]+0.5*y[j],
if a in g:
probG[g.index(a)] += probX[i][j]
else:
g.append(a)
probG.append(probXY[i][j])
for i in range(len(g)):
print("Probabilidade de G=",g[i]," é igual a ", probG[i])
In [7]:
#item 3
#Esperança e variância de G
espG=0
varG=0
for i in range(len(g)):
espG+=g[i]*probG[i]
for i in range(len(g)):
varG+=(g[i]-espG)**2*probG[i]
print("Esperança e variância de G usando distribuição de probabilidade de G:")
print("Esperança de G=",espG)
print("Variância de G=",varG)
In [8]:
#item 4
#Esperança e variância de G usando propriedades de soma de variáveis aleatórias
#G=0.5X + 0.5Y
#G=0.5*(X+Y)
espGp = 0.5*(espX+espY)
varGp = 0.5**2*(varX+varY+2*cov)
print("Esperança e variância de G usando propriedades:")
print("Esperança de G=",espGp)
print("Variância de G=",varGp)
Um pacote com mil peças de resistor de carbono 1/8w tem o preço distribuído como uma normal com média 21 reais e desvio padrão de 2 reais, ou seja, $X$~$N(21;4)$.
Já jumpers/fios macho-fêmea com 40 unidades de 20 cm tem o preço distribuído como uma normal com média 18,90 reais e desvio padrão de 1,50 reais, ou seja, $Y$~$N(18,90;2,25)$.
Assuma que a correlação entre esses dois preços seja de 0,85.
np.random.multivariate_normal(mean, cov, n)
.
In [9]:
#Informações do enunciado
muX = 21
varX = 4
muY = 18.90
varY = 2.25
corXY = 0.95
covXY = corXY*(varX*varY)**(0.5)
mean = [muX, muY]
cov = [[varX, covXY], [covXY, varY]] # diagonal covariance
In [31]:
n=100
x, y = np.random.multivariate_normal(mean, cov, n).T
print("Matriz de covariâncias a partir dos n valores correlacionados:")
print(np.cov(x,y))
gasto = []
for i in range(len(x)):
gasto.append(x[i]+y[i])
data = pd.Series(gasto)
x2 = np.arange(20,80,1)
y2 = norm.pdf(x2, muX + muY, (varX + varY + 2*covXY)**0.5)
plt.plot(x2,y2, lw = 3, alpha = 0.7)
hist2 = data.plot(kind = 'hist',bins = 12, normed = True)
plt.show()
print('Média real:',data.mean())
print('Variância real:',data.var())
In [23]:
n=1000
x, y = np.random.multivariate_normal(mean, cov, n).T
print("Matriz de covariâncias a partir dos n valores correlacionados:")
print(np.cov(x,y))
gasto = []
for i in range(len(x)):
gasto.append(x[i]+y[i])
data = pd.Series(gasto)
x2 = np.arange(20,80,1)
y2 = norm.pdf(x2, muX + muY, (varX + varY + 2*covXY)**0.5)
plt.plot(x2,y2, lw = 3, alpha = 0.7)
hist2 = data.plot(kind = 'hist',bins = 12, normed = True)
plt.show()
print('Média real:',data.mean())
print('Variância real:',data.var())
In [30]:
n=10000
x, y = np.random.multivariate_normal(mean, cov, n).T
print("Matriz de covariâncias a partir dos n valores correlacionados:")
print(np.cov(x,y))
gasto = []
for i in range(len(x)):
gasto.append(x[i]+y[i])
data = pd.Series(gasto)
x2 = np.arange(20,80,1)
y2 = norm.pdf(x2, muX + muY, (varX + varY + 2*covXY)**0.5)
plt.plot(x2,y2, lw = 3, alpha = 0.7)
hist2 = data.plot(kind = 'hist',bins = 12, normed = True)
plt.show()
print('Média real:',data.mean())
print('Variância real:',data.var())
In [25]:
muX = 21
varX = 4
muY = 18.90
varY = 2.25
corXY = 0
covXY = corXY*(varX*varY)**(0.5)
mean = [muX, muY]
cov = [[varX, covXY], [covXY, varY]]
In [26]:
n=100
x, y = np.random.multivariate_normal(mean, cov, n).T
print("Matriz de covariâncias a partir dos n valores correlacionados:")
print(np.cov(x,y))
gasto = []
for i in range(len(x)):
gasto.append(x[i]+y[i])
data = pd.Series(gasto)
x2 = np.arange(20,80,1)
y2 = norm.pdf(x2, muX + muY, (varX + varY + 2*covXY)**0.5)
plt.plot(x2,y2,lw = 3, alpha = 0.7)
hist2 = data.plot(kind = 'hist',bins = 12, normed = True)
plt.show()
print('Média real:',data.mean())
print('Variância real:',data.var())
In [27]:
n=1000
x, y = np.random.multivariate_normal(mean, cov, n).T
print("Matriz de covariâncias a partir dos n valores correlacionados:")
print(np.cov(x,y))
gasto = []
for i in range(len(x)):
gasto.append(x[i]+y[i])
data = pd.Series(gasto)
#temp
x2 = np.arange(20,80,1)
y2 = norm.pdf(x2, muX + muY, (varX + varY + 2*covXY)**0.5)
plt.plot(x2,y2,lw = 3, alpha = 0.7)
hist2 = data.plot(kind = 'hist',bins = 12, normed = True)
plt.show()
print('Média real:',data.mean())
print('Variância real:',data.var())
In [28]:
n=10000
x, y = np.random.multivariate_normal(mean, cov, n).T
print("Matriz de covariâncias a partir dos n valores correlacionados:")
print(np.cov(x,y))
gasto = []
for i in range(len(x)):
gasto.append(x[i]+y[i])
data = pd.Series(gasto)
x2 = np.arange(20,80,1)
y2 = norm.pdf(x2, muX + muY, (varX + varY + 2*covXY)**0.5)
plt.plot(x2,y2,lw = 3, alpha = 0.7)
hist2 = data.plot(kind = 'hist',bins = 12, normed = True)
plt.show()
print('Média real:',data.mean())
print('Variância real:',data.var())