Kasse 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Obs 40 64 72 80 59 51 61 42 32 19 7 15 16 7 3 2 1 2 2 Forv 39.7 66.3 74.2 73.1 66.8 58.0 48.3 38.8 30.3 23.0 17.1 12.4 8.8 6.1 4.2 2.8 1.9 1.2 2.0For at få alle de forventede større end eller lig med 5 slås kasse 15 og 16 sammen såvel som kasserne 17, 18 og 19. Dette giver de observerede antal 4 og 5, og de forventede antal 7.0 og 5.1. Efter denne sammenlægning er der 16 kasser, hvorfor antallet af frihedsgrader i -fordelingen bliver 16-1-2=13, idet vi under hypotesen har to frie parametre ( og ). -teststørrelsen for vores hypotese beregnes fra formlen hvor og er de observerede og forventede, efter at kasser er slået sammen. Beregningen i kodevinduet viser, at og den tilhørende -værdi er Da -værdien ligger lidt over 0.05, siger vi at data ikke strider mod hypotesen om, at levetiderne af overfladeboblerne er weibullfordelt.
3.5.2 Beregning i python af goodness of fit
xxxxxxxxxx
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
# data indskrives
xobs=np.array([4,3,5,5,3,2,8,9,10,6,10,7,7,8,13,12,15,11,11,\
12,14,15,11,13,11,17,18,17,18,18,18,18,19,23,22,21,23,23,21,\
21,28,28,26,27,27,29,30,27,27,29,33,35,33,32,33,35,34,33,35,\
31,35,31,34,32,32,34,31,36,36,36,36,39,39,40,37,42,41,41,45,\
43,41,41,43,44,42,41,41,43,43,47,48,49,48,46,50,49,47,48,47,\
50,46,49,47,47,50,48,46,53,55,54,53,52,51,54,55,55,51,51,51,\
52,55,51,59,57,56,56,56,56,58,60,56,58,58,56,58,59,59,57,59,\
59,60,61,65,65,62,61,62,61,61,62,62,61,66,69,67,68,67,70,68,\
70,70,66,66,70,71,72,73,73,73,71,72,72,72,72,71,72,77,80,79,\
80,78,78,78,79,80,84,81,84,81,81,85,83,84,83,85,81,81,85,84,\
85,83,83,85,81,89,90,86,86,86,88,90,87,89,89,88,87,89,87,90,\
93,93,93,91,94,94,95,93,92,92,92,94,94,94,95,94,93,93,97,96,\
99,96,99,96,99,100,100,97,100,98,98,96,99,96,97,97,98,99,98,\
99,102,104,101,104,102,104,102,105,101,104,103,101,105,104,\
102,103,107,110,106,109,107,107,106,107,110,113,113,111,112,\
112,114,112,114,114,115,116,119,119,119,116,120,119,120,124,\
121,122,121,124,122,125,125,124,123,124,121,124,121,123,128,\
128,130,126,126,129,126,128,128,128,131,132,131,131,131,131,\
134,137,140,136,137,139,137,136,140,138,136,136,136,140,136,\
142,142,145,145,145,143,141,144,142,144,150,146,150,148,146,\
147,148,148,150,150,148,146,150,152,151,154,151,155,154,151,\
153,155,152,152,152,158,158,157,159,159,157,164,161,165,164,\
164,162,165,162,164,163,161,168,166,168,166,168,167,169,168,\
168,169,166,170,166,171,174,175,171,173,171,172,173,172,174,\
173,174,175,171,171,172,176,176,180,180,176,180,180,177,178,\
180,178,178,184,183,184,181,184,187,190,189,189,190,186,188,\
190,194,193,193,194,194,194,195,193,193,191,199,198,196,197,\
197,201,201,203,201,204,202,210,206,209,207,207,206,210,215,\
212,213,212,211,212,213,215,220,218,217,220,218,218,217,216,\
225,225,222,223,222,228,228,229,229,227,227,226,229,232,231,\
235,231,233,236,244,242,243,251,255,265,261,262,274,273,278,\
276,283,281,281,285,286,286,287,290,287,288,288,292,296,300,\
301,303,302,305,303,304,303,302,307,306,309,308,313,312,312,\
329,333,331,338,344,348,350,346,365,373,380,387,419,427,437,\
451,451])/10
print("Opstart er gennemført: xobs med målte tider er indskrevet")
xxxxxxxxxx
# Opstart ovenfor skal være kørt
# eksempel: intervalendepunkter i histogram defineres
endePkt=2.5*np.arange(20)
# eksempel: parameterskøn og antal parametre indskrives
ahat=1.5113; lamhat=14.3285; dpar=2
# antal i intervaller beregnes og tæthedshistogram tegnes
antal,bi,pa=plt.hist(xobs,bins=endePkt)
plt.clf()
plt.hist(xobs,bins=endePkt,density=True)
# eksempel: weibulltæthed indtegnes
x=np.linspace(np.min(xobs),np.max(xobs),1000)
plt.plot(x,st.weibull_min.pdf(x,ahat,scale=lamhat),'-r')
plt.show()
# vektor med endepunter forkortes
endePkt0=np.delete(endePkt,len(endePkt)-1)
endePkt0=np.delete(endePkt0,0)
# eksempel: weibullfordeling bruges
pr0=st.weibull_min.cdf(endePkt0,ahat,scale=lamhat)
# forventede beregnes
pr=np.append(pr0,1)-np.append(0,pr0)
ex=len(xobs)*pr
# eksempel: kasser slås sammen
antal1=np.append(antal[0:14],np.array([sum(antal[14:16]),sum(antal[16:19])]))
ex1=np.append(ex[0:14],np.array([sum(ex[14:16]),sum(ex[16:19])]))
# teststørrelse og pværdi beregnes
gTest=2*sum(antal1*np.log(antal1/ex1))
pval=1-st.chi2.cdf(gTest,len(antal1)-1-dpar)
# pæn udskrift
print('Observerede:',antal)
print('Forventede:',np.round(ex,2))
print('G:',format(gTest,'.2f'),' Pværdi:',format(pval,'.4f'))