Logaritmisesta keskiarvosta

[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!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.