Predavanje 22

FlipView[{Text[Style[" Branko Urošević, imqfbrankourosevic@gmail.com ",20,"Text",Italic]],Text[Style[" Faculty of Economics, University of Belgrade, NBS and CESIfo Munich",20,"Text", Italic]]}]

Statistička obrada podataka u WL

WL je izuzetno pogodan kako za grafičko predstavljanje podataka (to smo već videli) tako i za njihovo statističko modeliranje i obradu. U ovom poglavlju ćemo ukratko izložiti kako se u WL radi statističko testiranje hipoteza i linearna regresija,

Ovde je pre svega cilj da se intuitivno nauči kako da primenimo WL na rešavanje takvih problema, bez previše obaziranja na neke od važnih tehničkih detalja kada nam oni nisu krajnje neophodni. Te tehničke detalje možete naučiti na kursevima ekonometrije i vremenskih serija ili naći u knjigama ili na internetu.

1. Statističko testiranje hipoteza

Uvodna razmatranja

Kada imamo neki skup podataka, interesuje nas kakva funkcija raspodele ili model stohastičkog procesa mu najbolje odgovara, kakva je “prava” očekivana vrednost raspodele iz koje je izvučen taj skup podataka, kakva je varijansa, da li postoji statistička veza između nekih grupa podataka itd.

Odgovori na ova pitanja ne mogu se dati sa sigurnošću. Naime, možemo da kažemo sa kakvom verovatnoćom možemo da odbacimo neku hipotezu ali ne i da tvrdimo da je nešto svakako tačno (ovaj poslednji iskaz bio bi deterministički). Različiti testovi mogu da daju različite rezultate. U onoj meri u kojoj veliki broj različitih testova ukazuje na isti zaključak mi smo sigurniji da smo u pravu. Ovde ćemo da vidimo kako se u WL vrše neki statistički testovi. Pitanja na koja ćemo želeti da odgovorimo, između ostalog, su:

Kako da verifikujemo da je srednja vrednost neke grupe podataka jednaka (manja ili veća) od neke zadate vrednosti u statističkom smislu?
Kako da uporedimo srednje vrednosti dve ili više grupe podataka?
Kako testirati kolika je varijansa nekog uzorka?
Kako da proverimo zavisnost između dve ili više grupa podataka?
Kako da proverimo da li je neki uzorak izvučen iz neke zadate raspodele (recimo normalne)?

Testiranje osnovnih hipoteza vezanih za srednju vrednost

Da bismo proverili da li neka grupa podataka ima srednju vrednost koja se statistički ne razlikuje od 0, mi možemo da postavimo nultu hipotezu da je srednja vrednost jednaka 0. Onda je alternativna hipoteza da srednja vrednost nije jednaka 0.

Ono što možemo da izračunamo (na više različitih načina) jeste verovatnoća sa kojom možemo da prihvatimo (ili odbacimo) nultu hipotezu. Stoga, da bismo testirali hipotezu, postoje funkcije koje računaju upravo verovatnoću da treba da prihvatimo osnovnu hipotezu (odnosno da odbacimo alternativnu). Što je veća ta verovatnoća, to smo sigurniji u našem zaključku.

Hipotezu o srednjoj vrednosti uzorka možemo da proverimo putem LocationTest funkcije. Razmotrimo uzorak od 1000 slučajno generisanih brojeva iz standardne normalne raspodele.

uzorak=RandomVariate[NormalDistribution[],1000];

Uzoračka sredina i histogram izgledaju ovako:

Mean[uzorak]

SmoothHistogram[uzorak]

Hajde da proverimo da li se srednja vrednost statistički ne razlikuje od nule. To radimo pomoću

LocationTest[uzorak,0]

Testiranje uzorka iz standardne normalne raspodele

To znači da je po nekom standardnom testu (po defoltu) ovaj uzorak napravljen iz raspodele koja ima srednju vrednost 0 sa verovatnoćom od (šta god da smo dobili tu) posto. U pitanju je p-vrednost o čemu ćemo nešto više reći kasnije. Što je p-vrednost veća to je manja verovatnoća da možemo da odbacimo originalnu hipotezu.

Kada bismo imali verovatnoću ispod 10 posto, morali bismo da odbacimo nultu hipotezu sa pouzdanošću od 90 posto. Možemo da istovremeno obavimo više testova kako bismo sigurniji u našim zaključcima:

LocationTest[uzorak,Automatic,{"TestDataTable",All}]

Ne ulazeći u detalje toga kakvi su ovi testovi vidimo da ne možemo statistički da odbacimo nultu hipotezu da je srednja vrednost uzrorka jednaka nuli.

Testiranje srednje vrednosti uzoraka iz drugačijih normalnih raspodela

Napravimo sada dva uzorka, jedan iz raspodele sa teorijskom srednjom vrednošću 5, a drugi sa teorijskom srednjom vrednošću 1.

uzorak1=RandomVariate[NormalDistribution[5,2],1000];

uzorak2=RandomVariate[NormalDistribution[1,1],1000];

Testirajmo sada nultu hipotezu da je srednja vrednost oba uzorka jednaka 5. To bismo uradili ovako:

LocationTest[#,5]&/@{uzorak1,uzorak2}

Vidimo da za prvi uzorak nultu hipotezu ne možemo da odbacimo dok za drugu možemo da odbacimo sa velikom pouzdanošću (što naravno nije iznenađujuće ako se setimo iz kojih raspodela smo generisali uzorke). Naravno, ukoliko bismo testirali hipotezu da su srednje vrednosti jednake 1, dobili bismo da moramo da odbacimo tu hipotezu za prvi ali ne i za drugi uzorak.

LocationTest[#,1]&/@{uzorak1,uzorak2}

Testiranje za koliko je srednja vrednost jednog uzorka veća od srednje vrednosti drugog

Proverimo sada hipotezu da je srednja vrednost prvog uzorka za 4 veća od srednje vrednosti drugog. To se piše ovako:

LocationTest[{uzorak1,uzorak2},4]

Vidimo da po defoltnom testu ne možemo da odbacimo tu hipotezu. Hajde da proverimo to isto za sve testove odjednom. Uradimo to ovako:

h0=LocationTest[{uzorak1,uzorak2},4,"HypothesisTestData"]

Evo kako možemo da izvučemo iz toga neke važne statistike:

h0["PValue","T"]

h0["TestStatistic","T"]

Možemo da više testova prikažemo i grafički, i evo kako.

resultati=h0["TestData",All];

testovi=h0["AllTests"];

BarChart[resultati[[All,2]],ChartLabels-> Placed[testovi,Center],BarOrigin-> Left]

Testiranje srednje vrednosti kada je hipoteza data preko nejednakosti

Do sada smo testirali samo hipoteze da je srednja vrednost ili razlika srednje vrednosti jednaka nečemu. Umesto toga, možemo da testiramo hipoteze koristeći nejednakosti.

Na primer, kako da testiramo hipotezu da je razlika u srednjim vrednostima između dva uzoraka veća ili jednaka 4?  Tako što ćemo definisati alternativnu hipotezu preko "Less". Naime:

LocationTest[{uzorak1,uzorak2},4,AlternativeHypothesis-> "Less"]

Dakle, ne možemo odbaciti hipotezu da je razlika bar 4.

Interesatno je da možemo da menjamo i nivo statističke pouzdanosti koristeći sledeću opciju

Clear[hipoteza0]

hipoteza0=LocationTest[{uzorak1,uzorak2},4,AlternativeHypothesis-> "Less",SignificanceLevel->0.05]

Rezultat testiranja prikazan rečima

Napravimo ponovo uzorak:

uzorak1=RandomVariate[NormalDistribution[5,2],1000];

LocationTest[uzorak1,5]

Proverimo sada hipotezu da je srednja vrednost jednaka 5 na nivou signifikanosti 0.1, 0.05, 0.01, i 0.00001. Ono što nas zanima jeste da prikažemo rezultat testiranja rečima, a ne brojkom.

{ℋ1,ℋ2,ℋ3,ℋ4}=LocationTest[uzorak1,5,"HypothesisTestData",SignificanceLevel->#]&/@{0.1, 0.05, 0.01, 0.00001};

ℋ1["TestConclusion"]

ℋ2["TestConclusion"]

ℋ3["TestConclusion"]

ℋ4["TestConclusion"]

Nastavak

Nije teško videti da ukoliko testiramo da je srednja vrednost jednaka 3 umesto 5 imali bismo:

{ℋ1,ℋ2,ℋ3,ℋ4}=LocationTest[uzorak1,3,"HypothesisTestData",SignificanceLevel->#]&/@{0.1, 0.05, 0.01, 0.00001};

ℋ1["TestConclusion"]

ℋ2["TestConclusion"]

ℋ3["TestConclusion"]

ℋ4["TestConclusion"]

Testiranje hipoteza vezanih za varijansu

Varijansa je druga veoma važna karakteristika slučajnih uzoraka. Njen nivo se testira vrlo slično kao kod srednje vrednosti. Funkcija za to je VarianceTest.

Pretpostavimo da želimo da generišemo uzorak od 1000 standardnih normalnih promenljivih.

uzorak5=RandomVariate[NormalDistribution[],1000];

Izračunajmo sada uzoračku varijansu:

Variance[uzorak5]

Da li se ona statistički razlikuje od teorijske vrednosti 1? To možemo da testiramo koristeći

VarianceTest[uzorak5,1]

Da li možemo da odbacimo da uzorak koji smo generisali dolazi iz raspodele sa varijansom jednakom 1? To zavisi od uzorka.

Nastavak

Probajmo sada nešto drugo. Da li možemo da odbacimo da je varijansa zapravo 1.1?

VarianceTest[uzorak5,1.1]

A šta je sa 0.9?

VarianceTest[uzorak5,0.9]

Na taj način, možemo naći interval u kome bi razumno morala da bude prava varijansa.

Kako testirati jednakost varijanse dva različita uzorka?

Ništa prostije. Naime, pretpostavimo da smo napravili dva uzorka. Oba imaju istu teorijsku varijansku jednaku 1.

uzorak10=RandomVariate[NormalDistribution[2,1],1000];

uzorak11=RandomVariate[NormalDistribution[3,1],1000];

SmoothHistogram[{uzorak10,uzorak11},PlotStyle->{Thin,Thick}]

Ovako testiramo jednakost varijansi:

VarianceEquivalenceTest[{uzorak10,uzorak11}]

Vidimo da po defolt testu ne možemo da odbacimo da su varijanse identične. Šta više, to ne možemo da uradimo ni za celu seriju testova:

VarianceEquivalenceTest[{uzorak10,uzorak11},{"TestDataTable",All}]

Kako proveriti da li su dve ili više grupa podataka nezavisne jedna od druge

Prilikom rada sa podacima veoma je važno znati da li su podaci statistički nezavisni ili zavisni. Od toga zavisi kakvi modeli imaju smisla a kakvi ne.

U WL postoji funkcija IndependenceTest koja to proverava. Ona radi veoma slično kao i druge funkcije za testiranje hipoteza koje smo već videli. Nulta hipoteza jeste da su grupe podataka nezavisne a alternativna je da nisu.

Razmotrimo Binormalnu raspodelu sa korelacijom jednakom 0. U tom slučaju očekujemo da dobijemo statistički nezavisne podatke za dve kolone. Hajde da to generišemo.

RandomVariate[BinormalDistribution[0],10]

Ukoliko hoćemo da te tačke predstavimo preko dve kolone brojeva, moramo da ovu listu transponujemo. Definišimo dve varijable (kolone) kao:

{v1,v2}=RandomVariate[BinormalDistribution[0],200]\[Transpose];

Možemo da izračunamo korelaciju:

Nastavak

Correlation[{v1,v2}\[Transpose]]

Vidimo da je koeficijent korelacije mali. Da li je to, međutim, statistički različito od nule, odnosno da li su dve kolone v1, v2 nezavisne? Primetimo razliku u sintaksi ovde. Naime, nema vitičastih zagrada kao u prethodnim primerima!

IndependenceTest[v1,v2]

Po defoltu dobijamo da se nezavisnost ne može odbaciti. Hajde da sada probamo da dobijemo odgovore na sve testove:

IndependenceTest[v1,v2,{"TestDataTable",All}]

Očigledno da ni po kom kriterijumu ne možemo da odbacimo nezavisnost ove dve varijable. Primetimo da male vrednosti koeficijenta korelacije govore o tome da, možda, ne možemo da ih razlikujemo statistički od nule.

Naći raspodelu koja najbolje opisuje neku grupu podataka

Razmotimo vrednost indeksa SP500 u 2015. To je indeks koji opisuje kretanje cena 500 najvećih kompanija u SAD i služi kao proxy za tržišni portfolio. U tom slučaju:

sp500=Last[FinancialData["SP500",{2015}]\[Transpose]]

Ukoliko internet ne radi importujemo fajl sp500indexu2015.dat.

Izračunajmo sada logaritamske prinose

prinossp500=Log[Most[sp500]/Rest[sp500]];

SmoothHistogram[prinossp500,PlotRange->All]

Ovako dobijamo raspodelu koja po određenom kriterijumu predstavlja najbolji fit.

FindDistribution[prinossp500]

Nastavak

Možemo sada da vidimo kako izgleda ta procenjena raspodela verovatnoće

PDF[FindDistribution[prinossp500],x]

Plot[PDF[LaplaceDistribution[-0.0001829809695280891`,0.006685126235239775`],x],{x,-0.06,0.06},PlotRange-> All]

Testirajmo sada u kojoj meri procenjena raspodela odgovara podacima

h0=DistributionFitTest[prinossp500,FindDistribution[prinossp500],"HypothesisTestData"]

h0["TestDataTable",All]

Vidimo da ta raspodela ne može da odbaci nultu hipotezu, naime da je originalna raspodela iz koje su podaci dobijeni gornja LaplaceDistribution.

2, Linearna regresija u WL

Da li su žene diskriminisane sa platama u SAD?

Pretpostavimo da želimo da ustanovimo da li su žene diskriminisane u odnosu na muškarce što se tiče plate. Jedan prost, ali ne i preterano pouzdan, način da to ustanovimo jeste da napravimo regresiju plate po satu rada u odnosu na varijablu koja je jednaka 0 ukoliko je u pitanju žena i 1 ukoliko je u pitanju muškarac.

Onda probamo da objasnimo platu pomoću modela u kome se kao objašnjavajuća varijabla pojavljaje ta koja određuje da li je neko muškarac ili žena. Ukoliko je ta varijabla signifikantna, onda to može da znači da to što je neko muškarac ili ne utiče na platu. Razume se, iz toga je prerano zaključiti da li postoji diskriminacija. Ali, biće neka indikacija da bar postoji šansa da je tako.

Podatke koji se nalaze u Sheet1 fajla podaci22.xlsx, u WL unosimo, kao i uvek, preko Import funkcije:

wagesdata=Import[][[1]]

Pogledajmo dimenzije ove tabele:

Dimensions[wagesdata]

Definisanje varijabli

Svaka kolona u ovoj velikoj matrici odgovara jednoj promenljivoj. Na primer, treća kolona je:

wagesdata[[All,3]]

Ukoliko odbacimo naslove i definišemo varijable za platu po satu rada (wages), broj godina iskustva (exper), da li je neko muškarac (1) ili žena (0) (to je varijabla male) i najzad broj godina školovanja (shool)

{exper, male, school, wages}=Rest[wagesdata[[All,#]]]&/@Range[4];

Linearna regresija sa jednom nezavisnom promenljivom

Probajmo sada da objasnimo platu po satu rada samo na osnovu toga da li je ispitanik muškarac ili žena. Formiramo matricu u kojoj idu prvo objašnjavajuće variable i na kraju variabla koja treba da se objasni:

data1={male,wages}\[Transpose];

Vidimo da prvi podatak odgovara ženi čija je plata 6.31 dolar na sat, drugi podatak odgovara ženi čija je plata 5.47 dolara na sat itd.

Take[data1,30]

Evo sada i kako se fituju ovi podaci koristeći LinearModelFit

model1=LinearModelFit[data1,{xmale},{xmale}]

Output je objekat koji sadrži velike količine korisnih informacija o modelu ukoliko znamo kako da ih koristimo. Prvo, vidimo da, saglasno modelu, koeficijent uz male varijablu ne izgleda jednak nuli.

Ako je significantan, to bi značilo da u srednjem muškarci zarađuju 1.12 dolara više od žena (srednja plata žena je 5.15 otprilike po satu rada, to je konstantni koeficijent). Jednačinu modela možemo da izvučemo ovako:

Normal[model1]

Nastavak o linearnoj regresiji sa jednom nezavisnom promenljivom

Korisno je, takođe, da vidimo kako izgledaju intervali poverenja za procenjene parametre. To radimo ovako:

model1["ParameterConfidenceIntervalTable"]

Primetimo da su oba procenjena koeficijent statistički značajna i pozitivna (intervali poverenja na nivou 95 posto ne sadrže nulu). Druge korisne stvari koje možemo videti iz modela jeste:

model1["ANOVATable"]

Vidimo da koeficijenti nisu ne samo pojedinačno nego ni zajedno jednaki nuli (veoma mala P vrednost odnosno veoma veliki F koeficijent)

Još jedna standardna karakteristika modela jeste (R^2) (udeo varijacije koji objašnjava varijabla male). Ona je niska:

model1["RSquared"]

Linearna regresija sa dve nezavisne promenljive

Naravno, nije teško zapitati se: da li bi rezultat bio signifikantan ukoliko bismo u obzir uzeli, recimo, i godine iskustva? Jer, može da se desi da su muškarci iskusniji na poslu i, stoga, bolje plaćeni? U tom slučaju, ako kao objašnjavajuću variablu dodamo exper može doći do promene.

data2={exper,male,wages}\[Transpose];

Take[data2,30]

Evo kako bi se fitovao ovakav model pomoću LinearModelFit. Primetimo da je prva lista sa varijablama zapravo tip modela, a druga lista je definicija od kojih varijabli se pravi model. Pošto se u prvoj listi pojavljuju samo linearni članovi po varijablama, u pitanju je linearni model.

model2=LinearModelFit[data2,{xexper,xmale},{xexper,xmale}]

Ali, to ne mora da bude slučaj. Ovako pravimo model koji ima i interakciju između dummy varijable i variable koja opisuje iskustvo

LinearModelFit[data2,{xexper,xmale, xexper xmale},{xexper,xmale}]

Vratimo se na prethodni model. U tom slučaju

Normal[model2]

Opet moramo da proverimo statističku značajnost. Za pojedinačne varijable dobijamo sledeće intervale poverenja:

model2["ParameterConfidenceIntervalTable"]

Vidimo da je exper zapravo, pojedinačno gledano, nesignificantna. Sa druge strane, male je i dalje statistički značajna.

model2["ANOVATable"]

Vidimo da kolektivno nisu sve beznačajne. Sa druge strane, dodavanje ove jedne varijable doprinosi malo poboljšanju (R^2).

model2["RSquared"]

Nastavak regresije sa dve objašnjavajuće promenljive

Kada imamo više varijabli, onda je bolje koristiti Adjusted (R^2) (on uzima u obzir da smo možda veštački povećali (R^2) samo zato što smo povećali broj promenljivih)

model2["AdjustedRSquared"]

Probajmo, sada, umesto exper da u model ubacimo godine obrazovanja. Naime,

data3={school,male,wages}\[Transpose];

Evo sada i kako se fituje LinearModelFit

model3=LinearModelFit[data3,{xschool,xmale},{xschool,xmale}]

Da li možda više godina školovanja muškaraca objašnjava razliku u plati muškaraca i žena? Ne liči da je tako. Vidimo da su sada svi koeficijenti statistički značajni:

model3["ParameterConfidenceIntervalTable"]

Primetimo, takođe, da je Adjusted (R^2) značajno unapređen u odnosu na prethodne modele.

model3["AdjustedRSquared"]

Regresija sa 3 objašnjavajuće promenljive

Da li bi se stvari dodatno popravile ukoliko bismo stavili sve tri objašnjavajuće promenljive?

data4={school,exper,male,wages}\[Transpose];

model4=LinearModelFit[data4,{xschool,xexper,xmale},{xschool,xexper,xmale}];

Normal[model4]

Proverimo sada statističku značajnost varijabli:

model4["ParameterConfidenceIntervalTable"]

Primetimo da je sada i xexper postala značajna! Takođe,

model4["AdjustedRSquared"]

Vidimo da smo dobili model koji ima relativno pristojan Adjusted (R^2).

Analiza reziduala

Da bismo bili sigurni da naša regresiona analiza ima smisla, moramo da proverimo svojstva reziduala. Kako izgledaju reziduali? Jedan način da se proveri pretpostavka o normalnosti grešaka bila bi da se napravi takozvani QuantilePlot.

On crta empirijske kvantile serije grešaka i kvantile normalne raspodele. Ukoliko bi kvantili grešaka ležali na pravoj liniji, oni bi bili normalno raspodeljeni. Očigledno, to ovde nije slučaj.

model4["FitResiduals"]

QuantilePlot[model4["FitResiduals"]]

Nije teško ustanoviti da su greške nisu normalno raspodeljene

h0=DistributionFitTest[model4["FitResiduals"],NormalDistribution[a,b],"HypothesisTestData"]

h0["TestDataTable",All]

Još o rezidualima

Proverimo sada da li su reziduali nezavisni u odnosu na varijable sistema. Vidimo ovako da nema očigledne zavisnosti.

ListPlot[model4["FitResiduals"]]

Ali, proverimo sada nezavisnost reziduala u odnosu na 3 objašnjavajuće varijable:

IndependenceTest[model4["FitResiduals"],#]&/@{school,exper,male}

Vidimo da se na nivou signifikantnosti od 5 posto ili manje ne može odbaciti nezavisnost. Ukoliko, pak, koristimo 10 posto kao kriterijum, onda se nezavisnost može praktično odbaciti. Znači, ovaj model je na granici prihvatljivosti ovakav kakav je.

Model prinosa na hartije od vrednosti: Fama-French faktori

Ideja je da se analizira koji su glavni faktori koji utiču na prinose akcija na tržištu. Na njih, pre svega, utiče kretanje na tržištu u celini, kao i neki drugi faktori rizika koji se zovu Fama-French faktori (dobili su ime po dvojici ekonomista koji su ih uveli u razmatranje). Podatke unosimo iz fajla podaci22.xlsx, Sheet 3.

capmdata = Import["C:\\Users\\Branko Urosevic\\Dropbox\\Branko Urosevic\\operaciona2\\downloads\\podaci22.xlsx"][[3]];

Tu imamamo podatke o prinosima na neke portfolije hartije od vrednosti kao i neke faktore rizika koji treba da budu objašnjavajuće varijable. Podaci su mesečni, od januara 1960 do oktobra 2010 (610 meseci). Podaci su, tipično, dati kao prinosi u odnosu na nerizičnu stopu (u procentima): dodatni prinos = prinos- rf. Takođe imamo i podatke o nerizičnoj stopi rf. Još jedna varijabla koju možemo da definišemo jeste januarska promenljiva. Ona je jednaka 1 kada je mesec januar, i 0 u ostalim slučajevima.

Grid[Map[Style[#,20,Bold]&,{{"Portfolio","Objašnjenje"},{"foodrf","dodatni prinos na indeks industrije hrane"},{"durblrf","dodatni prinos na indeks nepotrošne robe"},{"cnstrrf","dodatni prinos na indeks građevinarstva"},{"rmrf","dodatni prinos na tržišni portfolio"},{"rf","prinos na nerizičnu aktivu"},{"smb","dodatni prinos na male kompanije"},{"hml","dodatni prinos na hml faktor"},{"jan","dummy varijabla za januar"}},{2}],Frame->All]

Svi dodatni prinosi se računaju u odnosu na nerizičnu stopu za taj mesec.

{constrrf,durblrf,foodrf,hml,jan,rf,rmrf ,smb}=Rest[capmdata[[All,#]]]&/@Range[2,9];

CAPM model

Ideja Capital Asset Pricing modela (ili CAPM) jeste da postoji jedan faktor ključni faktor rizika koji igra glavnu ulogu u određenju prinosa na sve ostale hartije od vrednosti, a to je prinos na tržišni portfolio. U tom smislu, CAPM pretpostavilja da sledeća regresija

(Subscript[r, i]) = (Subscript[α, i])+(Subscript[β, i])(Subscript[r, m])+ϵ

treba da objasni prinos na akciju i preko prinosa na tržišni portfolio m. U praksi, zbog smanjenja šuma, obično se sa obe strane oduzima (Subscript[r, f]), nerizična stopa prinosa. Drugi rečima ocenjuje se regresiona jednačina

(Subscript[r, i])-(Subscript[r, f]) = (Subscript[α1, i])+(Subscript[β, i])((Subscript[r, m])-(Subscript[r, f]))+ϵ

Najzad, ukoliko je model CAPM validan opis stvarnih prinosa, regresiona konstanta (Subscript[α1, i]) treba da bude jednaka 0. Drugi rečima, ukoliko CAPM važi, očekivani dodatni prinos na proizvoljnu aktivu će biti proporcionalan tržišnoj riziko premiji

E[(Subscript[r, i])-(Subscript[r, f])] = (Subscript[β, i])E[((Subscript[r, m])-(Subscript[r, f]))]

Coeficijent proporcionalnosti, β, je mera sistematskog rizika akcije u odnosu na tržište. Promenljiva ϵ sadrži u sebi rizik specifičan za tu aktivu (takozvani idiosinkratski rizik).

Testiranje CAPM modela na foodrf indeksu

Probajmo da objasnimo dodatne prinose na foodrf indeks (to jest na indeks industrije hrane u Americi). Počnimo od najprostijeg modela, naime CAPM. Dodatni prinos se onda pretpostavlja da zavisi samo od  dodatnog prinosa na tržišni portfolio rmrf. Odredimo  koeficijente regresije (alfa i beta) za ovaj portfolia.

Formirajmo prvo matricu podataka. Pošto su svi podaci u procentima, moramo da ih sve podelimo sve brojeve sa 100:

data1=0.01{rmrf,foodrf}\[Transpose];

model1=LinearModelFit[data1,xrmrf,xrmrf]

Evo kako fit izgleda grafički

Show[ListPlot[model1["Data"],PlotStyle->Orange],Plot[model1[x],{x,-15,15}]]

Evo i ocenjenog modela kao i osnovnih njegovih karakteristika

Normal[model1]

model1["ParameterConfidenceIntervalTable"]

model1["AdjustedRSquared"]

Regresiona konstanta je alfa=0.0032, dok je beta=0.75. Beta određuje u kojoj meri promene uslova na tržištu utiču na promenu prinosa na vrednosno otežinjeni portfolio za hranu.

Dodavanje drugog faktora u regresiju

Ukoliko kretanje tržišta u celini hvala ceo rizik, to jest ukoliko bi CAPM važio u potpunosti, alfa bi morala biti jednaka nuli, što očigledno nije slučaj. Stoga zaključujemo da bismo za konstrukciju pravilnog modela morali da uključimo i neke druge faktore.

Jedan faktor koji može da ima uticaj jeste takozvani smb faktor, koji predstavlja dodatni prinos malih kompanija u odnosu na prinose velikih kompanija. Naime, poznato je da male kompanije u srednjem ostvaruju veće prinose od velikih, između ostalog zato što su rizičnije i, naravno, mogu lakše da rastu po velikim stopama. Model koji ocenjujemo je, dakle

(Subscript[r, i])-(Subscript[r, f]) = (Subscript[α1, i])+(Subscript[β, i])((Subscript[r, m])-(Subscript[r, f]))+(Subscript[β, 2])(Subscript[r, smb])+ϵ

Da bismo ocenili ovu regresiju treba da dodamo i ovaj faktor kao objašnjavajuću varijabluzajedno sa rmrf (opet moramo da podelimo sve brojeve sa 100)

data2=0.01{smb,rmrf,foodrf}\[Transpose];

model2=LinearModelFit[data2,{xsmb,xrmrf},{xsmb,xrmrf}]

Normal[model2]

model2["ParameterConfidenceIntervalTable"]

model2["AdjustedRSquared"]

Primetimo da dodavanjem samo jedne varijable smb jesmo malo povećali Adjusted (R^2) ali nismo smanjili konstantu. Sve variable su pojedinačno statistički značajne.

Dodajmo i treći faktor

Fama i French su predložili korišćenje 3 faktora rizika. Prva dva smo već razmatrali. Treći je hml. To je prinos na portfolio koji je konstruisan da uzme u obzir razliku u prinosima između value i growth akcija, odnosno akcija koje imaju sporiji i brži rast. Sada regresija postaje:

(Subscript[r, i])-(Subscript[r, f]) = (Subscript[α1, i])+(Subscript[β, i])((Subscript[r, m])-(Subscript[r, f]))+(Subscript[β, 2])(Subscript[r, smb])++(Subscript[β, 3])(Subscript[r, hml])+ϵ

Da bismo je ocenili, formiramo matricu podataka na sledeći način

data3=0.01{smb,hml,rmrf,foodrf}\[Transpose];

model3=LinearModelFit[data3,{xsmb,xhml,xrmrf},{xsmb,xhml,xrmrf}]

Normal[model3]

model3["ParameterConfidenceIntervalTable"]

model3["AdjustedRSquared"]

Primetimo da smo opet dobili da su na 95 nivou pouzdanosti sve promenljive statistički značajne. Takođe, alfa je i dalje značajna.

Objašnjavajuće varijable mogu da ulaze u regresiju i nelinearno. Recimo, ukoliko želimo da pored linearnog razmatramo i kvadratni uticaj promenljive smb to možemo da uradimo ovako:

model4=LinearModelFit[data3,{xsmb,(xsmb^2),xhml,xrmrf},{xsmb,xhml,xrmrf}]

Normal[model4]

Posvećeno ideji ponovnog uvođenja obaveznog vojnog roka u Srbiji

https://www.youtube.com/watch?v=53V9Vo0f5wk

a za one koji ne razumeju ruski, evo i jedne domaće

https://www.youtube.com/watch?v=3_7fYTObkrw