<jupyter_start><jupyter_text>Considere o caso em que se deseja gerar pares de dados, 𝑎 e 𝑏, gaussianos com valores verdadeiros 𝑎0 e𝑏0, desvios-padrões 𝜎𝑎 e 𝜎𝑏 e coeficiente de correlação 𝜌 (ou seja, com covariância, 𝑐𝑜𝑣(𝑎, 𝑏) = 𝜌 𝜎𝑎 𝜎𝑏.Esses dados podem ser gerados a partir de dois números aleatórios gaussianos descorrelacionados, comvalores verdadeiros nulos e desvios-padrão unitários, 𝑟1 e 𝑟2, da seguinte forma: \𝑎 = 𝑎0 + 𝜎𝑎 * 𝑟1 \𝑏 = 𝑏0 + 𝜎𝑏 * (𝜌 * 𝑟1 + sqrt(1 − 𝜌2) * 𝑟2) \Vamos considerar um caso em que os valores verdadeiros de 𝑎 e 𝑏 sejam, respectivamente, 𝒂𝟎 = 𝟑𝟎 e𝒃𝟎 = 𝟐𝟎 e que os desvios-padrões verdadeiros sejam iguais: 𝝈𝒂 = 𝝈𝒃 = 𝟐, de modo que as simulações aseguir só irão diferir pelo coeficiente de correlação, 𝝆. \a) Gere 𝑵 = 𝟓𝟎𝟎 pares de dados com 𝝆 = +0.75 e os represente em um gráfico de dispersão. Avaliequalitativamente se é fácil perceber alguma relação entre os valores de 𝑏 de acordo com os valores de 𝑎. Vamos criar uma função para isso<jupyter_code>def func(a0, b0, σa, σb, N, ρ):
    M = np.zeros((N,2))
    for i in range(len(M)):
        r1, r2 = np.random.randn(), np.random.randn()
        M[i] = ([ a0+σa*r1, b0+σb*(ρ*r1+np.sqrt(1-ρ**2)*r2) ])
    return M<jupyter_output><empty_output><jupyter_text>Aplicando os valores na função<jupyter_code>a0, b0, σa, σb, N, ρ = 30, 20, 2, 2, 500, 0.75
M = func(a0, b0, σa, σb, N, ρ)<jupyter_output><empty_output><jupyter_text>Um gráfico da distribuição dos pontos gerados<jupyter_code>sns.scatterplot(x=M[:,0], y=M[:,1], color='orange')
plt.xlabel('a a0 + σa*r1')
plt.ylabel('b = b0 + σb*(ρ*r1 + np.sqrt(1-ρ**2)*r2')
plt.title('Dispersão para ρ = 0,75')
plt.savefig('TEFE18/figurarho{}.png'.format(ρ), dpi=250)
plt.show()<jupyter_output><empty_output><jupyter_text>a.1) Conte o número de vezes, 𝑛, em que os erros de 𝑎 e 𝑏 tem o mesmo sinal (o erro é a diferença entre o valor gerado e o valor verdadeiro). Usando seus conhecimentos sobre binomial, estime a incerteza de 𝑛.<jupyter_code>n_vezes = np.sum((M[:,0] >= a0) & (M[:,1] >= b0) | (M[:,0] < a0) & (M[:,1] < b0))
σ_n_v = np.sqrt(n_vezes*(1 - n_vezes/N))
print('A quatidade de vezes que a e b tem o mesmo sinal {} +/- {:.0f}.'.format(n_vezes, σ_n_v))<jupyter_output>A quatidade de vezes que a e b tem o mesmo sinal 375 +/- 10.<jupyter_text>a.2) Usando o valor de n calculado no item anterior com sua respectiva incerteza, determine a frequência relativa com que os erros de a e b tem o mesmo sinal, f=n/N, e sua respectiva incerteza.<jupyter_code>f = n_vezes / N
σ_f = σ_n_v / N
print('A frequência relativa com que os erros de a e b tem o mesmo final {:.2f} +/- {:.2f}.'.format(f, σ_f))<jupyter_output>A frequência relativa com que os erros de a e b tem o mesmo final 0.75 +/- 0.02.<jupyter_text>a.3) Calcule a covariância amostral, 𝑉𝑎𝑏, e a correspondente correlação amostral, 𝑅, dos 𝑁 pares devalores de 𝑎 e 𝑏 gerados. Use as expressões fornecidas na Nota 2 abaixo para estimar as incertezasde $𝑉_{𝑎𝑏}$ e 𝑅. Compare com os valores de 𝑐𝑜𝑣(𝑎, 𝑏) e 𝜌 usados para gerar os dados. \Nota 1: a covariância amostral é calculada por $𝑉_{𝑎𝑏} =\frac{1}{N-1}∑ (𝑎𝑖 − 𝑎𝑚)(𝑏𝑖 − 𝑏𝑚)$, onde 𝑎𝑚 e 𝑏𝑚 são osvalores médios e a correspondente correlação amostral por 𝑅 =𝑉𝑎𝑏𝑠𝑎 𝑠𝑏, onde 𝑠𝑎 e 𝑠𝑏 são os desvios-padrõesamostrais.Nota 2: A incerteza da covariância amostral pode ser estimada por 𝑖𝑛𝑐𝑉 ≅ 𝑠𝑎𝑠𝑏√(1+𝑅2)𝑁−1e a do coeficiente decorrelação por 𝑖𝑛𝑐𝑅 ≅1−𝑅 2√(𝑁−1)<jupyter_code>def somatoria_dupla(M, am, bm):
    val = 0
    for i in range(len(M[:,0])):
        val += (M[i,0] - am) * (M[i,1] - bm)
    return val/(N-1)
am, bm = np.mean(M[:,0]), np.mean(M[:,1])
Vab = somatoria_dupla(M, am, bm)

σa, σb = np.std(M[:,0], ddof=1), np.std(M[:,1], ddof=1)
R = Vab/(σa * σb)

σVab = σa*σb*np.sqrt((1 + R**2) / (N-1))
σR = (1 - R**2)/np.sqrt(N-1)

print('Vab = {:.2f} +/- {:.2f}\n====================\nR = {:.2f} +/- {:.2f}.'.format(Vab, σVab, R, σR))<jupyter_output>Vab = 2.85 +/- 0.22
====================
R = 0.71 +/- 0.02.<jupyter_text>Ou podemos usar funções no numpy para fazer isso<jupyter_code>Vab = np.cov(M[:,0], M[:,1])[0][1]<jupyter_output><empty_output><jupyter_text>a.4) Para cada um dos N pares de valores de 𝒂 e 𝒃, calcule a soma correspondente, 𝑤 = 𝑎 + 𝑏. \Determine o desvio-padrão amostral de 𝒘 (a incerteza de cada valor de 𝒘).Nota: A incerteza do desvio-padrão amostral pode ser estimada por 𝑖𝑛𝑐𝑠 ≅𝑠√2(𝑁−1)<jupyter_code>W = np.add(M[:,0], M[:,1])
Wm = np.mean(W)
σW = np.std(W, ddof=1)
sσ = σW/np.sqrt(2*(N-1))
print( 'σW = {:.2f} +/- {:.2f}.'.format(σW, sσ))<jupyter_output>σW = 3.76 +/- 0.12.<jupyter_text>a.5) Repita o item anterior para o caso da diferença entre 𝒂 e 𝒃, 𝑧 = 𝑎 − 𝑏.<jupyter_code>Z = np.add(M[:,0], np.multiply(-1, M[:,1]))
Zm = np.mean(Z)
σZ = np.std(Z, ddof=1)
sσ = σZ/np.sqrt(2*(N-1))
print( 'σZ = {:.2f} +/- {:.2f}.'.format(σZ, sσ))<jupyter_output>σZ = 1.38 +/- 0.04.<jupyter_text>a.6) Compare os resultados dos itens a.4 e a.5 com a incerteza esperada para a soma e a diferença seos dados não fossem correlacionados (isto é, a incerteza calculada por propagação de incertezas com𝑐𝑜𝑣(𝑎, 𝑏) = 0). Escreva as incertezas calculadas por propagação com 2 algarismos significativos ecomente sobre os efeitos da correlação de 𝑎 e 𝑏 sobre as incertezas de 𝑤 e 𝑧. $2\sqrt2$ b) Repita o item (a) e seus subitens para o caso em que 𝜌 = −0,75.<jupyter_code>a0, b0, σa, σb, N, ρ = 30, 20, 2, 2, 500, -0.75
M = func(a0, b0, σa, σb, N, ρ)
sns.scatterplot(x=M[:,0], y=M[:,1], color='orange')
plt.xlabel('a a0 + σa*r1')
plt.ylabel('b = b0 + σb*(ρ*r1 + np.sqrt(1-ρ**2)*r2')
plt.title('Dispersão para ρ = -0.75')
plt.savefig('TEFE18/figurarho{}.png'.format(ρ), dpi=250)
plt.show()<jupyter_output><empty_output><jupyter_text>b.1)<jupyter_code>n_vezes = np.sum((M[:,0] >= a0) & (M[:,1] >= b0) | (M[:,0] < a0) & (M[:,1] < b0))
σ_n_v = np.sqrt(n_vezes*(1 - n_vezes/N))
print('A quatidade de vezes que a e b tem o mesmo sinal {} +/- {:.0f}.'.format(n_vezes, σ_n_v))<jupyter_output>A quatidade de vezes que a e b tem o mesmo sinal 116 +/- 9.<jupyter_text>b.2)<jupyter_code>f = n_vezes / N
σ_f = σ_n_v / N
print('A frequência relativa com que os erros de a e b tem o mesmo final {:.2f} +/- {:.2f}.'.format(f, σ_f))<jupyter_output>A frequência relativa com que os erros de a e b tem o mesmo final 0.23 +/- 0.02.<jupyter_text>b.3)<jupyter_code>am, bm = np.mean(M[:,0]), np.mean(M[:,1])
Vab = somatoria_dupla(M, am, bm)

σa, σb = np.std(M[:,0], ddof=1), np.std(M[:,1], ddof=1)
R = Vab/(σa * σb)

σVab = σa*σb*np.sqrt((1 + R**2) / (N-1))
σR = (1 - R**2)/np.sqrt(N-1)

print('Vab = {:.2f} +/- {:.2f}\n====================\nR = {:.2f} +/- {:.2f}.'.format(Vab, σVab, R, σR))<jupyter_output>Vab = -3.00 +/- 0.22
====================
R = -0.75 +/- 0.02.<jupyter_text>b.4)<jupyter_code>W = np.add(M[:,0], M[:,1])
Wm = np.mean(W)
σW = np.std(W, ddof=1)
sσ = σW/np.sqrt(2*(N-1))
print( 'σW = {:.2f} +/- {:.2f}.'.format(σW, sσ))<jupyter_output>σW = 1.43 +/- 0.05.<jupyter_text>b.5)<jupyter_code>Z = np.add(M[:,0], np.multiply(-1, M[:,1]))
Zm = np.mean(Z)
σZ = np.std(Z, ddof=1)
sσ = σZ/np.sqrt(2*(N-1))
print( 'σZ = {:.2f} +/- {:.2f}.'.format(σZ, sσ))<jupyter_output>σZ = 3.75 +/- 0.12.<jupyter_text>c) Faça apenas a geração dos dados com o gráfico de dispersão correspondente (isto é, o item (a) sem ossubitens) para os casos 𝜌 = 0, 𝜌 = −0,25, 𝜌 = +0,5, 𝜌 = −0,9 e 𝜌 = +0,95.<jupyter_code>ρ = 0
M = func(a0, b0, σa, σb, N, ρ)
sns.scatterplot(x=M[:,0], y=M[:,1], color='orange')
plt.xlabel('a a0 + σa*r1')
plt.ylabel('b = b0 + σb*(ρ*r1 + np.sqrt(1-ρ**2)*r2')
plt.title('Dispersão para ρ = {}'.format(ρ))
plt.savefig('TEFE18/figurarho{}.png'.format(ρ), dpi=250)
plt.show()

ρ = -0.25
M = func(a0, b0, σa, σb, N, ρ)
sns.scatterplot(x=M[:,0], y=M[:,1], color='orange')
plt.xlabel('a a0 + σa*r1')
plt.ylabel('b = b0 + σb*(ρ*r1 + np.sqrt(1-ρ**2)*r2')
plt.title('Dispersão para ρ = {}'.format(ρ))
plt.savefig('TEFE18/figurarho{}.png'.format(ρ), dpi=250)
plt.show()

ρ = 0.5
M = func(a0, b0, σa, σb, N, ρ)
sns.scatterplot(x=M[:,0], y=M[:,1], color='orange')
plt.xlabel('a a0 + σa*r1')
plt.ylabel('b = b0 + σb*(ρ*r1 + np.sqrt(1-ρ**2)*r2')
plt.title('Dispersão para ρ = {}'.format(ρ))
plt.savefig('TEFE18/figurarho{}.png'.format(ρ), dpi=250)
plt.show()

ρ = -0.9
M = func(a0, b0, σa, σb, N, ρ)
sns.scatterplot(x=M[:,0], y=M[:,1], color='orange')
plt.xlabel('a a0 + σa*r1')
plt.ylabel('b = b0 + σb*(ρ*r1 + np.sqrt(1-ρ**2)*r2')
plt.title('Dispersão para ρ = {}'.format(ρ))
plt.savefig('TEFE18/figurarho{}.png'.format(ρ), dpi=250)
plt.show()

ρ = 0.95
M = func(a0, b0, σa, σb, N, ρ)
sns.scatterplot(x=M[:,0], y=M[:,1], color='orange')
plt.xlabel('a a0 + σa*r1')
plt.ylabel('b = b0 + σb*(ρ*r1 + np.sqrt(1-ρ**2)*r2')
plt.title('Dispersão para ρ = {}'.format(ρ))
plt.savefig('TEFE18/figurarho{}.png'.format(ρ), dpi=250)
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.20296803652968037, 'fraction_numerical': 0.04577625570776256, 'mean_word_length': 4.284077201447527, 'pattern_counts': {'":': 0, '<': 59, '<?xml version=': 0, '>': 59, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '16', 'dir': 'jupyter-structured-clean-dedup', 'id': '114555', 'license': 'MIT', 'n_tokens_mistral': 4983, 'n_tokens_neox': 4699, 'n_words': 1063, 'path': '18 - Correlacao.ipynb', 'repo_name': 'rafaelpleite/Atividades-de-TEFE-2020', 'size': '8760'}