Lunds tekniska högskola Matematikcentrum Matematisk statistik STATISTISKA METODER FÖR SÄKERHETSANALYS FMS065, HT-12 Datorövning 1 Introduktion till Matlab Fördelningar I denna datorövning ska du först få en liten introduktion till Matlab, som är ett matematiskt beräkningsverktyg. Det används på alla datorövningarna i kursen. Vi fortsätter sedan att utforska begreppen sannolikhet och fördelningar genom numeriska exempel i Matlab. Du behöver en Matlab-installation som inkluderar Statistics Toolbox. De extra filer du behöver finns att ladda ner från kursens hemsidawww.maths.lth.se/matstat/kurser/fms065/ 1 Förberedelseuppgifter 1. Läs instruktionerna för datorövningen samt Kapitel 3.1 3.3 och 4.1 i boken. 2. Förvissa dig om att du förstår vad sannolikhets- och täthets-funktioner är och hur de förhåller sig till fördelningsfunktionen. 3. Givet ett stickprov {x 1,...,x n } från en slumpvariabel X, hur kan du konstruera den empiriska fördelningsfunktionen? Vad är den empiriska fördelningsfunktionen? 4. Förklara vad som menas med -kvantilen i en fördelning. 2 Matlab de första stegen (Hoppa över detta om du redan är van vid Matlab) Matlab 1 tillåter användaren att kombinera numeriska beräkningar med avancerad grafik. Kortare kommandon kan köras interaktivt, men för mer komplicerade problem är det möjligt att skriva program och definiera egna funktioner. I tillägg till Matlab finns flera s.k. Toolboxes (verktygslådor) för olika tillämpningar, t.ex. signalbehandling, reglerteori och finita elementmetoder. Under datorövningarna kommer vi att använda, bland annat, Statistics Toolbox. Matriser och vektorer i Matlab Matlab kan användas som en avancerad miniräknare: de vanligaste funktionerna är fördefinierade. Vid Matlab-prompten (>>), kan du t.ex. beräkna 1.19 2 1 + sin(ô/2) + e 2 genom att skriva >> sqrt(1.19^2-1)+sin(pi/2)+exp(2) och resultatet dyker upp. Uppgift: Beräkna ovanstående uttryck i Matlab. 1 Mer information om Matlab finns påhttp://www.mathworks.com/
ii När du vill veta mer om de fördefinierade funktionerna i Matlab är help-kommandot användbart. Det är en god idé att använda det under övningarna, även om det inte står uttryckligen i handledningen. Börja med >> help help Sedan kan du, t.ex. skriva >> help log för att få reda på vilken bas Matlab använder för logaritmfunktionen. Matlab är en förkortning av Matrix laboratory, och matriser och vektorer är karakteristiskt för Matlab. Alla data är lagrade i vektorer och matriser. (Med vektor menar vi en rad- eller kolonn-matris.) Matrisen ( ) 2 0 A = 3 1 skrivs in i Matlab på följande sätt: >> A = [2 0; 3 1] En radvektor kan t.ex. skrivas på följande sätt: >> v=[0 0.1 0.2 0.3] och en kolonnvektor: >> vv=[0; 0.1; 0.2; 0.3] Kommandotlength (eller size) ger storleken på vektorn eller matrisen: >> vlength=length(v) >> vvlength=length(vv) >> ASize=size(A) Vi kan plocka ut enskilda element ur vektorer och matriser på följande vis. Säg att vi vill komma åt värdet av det fjärde elementen i vektornvoch dessutom värdena på de tre första elementen. Det gör vi på följande vis: >> v(4), v(1:3) eller, tillsammans: >> v([4 1:3]) Elementen i en vektor kan sorteras i stigande ordning: >> u=[8-3 2.7] >> usorted=sort(u) Att hantera variabler och data Vi har nu definierat ett antal variabler och en lista på de variabler som finns i Matlabs minne fås med kommandotwho. Kommandotwhos ger samma lista men utökad med storleken på variablerna. Uppgift: Kör båda kommandona. Känner du igen variablerna i listan? Vi avslutar sessionen med att ta bort variablerna. Alla variablerna tas bort med kommandotclear. Använd help clear för att ta reda på hur du tar bort bara vissa variabler.
iii Grafik I den här delen ska du göra några enkla figurer i Matlab. Efteråt kommer du att kunna rita en figur över en funktion x f (x). Som exempel, låt oss välja f (x) = sin x för 0 < x < 4Ô. Skapa först variablerna x respektive y: >> x=0:0.05:4*pi % Detta efter procenttecknet är en kommentar, skriv % inte av den. >> y=sin(x) % x=0, 0.05, 0.1, 0.15,..., 4pi Två vektorer av samma längd kan ritas mot varandra så här: >> plot(x,y) Ett grafikfönster dyker nu upp (om det inte redan fanns ett) som figuren ritas i. Figuren heter figure(1). Man kan ha flera grafikfönster. Vill du att nästa figur ska komma i ett nytt fönster, istället för att rita över den första figuren, så kan du skapa ett nytt grafiktfönster med kommandotfigure(2). Man kan ge flera optioner till plot-kommandot, t.ex., färg: >> plot(x,y, r ) % Röda streck Vi kan också välja att rita ut de enskilda punkterna som stjärnor istället för att dra linjer mellan dem: >> plot(x,y, * ) Man kan också kombinera optionerna. Se help plot för att ta reda på vad följande kommando borde göra. Kolla sedan att det blev så också: >> plot(x,y, md- ) Man kan använda kommandotaxis för att titta på en bestämd det av figuren. Pröva med >> axis([0 10-1.5 1.5]) Vad hände? Det är ofta lättare at tolka en figur om man lägger till en grid: ta reda på hur kommandotgrid används och lägg till en grid till din figur. Det aktuella figuren töms med kommandotclf. Det tomma fönstret blir kvar. Vill du ta bort det också ska du använda close istället. 3 Relativa frekvenser och fördelningar I denna del ska vi använda numeriska exempel i Matlab för att studera koncepten sannolikhet och fördelning. Målet är att du ska få en intuitiv känsla för sannolikhetsresonemang, snarare än att konfronteras med teori. Data-undersökning För att illustrera syftet använder vi artificiella data som är simulerade från en statistisk fördelning. Detta i motsats till verkliga data där det inte finns några etiketter som säger vilken fördelning det är. Trots att vi vet hur data genererades är det ändå användbart och man använder ofta simulerade data i skattningar och test i mer komplicerade situationer. För att skaffa dig ett slumpmässigt dataset med 50 värden, skriv
iv >> data=randn(1,50) Uppgift: Vilken fördelning kommer ditt slumpmässigs stickprov från (använd help randn)? Skriv ner täthetsfunktionen. En god regel, när man står inför ettt nytt datamaterial, är att rita upp det på några olika sätt. Vi börjar med att göra ett histogram: >> hist(data) Uppgift: Se det ut som du väntade dig? Jämför med täthetsfunktionen. Använd nu kommandot >> figure(2) % Ritar i ett nytt förnster >> plot(data,.- ) och relatera det till histogrammet. Uppgift: Jämför histogrammet med plot-en. Hur syns egenskaperna hos data i histogrammet, och tvärtom? Ett annat sätt är att rita de sorterade data, med ordningsnumret på y-axeln: >> plot(sort(data),1:length(data),.- ) % Ersätter förra ploten med ny. I det här sortens figur kan vi t.ex. avläsa hur många av observationerna som är mindre än eller lika med ett visst tal. Uppgift: Välj x = 1.1 och försök avgöra i figuren (det går att zooma) hur många av värdena som är mindre än eller lika med 1.1. När antalet observationer i stickprovet stiger kan vi tolka kvoten som sannolikheten att få ett värde mindre än eller lika med x. Kvoten kan beräknas så här: >> ratio = sum(data<=1.1)/length(data) Uppgift: Stämmer det med din uppskattning från figuren? För att förstå hurdata<=1.1 fungerar så jämför vi det med ursprungsdata: >> data >> data<=1.1
v 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 3 2 1 0 1 2 3 Figur 1: Empirisk fördelningsfunktion, ett exempel Vad är det som händer? Uppgift: Pröva med några andra värden på x. Hur borde andelen ändra sig? Jämför med figuren. Den omvända proceduren, hitta det värde x som motsvarar en given sannolikhet, dvs en given kvantil, är ofta viktigare. Vi återkommer till det lite senare. Vi kan naturligtvis låta datorn välja ett stort antal värden att undersöka och sedan försöka få en överblick. Detta är implementerat i den specialskrivna Matlab-funktionenempcdf (finns att ladda ner från hemsidan). Funktionen ger två vektorer: x innehåller de valda värdena, medan andelarna finns i ratio. (Om du vill se koden kan du skriva type empcdf) Resultatet kan visas i en ny figur: >> [x,ratio]=empcdf(data); >> figure(3); >> plot(x,ratio,. ) >> grid on Figuren bör likna Figur 1 i handledningen (och din egenfigure(2), bortsett från y-skalan och antal punkter). Den visar hur värdena är fördelade och denna typ av figur kallas empirisk fördelningsfunktion (empirical distribution function 2. För ett värde på x-axeln, t.ex. 1.1, hittar vi, på y-axeln, andelen värden som är mindre än eller lika värdet på x-axeln. Uppgift: Kolla att det stämmer med det du fick fram tidigare. Större stickprov. Fördelningsfunktionen för en slumpvariabel Låt oss nu studera ett större datamaterial, t.ex. 2000 observationer från samma fördelning som tidigare. Vi simulerar data och ritar dem i en ny figur: 2 Fördelningsfunktioner kallas ofta cumulative distribution functions; Det är därför vår funktion heter empcdf, empirical cumulativedistribution function.
vi >> data=randn(1,2000); >> [x,ratio]=empcdf(data); >> figure(4); >> plot(x,ratio,. ) >> grid on Med många observationer närmar sig resultatet fördelningsfunktionen, dvs, för en slumpvaribel X, funktionen F X (x) = P(X x). I vårt fall valdes X från en normalfördelning; vi hade X N(0, 1). Vi ritar in den teoretiska fördelningsfunktionen,normcdf, i samma figur som den empiriska: >> figure(4) >> hold on % Fortsätt rita fler saker i samma figur. >> plot(x,normcdf(x), r ) >> hold off % Sluta rita i samma figur. För alla fördelningsfunktioner F X, har vi att F X (x) 1 när x och att F X (x) 0 när x. Uppgift: Tolka figuren. Vad är det på x- och y-axlarna? Skatta medianen ur figuren. Kvantiler Begreppet kvantil är viktigt. Kvantilen kan definieras på olika sätt men vi (och många andra) använder följande definition: kvantilen är det tal x som uppfyller P(X x ) = 1 där är ett tal mellan 0 och 1 (vanliga val är: 0.05, 0.01, 0.001). Uppgift: Skatta kvantilen x 0.05 där = 0.05 ur din figur (figure(4)), med hjälp av definitionen (1). Jämför med det exakta värdet, som kan fås mednorminv(1-0.05). (1) Andra fördelningar Några vanliga fördelningsfunktioner har egna namn, eftersom de visat sig användbara för att modellera slumpmässiga fenomen. Några av dem finns implementerade i Statistics Toolbox. Du har redan stött på fördelningsfunktionen när X N(0, 1) som normcdf. Gumbel-fördelning En viktig fördelning som vi kommer att möta igen i kursen är Gumbel-fördelningen (även kallad Extremvärdesfördelning typ I eller Dubbel exponentialfördelning). En Gumbel-fördelad slumpvariabel X har fördelningsfunktionen F X (x) = exp( e (x b)/a ), < x <. Här är b en lägesparameter och a > 0 är en skalparameter. Låt oss rita några Gumbel-fördelningar:
vii >> figure % nytt figur-fönster >> x=15:0.05:70; % ; i slutet hindrar utskrift >> a=7; b=30; F1=exp(-exp(-(x-b)/a)); >> a=7; b=35; F2=exp(-exp(-(x-b)/a)); >> plot(x,f1, b,x,f2, r ) >> grid on Uppgift: Verkar det rimligt att b är en lägesparameter? Vad händer med fördelningen när du ändrar b? Uppgift: Experimentera med att istället hålla b fixt och ändra a. Vad händer? Den maximala vattenföringen i ett visst vattendrag kan anses vara Gumbel-fördelad med a = 7 m 3 /s och b = 30 m 3 /s. Uppgift: Rita upp fördelningsfunktionen och använd den till att bestämma sannolikheten att årlig maximal vattenföring överstiger 50 m 3 /s. Uppgift: Hur stort är 100-årsfloden i detta vattendrag?