POWERS mm. polynomiregression avuksi

[viesti Survo-keskustelupalstalla (2001-2013)]

Kirjoittaja: Seppo Mustonen
Sähköposti:    -
Päiväys: 7.3.2004 17:14

Vaikka Survon VAR-operaatiolla voi tehdä "mitä muuttujamuunnoksia
tahansa", on erikoistilanteita, joissa hyötyy suoremmista
muunnosmahdollisuuksista (kts. esim. VARR?).
Olen nyt rakentanut uuden POWERS-ohjelman, joka muodostaa halutuista
Survo-aineiston muuttujista kaikki mahdolliset potenssit ja sekatulot
annettuun astelukuun asti.
Esim. yhden muuttujan (sanotaan X) tapauksessa komento
POWERS data / POW_VARS=X DEGREE=10
laskee X:stä muuttujat X^2,X^3,...,X^10 eli kaikki potenssit kertalukuun
10. Näin pääsee mukavimmin tekemään mm. polynomiregressiota.
POW_VARS-listassa voi olla useampia muuttujia tyyliin
POWERS data / POW_VARS=X,Y,Z DEGREE=2
jolloin syntyvät lisämuuttujat X^2, X*Y, X*Z, Y^2, Y*Z ja Z^2 eli
selittäjät "kvadraattiseen" malliin.
Jos POW-muuttujat ovat dikotomisia, syntyy ehkä aineksia interaktioiden
tutkintaan erilaisissa tilanteissa.

POWERS tulee olemaan mukana SURVO MM:n versiosta 2.09 lähtien.

Seuraava esimerkki kertoo omalla tavallaan POWERSin käytöstä (ja vähän
muustakin):

Eräässä kombinatoorisessa ongelmassa frekvenssimuuttujan F tiedetään
riippuvan kokonaislukuparametreista N ja K kolmannen asteen polynomin
P(N,K) mukaisesti.

Tämän polynomin tarkka esitys yritetään nyt löytää estimoimalla se
lineaarisen regressioanalyysin avulla seuraavasta aineistosta:

DATA NKF:(N,K,F) 4,1,48 4,2,68 4,3,64 5,1,80 5,2,124 5,3,136 5,4,120
6,1,120 6,2,196 6,3,232 6,4,232 6,5,200 7,1,168 7,2,284 7,3,352 7,4,376
7,5,360 7,6,308 8,1,224 8,2,388 8,3,496 8,4,552 8,5,560 8,6,524 8,7,448
9,1,288 9,2,508 9,3,664 9,4,760 9,5,800 9,6,788 9,7,728 9,8,624 END

Jotta analyysi saadaan tehdyksi LINREG:illä, tulee ensin muodostaa
johdetut muuttujat N^2,N^3,K^2,K^3,N*K,N^2*K,N*K^2.
Ne voidaan tietenkin laskea tavallisella VAR-operaatiolla, mutta
POWERS tekee asian sukkelammin.

Ensin tulee listan muodossa oleva aineisto NKF tallettaa uuteen
tiedostoon:
FILE COPY NKF TO NEW NKF2
Huom. tässä uusi apusana NEW (mukana versiosta 2.08) tarkoittaa, että
mahdollinen aikaisempi kopioinnin kohde (NKF2) tuhotaan ennen
suoritusta (eikä tarvita edeltävää FILE DEL:iä).
Uusille muuttujille (7 kpl tyyppiä 2) tarvitaan lisätilaa ja se saadaan
mukavimmin aikaan komennolla (sekin mukana versiosta 2.08 lähtien)
FILE EXPAND NKF2,14,7
joka lisää tilaa 14 tavulle/havainto ja 7 muuttujalle (itse asiassa
vähempikin riittäisi, koska FILE COPY tekee jo valmiiksi varatilaa).
.............................
Nyt päästään laskemaan nuo potenssitermit yksinkertaisesti komennolla
POWERS NKF2 / POW_VARS=N,K DEGREE=3 TYPE=2
missä
   POW_VARS luettelee muuttujat, joista uusia termejä tehdään,
   DEGREE   ilmaisee (korkeimman) asteluvun/termi ja
   TYPE     antaa johdettujen muuttujien tyypin (oletus on 8).
.............................
FILE STATUS näyttää, mitä POWERS on tehnyt:

FILE STATUS NKF2
 Copy of sample NKF
FIELDS: (active)
   1 NX-   4 N
   2 NX-   4 K
   3 NY-   4 F
   4 NX-   2 N2       ~N^2
   5 NX-   2 N1K1     ~N*K
   6 NX-   2 K2       ~K^2
   7 NX-   2 N3       ~N^3
   8 NX-   2 N2K1     ~N^2*K
   9 NX-   2 N1K2     ~N*K^2
  10 NX-   2 K3       ~K^3
END
Survo data file NKF2: record=42 bytes, M1=21 L=64  M=10 N=33

Tässä tapauksessa POWERS:in on luonnollista käyttää muuttujien nimiä
sellaisinaan, koska ne (N,K) olivat lyhyitä.
Pitempien nimien (esim. Paino, Pituus) kohdalla POW_WARS-lista
kannattaa antaa esim. muodossa
POW_VARS=Paino(P),Pituus(L)
jolloin johdetuissa muuttujissa käytetään noita suluissa olevia
lyhenteitä (P,L).
.............................
Nyt päästään tekemään regressioanalyysi:

MASK=XXYXXXXXXX / Muuttujien valinta
LINREG NKF2,CUR+1 / RESULTS=0
Linear regression analysis: Data NKF2, Regressand F         N=33
Variable Regr.coeff.    Std.dev.    t     beta
N        -0.000000       0.000000
K        -0.666667       0.000000
N2        0.000000       0.000000
N1K1     -0.000000       0.000000
K2        0.000000       0.000000
N3       -0.000000       0.000000
N2K1      4.000000       0.000000
N1K2     -4.000000       0.000000
K3        0.666667       0.000000
constant  0.000000       0.000000
Variance of regressand F=53475.09091 df=32
Residual variance=0.000000000 df=23
R=1.0000 R^2=1.0000

Odotuksien mukaisesti syntyy "täydellinen" selitys ja regressio-
kertoimista on heti luettavissa, että
F=P(N,K)=4*(N^2*K-N*K^2)+2/3(K^3-K)=4*[N*K*(N-K)+C(K+1,3)].

Eipä tuo tietenkään ole matemaatikoille kelpaava todistus,
vaikka varsinkin, jos todella teoreettisin perusteluin tiedetään,
että haettu lauseke on kolmatta astetta ao. muuttujissa ja
annettu data NKF pitää kutinsa, tämän laskelman perusteella saatu
P(N,K) on todella se ainoa ratkaisu.

Joka tapauksessa tämänlaatuiset numeeriset kokeilut usein tukevat
mainiosti eksaktia, matemaattista tarkastelua. Siinä näet voi helposti
vaikkapa pienen huolimattomuuden tai puutteellisen päättelyn
seurauksena ajautua virheellisiin tuloksiin.
Joskus näin kokeellisesti saatu ratkaisu saattaa myös johdattaa
tarkemman päättelyn jäljille.

-Seppo

Vastaukset:
[ei vastauksia]

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.