Z Skrypty dla studentów Ekonofizyki UPGOW
Spis treści |
Histogramy
Ważną umiejętnością jest estymacja funkcji gęstości z pewnej (dużej) liczby danych. Proces taki jest nazywany histogramowaniem.
Histogram jest to sposób przedstawienia częstości występowania pewnej cechy w postaci wykresu słupkowego. Weźmy na przykład ciągłą zmienną losową. Podzielmy przestrzeń wartości przyjmowanych przez tą zmienna na N równych przedziałów. Przypuścmy, że dysponumemy M realizacjami zmiennej losowej. Na histogramie można umieścić liczbę realizacji, które należa do danego przedziału. Co więcej taki wykres bedzie w granicy \(N,M\to \infty\) taki sam jak wykres gęstości prawdopodobieństwa nasze zmiennej losowej. By otrzymać dokładnie gęstość prawdopodobieństwa trzeba przeskalować liczbę zliczeń do gęstości. Niech \(n_i, i=1..N\) będą zliczeniami w kolejnych przedziałach. Gęstość prawdopodobieństwa jest unormowana do jedności (bierzemy zmienną losową przyjmującą wartości między a i b):
\(1=\int_a^b f(x) dx=\sum_{i=1}^N f(x_i) h\)
gdzie h jest szerokością jednego przedziału \(h=(x_i-x_{i-1})/(N-1)\). Wynika z tego, że
\(\sum_{i=1}^N f(x_i) =1/h\),
podczas gdy liczby zliczeń są unormowane do pewnej wartości \(\sum_{i=1}^N n_i \).
Widać z tego, że formuła łącząca liczby zliczeń z wartościami gęstości wewnątrz odcinków wyraża się:
\(f_i=f(x_i)=\frac{1}{h}\frac{n_i}{\sum_{i=1}^N n_i} \).
Proszę zauważyć ze drugi argument jest normą tego histogramu, która zgodnie z dokumentacja (help hist) jest sumą wartości wszystkich słupków. Ponieważ chcemy porównać ten histogram z gęstością to mamy:
z czego nam wynika, że suma wysokości słupków gęstości unormowanej do jedynki wynosi:
\(\sum_{i=1}^N f(x_i) =1/h\)
Histogramy 1D
xmax=5; h=.1; mydata=normrnd (0,1,10000,1); [NN,XX]=hist(mydata,[-xmax:h:xmax],1/h); plot(XX,NN,"-",XX,normpdf(XX,0,1),"r-") bar(XX,NN)
xmax=5; xmin=-5; h=.1; mydata=normrnd (0,1,10000,1); [NN,XX]=hist(mydata,[xmin:h:xmax],1/h); figure(1) plot(XX,NN,"-",XX,normpdf(XX,0,1),"r-") figure(2) bar(XX,NN) size(NN) #hist(,[-5:0.1:5],1/0.1) # by hand NN=zeros(1,101); for i=1:length(mydata) idx= ceil ( (mydata(i)-xmin)/(xmax-xmin) * length(NN) ) ; if idx>0 && idx<=length(NN) NN(idx)++; endif endfor figure(3) plot(XX,NN)