Stockholms Univ., Statistiska Inst. Finansiell Statistik, GN, 7,5 hp, HT2008 Några frågor och svar rörande inlämningsuppgiften Nicklas Pettersson 1 Del 1 Två indexfonder 1.1 3.1 Beskrivning och jämförelse av fonderna Vi sitter och jobbar med inlämningsuppgiften nu och har fastnat på 3.1.3. Hur menar du att man ska beräkna avkastningen? Variablerna vi har fått är väl fondvärdet, men vilken avkastning ska vi räkna med? Är det skillnaden från första dagen till sista dagen? Och hur behandlar vi avgiften? Ska den räknas bort? Avkastningen blir ju negativ i såna fall? Vad står P för i formeln som vi fått i uppgiften? Vi hittar inte detta i kurslitteraturen, vad är den engelska beteckningen? P står helt enkelt för priset (dvs kursvärdet) på fonden. Avkastningen kan såsom står beskrivet i uppgiften räknas som di erenser eller som ränteintensiteter. Om t.ex kursvärdet igår var 102 och idag 104 så beräknas alltså di som (104-102)/102. Tänk att ni kan välja att investera i fonden, skall ni då räkna bort avgiften? hej, vi ar problem med att hitta rätt kommandon för att räkna ut avkastningen för fonderna. Vi vet inte hur vi ska kunna använda formlerna till att göra kommandon som kan räkna ut tex ränteintensitet och di erenser. Problemet kan se svårare ut än vad det är. Vad ni vill göra är ju egentligen bara att räkna minus och delat. Om ni har P (dvs en kurs) i en kolumn så skulle ni göra en kopia av P, men förskjuta denna en tidsperiod. Härigenom får ni Pt och Pt-1 på samma rad. Sedan tror jag det är lättare att räkna. 1
Säg att ni har kursen som ligger i en variabel x som innehåller 100 värden. För att ta bort första värdet skriver ni helt enkelt x[-1], eller x[2:100]. vi har problem med programmet R. Vi har lyckats få Fond A på y axeln och datumen på x-axeln. Problemet är att vi inte får in någon annan variabel i samma diagram (fond B, Index). Har prövat kommandot "lines(var3,lty=2)" där var3 är fond B men det händer ingenting (FÅr inget felmeddelande). Detta är lite klurigt med R. Problemet kan ligga i att FondA och FondB ligger på väldigt olika nivå. När man först plottar FondA kommer gränserna för y-axeln då att sättas. Om man sedan försöker plotta Fond B, som be nner sig utanför dessa gränser, så kommer denna inte att synas. Lösningen är att ändra gränserna redan när man plottar FondA (eller såsom efterfrågas i uppgiften - justera så att de blir jämförbara). Gränserna ändras genom att lägga till ylim = c(lägsta värde på y-axel,största värde på y-axel) i plot-funktionen, se 1.7 plots i R-instruktionen. Vi har problem med hur vi skall jämföra kurserna. Vi tror att det bästa vore om allting började med samma värde. Våra värden nns i variablen data. Vi har då beräkna t(data)/data[1,] men resultatet ser konstigt ut. Gör vi rätt? Transponera allting en gång till, se exempel under 1.4 i R-instruktionen. Alternativt kan man plocka ut en serie i taget och justera dem var för sig. Då behöver inga transponeringar göras. För att till exempel justera en serie som ligger i fonda skrivs 100*fonda/fonda[1] Hur får man R att logaritmera en variabel? Kommandot är log (där default är naturliga logaritmen). Vi har samma problem som en tidigare grupp som skickat in sin fråga till > dig. Vi har lyckats få Fond A på y axeln och datumen på x-axeln. Problemet > är att vi inte får in någon annan variabel i samma diagram (fond B, Index). > Detta gäller även efter att vi justerat värdena på y-axeln. Jag tror att problemet är lines-raden där ni måste ange både vad som skall nnas på x-axeln (datum) och y-axeln (index, fondb etc), dvs om ni först plottar datum mot fonda så skall lines-raden för att plotta även fondb vara: 2
lines(datum,fondb,lty=2) Skall man dessutom plotta en tredje variabel så lägger man till denna med en ny lines-rad, t ex lines(datum,fondx,lty=3) > Ett annat problem är att när jag ska göra en boxplot över Fond B, så > visar diagrammet ett medelvärde på nånstans mellan 275 och 280, men > när jag skriver mean(fondb) så visar det 256. Hur är detta möjligt? > Stämmer inte på FondA heller. Fundera på vad det är ni ser i boxplottarna, det är ju inte medelvärdet. Det mittersta värdet värdet motsvarar ju medianen, erhålls med median(fonda). > På 3.1.3, hur räknar man ut formlerna i R? Vilka kommandon använder > man? Se bl a instruktioner till R. Det ni i praktiken kan göra är att göra en kopia av den ordinarie serien och sedan förskjuta den ett steg. Därefter kan ni räkna ränteintensitet och di erenser. Naturliga logaritmer räknas med kommandot log(). Om serien ligger i index så kan ni då skriva index[-1] eller index[2:113] (om serien innehåller 113 värden). För att räkna ut di erens används sedan minus och delat, dvs ( index[-1]-index ) / index Notera att det kan komma ett felmeddelande eftersom index[-1] är ett steg kortare. Detta kan man dock bortse ifrån här. Är ni osäkra så kolla längden på serien med length(index) length(index[-1]) Bäst är också att spara sin di erentierade serie i en ny vector, t ex di <- ( index[-1]-index ) / index 3
1.2 3.2Jämförelseindex Vad menas med naivt intervall samt nns det verkligen 2,5 eller 97,5 kvartiler? Är dom inte bara 4 st Det vanligaste är att se på kvartil (med r) 1-4, men man kan i princip dela upp i vilka kvantiler(med n), också kallat percentiler, man vill. Med naivt avses att vi inte använder något fördelningsantagande, utan tittar bara direkt på fördelningen för data. Jämför med ett kvartilavstånd (dvs mellan första och tredje kvartilen), som kan ses som ett 50%-igt naivt kon densintervall. Har kommit igång och inser att R är väldigt användbart när man väl fattar hur man ska använda det. Finns det något kommando som möjligtvis kan skatta kon densintervall i grafer i R. Eller måste vi räkna med hjälp av formler som utgår från väntevärde och varians mm? Om ni skall räkna kon densintervall så löser man det bäst genom att räkna fram det. Dock kan man ju använda R för att räkna ut standardavvikelse, medelvärde etc. Kan nämna också att om man vill kan man gå in och hämta z- och t-värden (istället för att gå till tabellen). Prova t ex qt(0.025,frihetsgrader) eller qnorm(0.975) och se vad ni får då... > 3.2.4 hur ska vi få fonderna att repliker index????????? Ni skall inte försöka få fonderna att replikera index, utan detta är ju något fonden gör i sig. Det ni skall se på är hur väl de replikerar. Detta gör ni genom att beräkna det mått som jag benämnt som sqdr(t), dvs skillnaden mellan avkastningen i fonden och avkastningen i index, taget i kvadrat. > En annan fråga som kommit upp här gäller grupparbetet och punkt 3.2.4. > Där ska vi enligt instruktionen testa huruvida summan sqdrt(fonda) är > större än summan sqdrt(fondb). Kan du förklara/förtydliga hur detta > test ska gå till? Jag har förstått så långt att dessa följer en chi2-4
> fördelning men skulle vara mycket tacksam om du utvecklade > instruktionen. Det viktiga här är mycket riktigt att vi har något som antas vara chi2 fördelat.ett exempel när vi har endast en variabel som är chi2 fördelad är när vi har en varians som skall testas. Vi använder ju mycket riktigt också ett chi2 test då. Nu skulle man alltså kunna se det som att vi har två varianser där vi vill testa om den ena är större än den andra. Som ledning så kan man använda ett test för om om kvoten mellan dessa är större än 1 eller ej. > Lite "inom parantes" ställer jag mig också frågande till varför man > ska göra ett sådant test när det är uppenbart att summan sqdrt(fonda) > är större än dito FondB om man räknar på hela populationen rt (=112 > stycken observationer i vårt fall) och inte ett urval av > observationerna. Det stämmer att man enkelt kan se den ena summan är större än de andra om vi bara avser de 112 observationerna ni har. Dessa är dock endast att betrakta som ett urval, medan populationen i detta fall är alla möjliga värden, dvs alla möjlig tid som fonderna existerar. > Tack för hjälpen! Vi har nu kommit igång nt med r och arbetet. Vi > har dock lite svårt med att få fram hur vi gör ett chitvå test i r för > uppgift 3.2.4. Vi undrar om koden nns någonstans? Vi antar nämligen > att de är det vi ska göra då du nämnt att de ska följa en sådan > fördelning? Som det står i uppgiften så följer sqdr/sigma^2 en chi2-fördelning med 1 frihetsgrad, samt att summan av n stycken sqdr/sigma^2 följer en chi2-fördelning med n frihetsgrader. Om vi bara skulle testa en sådan chi2-fördelad variabel så skulle vi kunna använda oss av ett chi2-test, t ex när man skall testa en varians. Här har vi ju dock två stycken chi2-fördelade variabler som vi vill jämföra. Det är då inte chi2-testet vi skall använda, utan ett test som baseras på att man beräknar kvoten av två chi2-fördelade variabler. Detta test skall nnas beskrivet i såväl föreläsningsanteckningarna, boken, samt formelsamlingen. Ert observerade värde kan alltså beskrivas som en kvot av två chi2-fördelade variabler (med n stycken frihetsgrader vardera). Detta skall ni sedan jämföra med ett kritiskt värde från testfördelningen. Eftersom ni har två uppsättningar av n stycken frihetsgrader så bör detta få betydelse för ert kritiska värde. Normalt sett brukar man tänka konservativt beträ ande frihetsgraderna, vilket innebär att om jag inte har rätt antal frihetsgrader i min tabell över det kritiska 5
värdet så väljer jag istället ett värde med färre frihetsgrader som nns i min tabell. Annars kan man också använda sig av R för att räkna fram det exakta kritiska värdet, t ex: qt(0.95,100) # Ger kritiskt värde för enkelsidigt test med t-fördelningen, signi kansnivå 5% och 100 frihetsgrader. qnorm(c(0.025,0.975)) # Kritiska värden för normalfördelningen, vid dubbelsidigt test och signi kansnivå 5%. qf(0.90,10,20) # Kritiskt värde för F-fördelningen vid 10 frihetsgrader i täljaren och 20 i nämnaren och 10% signi kansnivå. qchisq(0.95,1) # Kritiskt värde för chi2-fördelningen, en frihetsgrad och sign kansnivå 5%. Notera att roten ur detta är lika med qnorm(0.975). 1.3 3.3 Regression och exponentiell utjämning > 3.3.3 vi får ej ut MAD men fått ett MSE värde på 77 Både MAD och MSE kan beräknas genom de givna formlerna. MAD är helt enkelt ett medelvärde av absolutbeloppen för residualerna=feltermer. Om man sparat sin regression med beroende variabel dep och en oberoende/förklarande variabel indep enligt följande: mod el1 <- lm(dep~indep) så kan sampleresidualerna sparas i en vektor residualer på något av följande sätt: residualer <- dep model1$f itted:values residualer <- mod el1$res residualer <- dep (model1$coeff[1] + model1$coeff[2] indep). Absolutbeloppet erhålls då med abs(residualer). I minitab kan man via menyn spara sina residualer från regressionsmodellen genom att klicka för just residualerna (Stat/Regression/Regression/Storage). För att beräkna absolutbelopp kan man gå via menyerna och välja funktionen absolute value (Calc/Calculator). 6
> Hur skapar jag en tidsvariabel? Ser att du har skrivit tid<-1:n men > vad ska jag sätta som n? n motsvarar helt enkelt det antal observationer du har. Vid en regression måste man ju ha lika många x som y värden. För att pröva hur många observationer en vector, t ex fonda, har kan man skriva length(fonda) > Vi har problem att räkna ut prediktionsintervallen för exponentiellt utjämnade serier. Har upptäckt att det kan skilja sig mellan versioner av R. Pröva med följande (dvs er serie ligger i vector och ni sparar modellen i HWmodel) som jag hämtat från uppdaterade versionen av instruktionerna: HWmodel <- HoltWinters(vector,alfa,beta,gamma) # Holt Winters exponential smoothing with parameters saved in HWmodel HWmodel1 <- HoltWinters(vector,0.3,0,0) and non-seasonal model saved in HWmodel # Holt Winters with alfa=0.3 HWmodel2 <- HoltWinters(vector,0.3,0.2,0) # Holt Winters with alfa=0.3, beta=0.2 and non-seasonal model saved in HWmodel predict(hwmodel1,nrahead,prediction.interval=t) # Predicts HWmodel, nrahead steps ahead, and if prediction.interval is T=TRUE prediction intervals are given. Thus to predict HWmodel2 one step ahead with 95% prediction interval you could write: predict(hwmodel2,1,t) I minitab väljer man under Stat/Time series/single exponential smoothing eller Double exponential smoothing att kryssa för Generate forecasts. 7
2 Del 2 Event studie 2.1 4.1 Marknadsmodellen vi förstår inte om vi har tänkt rätt men det som vi har gjort är att räkna ut aktiekursernas avkastning och indexkursernas avkastning.. vi förstår inte formlerna och vet inte vad vi ska ta upp! RIT och ARit formlerna förstår vi inte. Aktiekursernas avkastning och indexkursernas avkastning är ju det som benämns som R IT och R MT så detta behöver ni. Det ni benämner som R IT formeln är helt enkelt regressionsekvationen som ni skall skatta, dvs aktiens avkastning (R IT ) är den beroende (y-)variabeln och marknadsavkastningen (R MT ) är den oberoende/förklarande (x-)variabeln. Notera dock att ni inte skall använda hela serien utan endast de 60 första observationerna av avkastningen för denna regression. De 11 sista observationerna använder ni när ni beräknar AR IT. AR IT är helt enkelt den faktiska avkastningen (R IT ) minus den enligt marknadsmodellen skattade avkastningen R d IT. Ni skall alltså beräkna 11 stycken AR IT, ett för varje T=V från -5 till 5, dvs för de sista värdena i serien. I er rapport bör ni ta upp så mycket ni normalt skulle göra på en examination. Hur mycket detaljer man anser sig behöva ta med är ju också en del av uppgiften. 4.1.1 handlar i princip om att räkna ränteintensitet (vilket ni har gjort i bl a 3.1.3 tidigare). Marknadsmodellen skattas sedan som en linjär regression (se instruktionerna), dvs om ni har lagt er aktieavkastning i variabel "RIT" och er (marknads)indexavkastning i "RMT" så skattar ni (och lägger modellen i "model1") som: model1 <- lm(rit[1:60]~rmt[1:60]) 4.1.2 Vilka är regressionsantaganderna som görs i markandsmodellen? Notera att denna del inte längre är obligatorisk i inlämningsuppgiften!! Regressionsantagandena är de som normalt görs vid regressionsanalys. Dessa beskrivs i boken sidan 560. Ni behöver inte utföra några test, utan det räcker att gra skt studera residualerna. Antag att er regressionsmodell sparas i model1, med R IT som beroende och R MT som förklarande variabel på följande sätt: 8
model1 <- lm(r IT ~R MT ) Sampleresidualerna e IT = R IT d RIT = R IT b + b R MT, se bl a sidan 554 (Lee, Lee Lee), kan då t ex sparas i e IT på något av följande sätt: e IT <- R IT model1$fitted:values e IT <- model1$res e IT <- R IT (model1$coeff[1] + model1$coeff[2] R MT ) För att pröva om antagandena är uppfyllda räcker det för er att studera följande gurer: plot(r MT ; e IT ) # Assumption A: Residualerna plottade mot market return. Ser det ut att nnas något samband mellan dem, eller verkar de vara oberoende? hist(e IT ) # Assumption B: Histogram över residualerna, verkar dessa vara normalfördelade? Assumption C: Uppfylls genom att minsta kvadratmetoden används. plot(1 : 60; e IT ); lines(1 : 60; e IT ) # Assumption D: Residualerna plottade mot tidsordning. Finns det någon trend eller mönster i hur residualerna rör sig över tiden, eller verkar de röra sig slumpmässigt? plot(r MT ; R IT ) # Assumption E: Verkar variansen vara konstant, jämför med gur på sidan 561? För att göra motsvarande i minitab väljer man när man gör en regression att klicka för vilka residualplottar man vill ha (Stat/Regression/Regression/Graphs). Här får vi i och för sig inte R MT utan istället d R IT = b + b R MT plottad mot sampleresidualerna e IT, men i detta fall har det ingen betydelse för utseendet på grafen annat än för skalan. För att plotta R MT mot R IT används en scatterplot (Graph/Scatterplot/Simple). Man kan testa detta betydligt mer so stikerat om man vill, men för det rekommenderas en kurs i t ex regressionsanalys. 4.1.3 Varför används V istället för T i formeln. Det är ju bara en oskrivning av T, så vi tycker det verkar onödigt... V är mycket riktigt lika med T, men gäller endast för en kortare serie. När man skall beräkna variansen för AR IV behöver vi ju använda både V och T. Notera att täljaren i uttrycket är en konstant, så denna behöver endast beräknas en gång. Om ni beräknat marknadsavkastningen och lagt denna i RMT och beräknat M som 9
mym <- mean(rmt[1:60]) så erhålls alltså denna konstant, kalla den constant, som constant <- sum( (RMT[1:60]-mym)^2 ) Täljaren kan då i sin tur beräknas som nom <- (RMT[61:71]-mym)^2 Allt som står inom parentesen i uttrycket för variansen kan således räknas ut som (dvs 11 värden): (1+1/60+nom/constant) Vad som saknas är sedan att beräkna varianstermen från den genomförda regressionen, vilken i boken benämns som standard error of the estimate (se) (vilken dock behöver kvadreras, dvs summan av kvadrerade sampleresidualer delat med n-2 i detta fall). Skattade värden från regressionen (om denna sparats i model1) erhålls som: model1$ tted.values (se bl a uppgiften) och sampleresidualerna beräknas ju som ges i boken, 3.3.3 eller på föreläsning/övning. Man kan dock direkt hämta sampleresidualerna som model1$res (se bl a frågor och svar ovan) om man vill. 4.1.4 Här skall ni alltså räkna faktiska värden (på RIT serien) minus skattade värden och sedan summera dessa. De faktiska värden motsvarar ju observation 61 till och med 72, dvs RIT[61:72] Skattade värden kräver att ni hämtar skattningarna av alfa och beta från modellen, dvs model1$coe [1] model1$coe [2] (här kan ni få ytterligare ledning genom att kolla på frågor och svar till 4.1.2, som ju dock inte längre är obligatorisk). Ni skall också summera 11 varianser (här kan man använda funktionen sum(), se instruktioner). 10
2.2 4.2 Hypotestest Vad betyder E[CAR]? E står för expectation (eller expected value) dvs väntevärdet. Till exempel brukar vi beteckna väntevärdet av ett medelvärde med parametern. 4.2.1 Eftersom ni nu (förhoppningsvis) har räknat fram "cari" och "carivar" i 4.1.4 för det företag som saknas så kan detta stoppas in bland de saknade i "cari[,gruppnummer]" och "carivar[,gruppnummer]". Notera att för gruppnummer 1 saknas det första "cari" osv, så om ert framräknade värde ligger i "CARI" skriver ni alltså: cari[gruppnummer,gruppnummer] <- CARI för att ersätta det saknade värdet. Samma gäller för carivar. Sedan handlar det i princip om att kunna använda summafunktionen "sum()" och räkna medelvärden "mean()" (se instruktionerna). 4.2.2 Här erhålls 36 värden i "analtyic". Ett smidigt sätt att matcha värdena i "analytic" med t ex värdena i "cari" är att beräkna: analytic[,gruppnummer] * cari[,gruppnummer] så erhålls värdena för analytic=1. (Värdena på cari för analytic=0 kommer då att vara noll). Man kan sedan antingen summera cari och dra ifrån dessa värden, eller så kan man t ex räkna på abs(analytic[,gruppnummer]-1) * cari[,gruppnummer] dvs genom att vända på 1or och 0or i analytic för att få cari för analytic=0. (Värdena på cari för analytic=1 kommer då att vara noll). Sedan skall det inte vara andra funktioner än tidigare nämnda, möjligtvis kan man vilja använda "roten ur" sqrt() (se instruktionerna). 11
3 Övriga frågor Vi har problem att spara vårt arbete i R. Hur ska vi göra? Det går att spara men vi kan inte öppna någonting, när vi letar efter len nns den inte där. Vi har då sparat den som "save workspace". Problemet kan ibland vara att ltillägget glöms bort (.RData). Gå in i katalogen där ni sparat er l och leta efter alla sparade ler oavsett ltillägg.ändra sedan namnet så att det får tillägget, dvs "er l.rdata". Det mest e ektiva sättet att spara brukar annars vara att bara spara koden, och sedan köra om den vid behov. 12