import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import math
from scipy import stats
#Voor xlsx bestanden
!pip install openpyxl
df = pd.read_excel('golfdiesel.xlsx')
# display(df)
data = np.array(df['Data'])
display(data)
# Cell voor programmacode bij opgave 1a)
fig, ax = plt.subplots(1,1)
ax.hist(data,bins='auto',density='True')
plt.show()
# geef commando voor plotten
# Cell voor schatting parameters en het plotten van het histogram en de dichtheid.
#De data lijkt in de vorm te zijn van een normaal distributie. De data vormt een bell curve en de piek zit in het midden, de distributie is ook best symmetrisch.
X_n = np.mean(data)
S_n = np.std(data,ddof=1)
x = np.linspace(X_n-3*S_n,X_n+3*S_n,100)
norm = stats.norm.pdf(x, X_n, S_n)
fig, ax = plt.subplots(1,1)
plt.plot(x,norm)
ax.hist(data,bins='auto',density='True')
plt.show()
# hoef je niet te wijzigen
def empirical_cdf(vector):
n = vector.size
sorted_vector = np.sort(vector)
x_ecdf = np.array([sorted_vector[0]])
y_ecdf = np.array([0])
for i in range(n):
if sorted_vector[i] == x_ecdf[-1]:
y_ecdf[-1] = y_ecdf[-1] + 1/n
else:
x_ecdf = np.append(x_ecdf,sorted_vector[i])
y_ecdf = np.append(y_ecdf,y_ecdf[-1] + 1/n)
return x_ecdf,y_ecdf
fig, ax = plt.subplots(1,1)
ax.step(*empirical_cdf(data),label='Data CDF')
norm_dist = np.random.normal(X_n,S_n,1000)
ax.step(*empirical_cdf(norm_dist),label='Normal CDF',ls='--')
plt.xlabel('Value')
plt.ylabel('')
plt.legend()
plt.show()
# Geef de code voor het plotten van de verdelingsfunctie van jullie gekozen verdeling.
# Zet de juiste verdeling in distribution.
# Hieronder hebben we de geometrische verdeling met p = 0.5 ingeladen.
# In het algemeen zul je je verdeling moeten kiezen, en de parameters moeten schatten.
distribution = stats.norm(X_n, S_n)
# Reken de KS afstand uit met de functie stats.kstest, bijvoorbeeld, stats.kstest(data, rv.cdf)[0]
# stats.kstest(data, rv.cdf) geeft twee outputs: probeer dat eens, de eerste output is de KS afstand,
# de tweede output is een p waarde. Deze behandelen we niet in deze opgave.
KS_afstand_data = stats.kstest(data, distribution.cdf)[0]
print("The KS-distance equals {}".format(KS_afstand_data))
#Cell voor code bij opgave 3.
bootstrap_size = 1000
bootstrap_KS = np.array([])
for _ in range(bootstrap_size):
bootstrap_sample = np.random.normal(X_n,S_n,len(data))
x_n = np.mean(bootstrap_sample)
s_n = np.std(bootstrap_sample)
ks_value = stats.kstest(bootstrap_sample, 'norm',args=(x_n,s_n))[0]
bootstrap_KS = np.append(bootstrap_KS,ks_value)
fig, ax = plt.subplots(1,1)
ax.hist(bootstrap_KS ,density = True,bins='auto')
plt.axvline(KS_afstand_data,c='red')
plt.xlabel('KS-distance')
plt.ylabel('$N$')
plt.xlim(0,0.2)
plt.grid()
plt.show()
print('Minimale KS',min(bootstrap_KS),'Maximale',max(bootstrap_KS))