import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from scipy import stats

%matplotlib inline

"""
Explanation: APS 7
Gabriel Heusi Pereira Bueno de Camargo
End of explanation
"""


amostra = [0.8411, 0.8191, 0.8182, 0.8125, 0.8580, 0.8532, 0.8483, 0.8276, 0.8042, 0.8730, 0.8282, 0.8359, 0.8750, 0.7983, 0.8660]
x_ = np.sum(amostra)/len(amostra)
s = np.std(amostra, ddof=1)
print("A média da barra é : {0}".format(x_))
print("S é igual : {0}".format(s))

"""
Explanation: Questão 1
Você foi contratado para avaliar um novo modelo de taco de golfe. O fabricante quer saber se há evidência de que o coeficiente de restituição médio dos tacos excede 0.82 com nível de significância α=0.05. Em um lançador padronizado de bolas de golfe, foram testados 15 tacos e os coeficientes de restituição medidos foram: 0.8411, 0.8191, 0.8182, 0.8125, 0.8580, 0.8532, 0.8483, 0.8276, 0.8042, 0.8730, 0.8282, 0.8359, 0.8750, 0.7983, 0.8660
Sabe-se por experiência anterior que o coeficiente de restituição tem distribuição normal, mas você não sabe o σ.
Pede-se:
a) Calcule ¯x e s (lembre-se dos graus de liberdade)
End of explanation
"""


mi0 = 0.82
tam = len(amostra)
Tobservado = (x_ - mi0)/(s/sqrt(tam))
print(Tobservado)

"""
Explanation: c) Calcule a estatística t de teste para a t padrão usando a relação t_o bs=(¯(x_obs )-μ_0)/(s/√n)
End of explanation
"""


alpha = 0.05
Tc = stats.t.ppf(1-alpha, loc = 0, df = tam-1)
Tc

"""
Explanation: d) Calcule o t_crítico. Compare t_obs com t_crítico e escreva sua conclusão para o teste de hipóteses
End of explanation
"""


VP = 1 - (stats.t.cdf(Tobservado, loc=0,df = tam-1))
VP

"""
Explanation: e) Calcule o valor p de t_obs . Compare o valor p com o α . Verifique se sua conclusão do item (d) continua válida.
End of explanation
"""


amostra2 = [23.01, 22.22, 22.04, 22.62, 22.59]
tamanho = len(amostra2)
Mi0 = 22.5
X_ = np.sum(amostra2)/tamanho
S = np.std(amostra2, ddof=1)
TObservado2 = (X_ - Mi0)/(S/sqrt(tamanho))
print("T Observado é igual a: ")
print(TObservado2)

"""
Explanation: Sabendo que alpha é igual a 0.05, ou seja 5% e com o cálculo de valor P, igual a 0.83%, a hipótese pode ser rejeitada, afinal Valor P se mostra menor que alpha.
Questão 2
Em um artigo da Sociedade Americana de Engenharia Civil (ASCE Journal of Energy Engineering, Vol. 125, 1999, pp. 59-75) foi publicado um estudo sobre uso concreto aerado autoclavado como material de construção. Foram testadas 5 amostras deste material numa estrutura, e a média da temperatura interior (Celsius ) foi 23.01, 22.22, 22.04, 22.62, and 22.59. (Montgomery 4-54)
a) Considerando um α=0.05, usando a abordagem de valor p, teste as hipóteses:
H_0: μ=22.5
versus
H_1: μ≠22.5
End of explanation
"""


alpha = 0.05
maximo = stats.t.ppf(1-(alpha)/2, loc = 0, df = tamanho-1)
print(maximo)
minimo = stats.t.ppf(alpha/2, loc = 0, df = tamanho-1)
print(minimo)

"""
Explanation: b) Encontre os valores críticos e a região de rejeição
End of explanation
"""


stats.probplot(amostra2, dist='norm', plot=plt)
plt.show()

"""
Explanation: Dessa maneira conclui-se que o T observado está entre os valores de T máximo e mínimo, e portanto, pode se rejeitar a hipótese.
c) Um teste t pode ser usado se a distribuição da variável original for normal. Faça um QQ-Plot para verificar se a amostra é normal, ou seja, se poderíamos ter feito o teste t
Dica: Use stats.probplot(dados, dist='norm', plot=plt) , uma função que faz o QQ Plot de forma imediata.
End of explanation
"""


al = 0.05
amostra3 = [ 129.26, 204.49, 116.89, 106.4 , 95.3 , 123.35, 92.3 , 300.02, 264.34, 168.27, 80.02, 117.96, 117.73, 370.47, 462.59, 92.58, 258.52, 82.59]
n = len(amostra3)
s = np.std(amostra3, ddof=1)
m_ = np.mean(amostra3)
l = []
for i in range(10000):
    a = np.random.choice(amostra3,size = n, replace = True).mean()
    l.append(a)
print("Limite Inferior: ")
print(pd.Series(l).quantile(al/2))
print("Limite Superior: ")
print(pd.Series(l).quantile(1-(al/2)))

"""
Explanation: Questão 3
Algumas peças de polímero produzidas por uma máquina foram submetidas a
um ensaio de tração. As resistências medidas foram (em Kg/cm2):
[ 129.26, 204.49, 116.89, 106.4 , 95.3 , 123.35, 92.3 , 300.02, 264.34, 168.27, 80.02,
117.96, 117.73, 370.47, 462.59, 92.58, 258.52, 82.59]
Não sabemos nada sobre o formato da distribuição da população. Pede-se:
a) Crie um intervalo percentil bootstrap de 95% para a média amostral. Forneça o limite inferior e o limite superior.
End of explanation
"""


from math import sqrt
v = []
for i in range(10000):
    b = np.random.choice(amostra3,size = n, replace = True)
    var_amostra3 = sqrt(np.var(b))
    v.append(var_amostra3)
    
print(pd.Series(v).quantile(al/2))
print(pd.Series(v).quantile(1-(al/2)))

"""
Explanation: b) Crie um intervalo percentil bootstrap de 95% para o desvio padrão amostral
End of explanation
"""


