[viesti Survo-keskustelupalstalla (2001-2013)]
Kirjoittaja: | Seppo Mustonen |
---|---|
Sähköposti: | - |
Päiväys: | 30.8.2002 9:03 |
Yrjö Vartia on indeksiteoriaan liittyvissä tutkimuksissaan 1970-luvun alussa päätynyt omaan hintaideksikaavaansa, joka nykyisin tunnetaan Sato-Vartia-hintaindeksinä. Tässä yhteydessä esiintyy erityinen keskiluku, josta Vartia tiettävästi ensimmäisenä on käyttänyt nimitystä logaritminen keskiarvo. Logaritminen keskiarvo L(x,y) kahdelle erisuurelle positiiviselle luvulle x,y on L(x,y) = (x-y)/log(x/y) = (x-y)/[log(x)-log(y)] eli siis lukujen erotus jaettuna niiden logaritmien erotuksella. Luonnollisesti määritellään L(x,x)=x. Logaritminen keskiarvo sotketaan joskus geometriseen keskiarvoon G(x,y) = sqrt(x*y) = exp[M(log(x),log(y))], missä M(x,y) = (x+y)/2 on tavallinen (aritmeettinen) keskiarvo. On mahdollista näyttää, että pätee epäyhtälö G(x,y) <= L(x,y) <= M(x,y) . Nähtyäni L(x,y):n vuoden 1974 tienoilla jäin ihmettelemään sen rakenteen poikkeavuutta kaikista muista keskiluvuista. Se ei mm. ole mikään potenssikeskiarvoista. Olin erityisesti kiinnostunut siitä, onko tuo tunnusluku yleistettävissä useammalle kuin kahdelle "havainnolle". Havaitsin, että L(x,y) saadaan analyyttisesti paremmin vertautumaan muihin keskiarvoihin käyttämällä seuraavaa sarjakehitelmätekniikkaa. Jos merkitään x=exp(u) ja y=exp(v), tulevat tässä mainituille keskiarvoille seuraavat esitykset eksponenttifunktion kehitelmän exp(u) = 1 + u + u^2/2! + u^3/3! + ... mukaan eli M(x,y) = 1 + (u+v)/2 + (u^2+v^2)/(2*2!) + (u^3+v^3)/(2*3!) + ... G(x,y) = sqrt(e^u*e^v) = exp[(u+v)/2] = 1 + (u+v)/2 + (u+v)^2/(2^2*2!) + (u+v)^3/(2^3*3!) + ... = 1 + (u+v)/2 + (u^2+2*u*v+v^2)/(2^2*2!) + (u^3+3*u^2*v+3*u*v^2+v^3)/(2^3*3!) + ... L(x,y) = (exp(u)-exp(v))/(u-v) = 1 + (u+v)/2 + (u^2+u*v+v^2)/(3*2!) + (u^3+u^2*v+u*v^2+v^3)/(4*2!) + ... Huomattakoon, että jokainen sarjakehitelmä on sama ensimmäistä astetta myöten. Asteen m>1 termissä määräävässä asemassa on m-asteinen homogeninen polynomi muotoa B(m)*u^m + B(m-1)*u^(m-1)*v + B(m-2)*u^(m-2)*v^2 + ... + B(0)*v^m jaettuna kertoimiensa B(m),B(m-1),...,B(0) summalla. Muuten kehitelmät ovat identtisiä eli keskiarvojen erot johtuvat pelkästään noiden B-kertoimien eroista. Aritmeettisella keskiarvolla kertoimet ovat B(m)=B(0)=1 ja muut B(i):t ovat nollia, geometrisella keskiarvolla ne ovat binomikertoimia B(i)=C(m,i), i=0,1,...,m ja logaritmisella keskiarvolla kaikki ovat ykkösiä eli B(i)=1, i=0,1,...,m. Logaritmisella keskiarvolla ykköskertoimet ovat seurausta siitä, että ko. polynomi syntyy tällöin osamäärän [u^(m+1)-v^(m+1)]/(u-v) supistuksesta, jolloin kehitelmän rakenne "symmetrisoituu". Myös muille keskiarvoille (esim. harmoninen ja potenssikeskiarvot) saadaan vastaavat kehitelmät, mutta kertoimien rakenteet ovat edellä mainittuja mutkikkaampia. Logaritminen keskiarvo on tässä suhteessa kaikkein yksinkertaisin ja sen kerroinrakenne kaikkein "tasapainoisin". Niinpä katsoin luonnolliseksi yleistää logaritmisen keskiarvon siten, että n havainnolla x(i)=exp(u(i)), i=1,2,...,n logaritmisen keskiarvon kehitelmä on muotoa L(x1,x2,...,xn) = 1 + (u1+u2+...+un)/n u1^2+u1*u2+...+u1*un+u2^2+u2*u3+...+un^2 + ---------------------------------------- C(n+1,2)*2! ... u1^m+u1^(m-1)*u2+...+un^m + ------------------------- C(n+m-1,m)*m! + ... missä siis m-asteisen termin osoittajassa oleva polynomi on muotoa P(n,m)= SUMMA u1^i1*u2^i2*...*un^in i1+i2+...+in=m i1>=0, i2>=0,...,in>=0 eli homogeenisten polynomien kaikki kertoimet ovat edelleen pelkkiä ykkösiä. Jakajina ovat nyt tietyt binomikertoimet, jotka vastaavat termien lukumääriä. Onnistuin silloin (vuonna 1974) muuntamaan tämän sarjakehitelmän suljettuun muotoon eli n xi L(x1,x2,...,xn) = (n-1)! SUMMA --------------- i=1 n TULO log(xi/xj) j=1 j<>i eli siis esim. kun n=3, x y z L(x,y,z)=2*[----------------- + ----------------- + -----------------]. log(x/y)*log(x/z) log(y/x)*log(y/z) log(z/x)*log(z/y) Kyseessä on siis havaintojen painotettu summa, mutta painot ovat todella erikoiset. Summeerattavien etumerkit ja suuruusluokat vaihtelevat niin, että tämän "pirunnyrkin" avulla laskeminen voi olla käytännössä (esim. jo yli 10 havainnolla) todella hankalaa. Pirunnyrkki jopa räjähtää, jos kaksikin havaintoarvoa yhtyy. Esim. tapauksessa n=6 ja x1=1 x2=2 x3=3 x4=4 x5=5 x6=6 painokertoimet ovat fact(5)/log(1/2)/log(1/3)/log(1/4)/log(1/5)/log(1/6)=-39.418667545093 fact(5)/log(2/1)/log(2/3)/log(2/4)/log(2/5)/log(2/6)=611.92625925381 fact(5)/log(3/1)/log(3/2)/log(3/4)/log(3/5)/log(3/6)=-2644.6753804824 fact(5)/log(4/1)/log(4/2)/log(4/3)/log(4/5)/log(4/6)=4797.8835355792 fact(5)/log(5/1)/log(5/2)/log(5/3)/log(5/4)/log(5/6)=-3915.4230188467 fact(5)/log(6/1)/log(6/2)/log(6/3)/log(6/4)/log(6/5)=1189.7072720412 ja käyttäytyvät siis varsin levottomasti. Koska havaitsin tuolloin (lähes 30 vuotta sitten) nuo ongelmat enkä toisaalta nähnyt tulokselle olevan mitään suoraa käyttöä tai sovellusta, en ole tästä tainnut muille (Yrjö Vartiaa lukuunottamatta) mitään puhua. Askarreltuani tänä kesänä moninkertaisen tarkkuuden laskennan kanssa tämä keskiarvo-ongelma palautui mieleeni, koska käyttämällä riittävää tarkkuutta pirunnyrkkikin mahdollisesti aukeaisi. Olen viime päivät rakentanut uutta Survo-modulia LOGMEAN, joka laskee logaritmisen keskiarvon annetusta aineistosta. Olen ympännyt moduliin pirunnyrkin ohella myös menettelyn, jossa logaritminen keskiarvo lasketaan sarjakehitelmästä, jolloin räjähtämisvaaraa ei ole. Tätä vaihtoehtoa harkitsin jo muinoin, mutta käytettävissä oleva laskentakapasiteetti (lähinnä ohjelmoitava taskulaskin, johon pirunnyrkki kyllä mahtui) ei kyllä käytännössä olisi riittänyt juuri mihinkään. Nyt riittää! ....................................................................... Esimerkki 1: DATA X: 1 2 3 4 5 LOGMEAN X,X,CUR+2 / METHOD=1 (pirunnyrkistä) OTHERS=1 (lasketaan myös M ja G) Data: X Variable: X N=5 Logarithmic mean: 2.673968132086515 Arithmetic mean: 3.000000000000000 Geometric mean: 2.605171084697352 ....................................................................... Pirunyrkillä ei kuitenkaan normaalilla kaksoistarkkuudella selvitä enää, kun havaintojen määrä on 14 tai enemmän Esimerkki 2: DATA Y: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 LOGMEAN Y,Y,CUR+1 / METHOD=1 (pirunnyrkistä) Data: Y Variable: Y N=15 Logarithmic mean: 26.36332449037582 (järjetön tulos!) ............................. Laskenta sarjakehitelmästä, joka on oletusmenettely: LOGMEAN Y,Y,CUR+1 / OTHERS=1 Data: Y Variable: Y N=15 Logarithmic mean: 6.535599593044709 Arithmetic mean: 8.000000000000000 Geometric mean: 6.423424749779762 Tästä jo näkyy, että L on selvästi lähempänä G:tä kuin M:ää. ....................................................................... Sarjakehitelmää käytettäessä on nopeuden kannalta hyvin olennaista, miten homogeeniset polynomit P(n,m) = u(n)^m + u(n)^(m-1)*(u1+u2+...+u(n-1)) + u(n)^(m-2)*(u1^2+u1*u2+...u1*u(n-1)+u2^2+u2*u3+...+u(n-1)^2) ... + u(n)^0*(u1^m+u1^(m-1)*u2+...+u(n-1)^(m-1)) lasketaan. Ratkaisevaa on havaita, että tämä valmiiksi u(n):n laskevien potenssien mukaan järjestetty P(n,m) voidaan lausua rekursiivisesti "itsensä avulla" muodossa P(n,m) = u(n)^m + u(n)^(m-1)*P(n-1,1) + u(n)^(m-2)*P(n-1,2) ... + u(n)^1*P(n-1,m-1) + u(n)^0*P(n-1,m) reunaehdoin P(n,1) = u1+u2+...+u(n), P(1,m) = u1^m. Rekursiivisessa laskennassa tarvitaan paljon muistia jo sellaisenaan, mutta se saattaa olla erittäin hidasta, koska samat P-yhdistelmät tulevat lasketuksi moneen kertaan. Aikaa säästyy kuitenkin huomattavasti muistitilan kustannuksella siten, että pidetään yllä taulukkoa, joka on tarkoitettu sisältämään kaikki ajon aikana lasketut P-arvot. Tällöin kutakin P:tä laskettaessa katsotaan ensin, löytyykö sille arvo valmiina taulukosta. Tällä tekniikalla nykyinen koneeni (1.6 GHz) selviää tapauksessa n=200000 hieman yli 2 minuutissa. Alle 10000:n havaintomäärillä vastaus tulee välittömästi. ....................................................................... Esimerkki 3: Keskiarvot aineistosta 1,2,3,...,200000 FILE MAKE KOE,1,200000,X,8 VAR X=ORDER TO KOE TIME COUNT START LOGMEAN KOE,X,CUR+3 / OTHERS=1 TIME COUNT END 134.704 Data: KOE Variable: X N=200000 Logarithmic mean: 73578.65538616560 Arithmetic mean: 100000.5000000000 Geometric mean: 73578.47151997556 ....................................................................... On ilmeistä, että yleisilläkin havaintoluvuilla n epäyhtälö G(x,y) <= L(x,y) <= M(x,y) pätee edelleen. En ole sitä yrittänyt todistaa. Mielenkiintoista on tarkkailla keskiarvojen käyttäytymistä systemaattisella aineistolla 1 2 3 ... n Jos merkitään tästä laskettuja keskiarvoja G(n),L(n),M(n), on helppo nähdä, että M(n)-M(n-1) = 1/2 kaikilla n mutta miten käyttäytyvät L(n) ja G(n)? ...................................................................... Esimerkki 3: (jatkoa) Jätetään viimeinen havainto pois: IND=ORDER,1,199999 LOGMEAN KOE,X,CUR+1 / OTHERS=1 Data: KOE Variable: X N=199999 Logarithmic mean: 73578.28750580405 Arithmetic mean: 100000.0000000000 Geometric mean: 73578.10363961496 Siten arvolla n=200000 L(n)-L(n-1) = 0.36788036154758 L(n)/n = 0.36789327693083 G(n)-G(n-1) = 0.3678803606017 G(n)/n = 0.36789235759988 ...................................................................... Näiden laskelmien perusteella on ilmeistä, että lim L(n)-L(n-1) = lim G(n)-G(n-1) = 1/e = exp(-1)=0.367879... n->oo n->oo ja myös lim L(n)/n = lim G(n)/n = 1/e . n->oo n->oo Geometrisen keskiarvon osalta tulokset on helposti todistettavissa Stirlingin kaavan avulla. Logaritmisen keskiarvon suhteen se voi olla vaikeaa. On kuitenkin ilmeistä, että lineaarisesti kasvavilla aineistoilla logaritminen keskiarvo käyttäytyy melko lailla geometrisen keskiarvon tapaan. Eksponentiaalisesti kasvavilla aineistoilla näin ei tapahdu, vaikka tällöinkin L on samaa suuruusluokkaa kuin G ja eri suuruusluokkaa kuin M. ....................................................................... Esimerkki 4: DATA Z: 1 2 4 8 16 32 64 128 256 512 1024 LOGMEAN Z,Z,CUR+1 / OTHERS=1 Data: Z Variable: Z N=11 Logarithmic mean: 39.06118276908551 Arithmetic mean: 186.0909090909091 Geometric mean: 31.99999999999999 ....................................................................... Esimerkki 5: FILE MAKE KOE,1,10000,X,8 VAR X TO KOE X=if(ORDER=1)then(1)else(1.0035*X[-1]) LOGMEAN KOE,X,CUR+1 / OTHERS=1 Data: KOE Variable: X N=10000 Logarithmic mean: 45284561.74054968 Arithmetic mean: 42628513703817.63 Geometric mean: 38558970.42108205 ....................................................................... LOGMEAN-ohjelma tulee olemaan mukana SURVO MM:n versiosta 1.25 eteenpäin. Koska sillä on pystytään tarkastelemaan logaritmisen keskiarvon käyttäytymistä hyvin erilaisilla ja suurillakin aineistoilla, toivon tätä kautta kertyvän lisätietoa tämän keskiarvon ominaisuuksista. Olen kiitollinen kaikesta mahdollisesta palautteesta. - Seppo
Vastaukset: |
---|
Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!