Pienimmän Neliösumman Sovitus (PNS) n = Havaintojen määrä (Kuvan n = 4 punaista palloa) x i = Havaintojen ajat/paikat/... (i = 1,..., n) y i = y(x i) = Havaintojen arvot (i = 1,..., n) σ i = Havaintojen tarkkuus (i = 1,..., n) w i = σ 2 i = Havaintojen painot (i = 1,..., n) Malli havainnoille ȳ ± σ on g( β) = g(x, β), missä β = [β 1, β 2,..., β Q] = Mallin vapaat parametrit, joita on Q kappaletta Kuvan malli on suora g(x, β) = A + Bx eli vapaat parametrit ovat β = [A, B] Residuaalit ovat ɛ i = y i g(x i, β) = Havainnot miinus malli = Kuvan vihreät pystyviivat PNS etsii parhaat β arvot β 1,...β Q, jotka minimoivat χ 2 ( β) = n i=1 w iɛ 2 i = n i=1 [ ɛi σ i ] 2 = n i=1 [ yi g(t i, β) σ i ] 2. Summattu residuaalit jaettuina virheillään korotettuna toiseen potenssiin. Siitä nimi PNS. Hyvässä mallissa χ 2 n.miksi? Hyvässä mallissa n > Q.Miksi?
Malleista kuva: @memegenerator.net Malli ḡ on lineaarinen, jos sen kaikki osoittaisderivaatat g/ β i ovat riippumattomia kaikista vapaista parametreista β j. Jos näin ei ole, malli on epälineaarinen. Esimerkki: lineaarinen malli g( β, x) = M + A sin x + B cos x, β = [M, A, B] eli Q = 3 g/ M = 1, g/ A = sin x, g/ B = cos x Esimerkki: epälineearinen malli g = Ae Bx, β = [A, B] eli Q = 2 g/ A = e Bx, g/ B = ABe Bx Lineaarisilla malleilla PNS antaa β:lle yksikäsitteisen ratkaisun β 1. Epälineaarisilla malleilla β:n ratkaisu β 1 riippuu siitä, mikä annetaan (etsitään tavalla tai toisella) ratkaisun alkuarvoksi β 0.
python: Pienimmän neliösumman sovitus Data: PNSdata1.dat (n = 3) 1 2.42 2 5.47 3 7.24 # # Tama on ohjelmani PNSmalli1. py # Pienimman neliosumman s o v i t u s # import os ; os. system ( clear ) # Tyhjennetaan import numpy as np ; import pylab as p l # Importoidaan import scipy ; from scipy import optimize # Miksi outoa? # def r e s i d u a l s ( beta, y, x ) : epsilon = y (beta [ 0 ] + beta [1] x ) return e p s i l o n # f i l e = PNSdata1. dat #Data x=np. l o a d t x t ( f i l e, skiprows =0, usecols = (0, ) ) #Data y=np. l o a d t x t ( f i l e, skiprows =0, usecols = (1, ) ) #Data beta0=np. ones ( 2 ) ; p r i n t ( beta0=, beta0 ) # Alkuarvo tu=optimize. l e a s t s q ( r e s i d u a l s, beta0, args =( y, x ) ) beta1= tu [ 0 ] ; p r i n t ( beta1=, beta1 ) # Loppuarvo p l. xlim ( [ 0, 4 ] ) ; p l. y lim ( [ 0, 9 ] ) # xy r a j a t p l. p l o t ( x, y, or ) # Data p l o t xx=0.5+np. arange (21)/20. 3 # M a l l i n xx g = beta1 [ 0 ] + beta1 [1] xx ; p l. p l o t ( xx, g ) # M a l l i g ( xx ) p l. s a v e f i g ( PNSmalli1. jpg ) ; p l. show ( ) # Kuva&Nayta python3 PNSmalli1.py tulostaa beta0= [ 1. 1.] beta1= [ 0.22333333 2.41 ] Tekee kuvan PNSmalli1.jpg (oikealla) x = [x 1, x 2, x 3 ] = x = Data ȳ = [y 1, y 2, y 3 ] = y = Data ḡ = g(x, β) = a + bx = g = Malli β = [a, b] = Vapaat parametrit ɛ = ȳ ḡ = epsilon = Residuaalit optimize.leastq tarvitsee aliohjelman residuals β 0 = beta0 = sovituksen alkuarvo β 1 = beta1 = sovituksen loppuarvo Lineaarinen malli loppuarvo beta1 ei riipu alkuarvosta beta0
python: Pienimmän neliösumman sovitus # Tama on ohjelmani PNSmalli2. py # Pienimman neliosumman s o v i t u s keinotekoiseen dataan # import os ; os. system ( clear ) # Tyhjennetaan naytto import numpy as np # Importoidaan... import pylab as p l # " import scipy # " from scipy import optimize # Miksi outo j u t t u? def residuals ( beta, y, x ) : # optimize t a r v i t s e e taman a l i o h j e l m a n epsilon = y (beta [0] np. cos ( x )+beta [1] np. sin ( x ) ) return e p s i l o n n = i n p u t ( Anna datan maara = n = ) ; n= i n t (n) s = i n p u t ( Anna datan v i r h e = s = ) ; s= f l o a t ( s ) x=2. np. pi np. arange (1. n ) / ( n 1) # Keinotekoisen datan x beta0 =1.0+np. zeros ( 2 ) # Alkuperainen beta0 g0=beta0 [0] np. cos ( x )+beta0 [1] np. sin ( x ) # Alkuperainen m a l l i e=s scipy. randn (n ) # Gaussien s a t u n n a i s v i r h e y=g0+e # Keinotekoisen datan y tu = optimize. leastsq ( residuals, beta0, args=(y, x ) ) # PNS d a t a l l e beta1=tu [ 0 ] # Sovituksen beta1 xx=2. np. pi (np. arange (101.)/100) # Sovituksen xx gg=beta0 [0] np. cos ( xx )+ beta0 [1] np. sin ( xx ) # Alkuperainen m a l l i yy=beta1 [0] np. cos ( xx )+ beta1 [1] np. sin ( xx ) # Sovituksen m a l l i p l. p l o t ( x, g0, ob ) ; p l. p l o t ( xx, gg, b ) # Alkuperainen m a l l i p l. p l o t ( x, y, or ) ; p l. p l o t ( xx, yy, r ) # Data & S o v i t e t t u m a l l i p r i n t ( beta0 =, beta0 ) ; p r i n t ( beta1 =, beta1 ) p l. s a v e f i g ( PNSmalli2. jpg ) # Kuva t i e d o s t o p l. ion ( ) ; p l. show ( ) ; p l. w a i t f o r b u t t o n p r e s s ( timeout= 1) python3 PNSmalli2.py tulostaa Anna datan maara = n = 10 Anna datan virhe = s = 0.5 beta0 = [ 1. 1.] beta1 = [ 0.97844502 1.23098811] sekä tekee alla näkyvän kuvan PNSmalli2.jpg Malli g(x, β) = a cos x + b sin x Vapaat parametrit β = [a, b] Kokeillaan eri n ja s yhdistelmiä Tulos on aina erilainen Mitä tästä opitaan?
python: Pienimmän neliösumman sovitus Toinen näyttö: kotisivun PNSmalli3.py Loopin for i in range(4): sisällä Plotattavat käyrät yy ja gg xx = 0 xx 1,..., xx 101 2π = tiheä tasavälinen plottien argumentti yy = g(xx, β 1 ) sovitetty käyrä Kuvat: yy = punainen viiva gg = g(xx, β SIM ) simulointimallin käyrä Kuvat: gg = sininen viiva Varsinaiset plotit pl.axes([z1[i],z2[i],lev,kor]) = plottien paikat pl.xlim([x1,x2]) = x rajat pl.ylim([y1,y2])= y rajat Loopin for i in range(4): sisällä pl.plot(x0,g0, ob ) = siniset ympyrät pl.plot(xx,gg, b ) = sin... jatkuva viiva pl.plot(x0,y0, or ) = punaiset ympyrät pl.plot(xx,yy, r ) = pun... jatkuva viiva txt1=... = formatoitu stringi pl.text(x1... = stringin tulostus kuvaan Loopin for i in range(4):jälkeen pl.savefig( Ppns2.jpg ) = kuvan tallennus jpg muodossa Vain n0=n[i], s0=s[i] ja plotin paikka pl.axes([z1[i],z2[i]... muuttuvat loopin sisällä Kuva PNSmalli3.jpg seuraavalla sivulla
python: Pienimmän neliösumman sovitus PNSmalli3.jpg n = 10, σ = 0.1 Vähän tarkkaa dataa PNS tulos OK n = 10, σ = 1.0 Vähän epätarkkaa dataa PNS tulos sinne päin n = 50, σ = 1.0 Paljon epätarkkaa dataa PNS tulos OK n = 50, σ = 5.0 Paljon huonoa dataa PNS tulos sinne päin Sovita väärä malli tähän dataan (esim. suora) Musta laatikko
Epälineaarisista malleista PNS Epälineaariset mallit Jetsu & Pelt (1999) A&AS 139, 629 TSPA = Three Stage Period Analysis Samalle datalle monta sopivaa mallia Mikä niistä on oikea?
Sinikäyrän sovitus Sinikäyrän sovitus Harjoitustyö: Vaiheet frekvenssillä f best φ i = FRAC[(t i t 0 )f best ], missä t 0 = 0 ja FRAC[x] poistaa argumentin x kokonaislukuosan Esim: FRAC[98.76] = 0.76 Poistaa kokonaiset kierrokset Kaikki kierrokset päällekkäin Havainnot vaiheen funktiona oikealla Sovitetaan malli g(t, β) = M + A cos(2πφ i ) + B sin(2πφ i ), missä vapaat parametrit ovat β = [M, A, B]. Parhaan pienimmän neliösumman mallin M, A ja B arvot annetaan oikealla t = aika = vektori p = periodi = skalaari phi=(t-t0)/p = vektori phi=phi-numpy.floor(i) = vektori x=2*numpy.pi*phi = mallin argumentti 7.76 M = 7.70, A= 0.04, B= -0.03 7.74 7.72 7.70 7.68 7.66 7.64 0.0 0.2 0.4 0.6 0.8 1.0
Malleista Malleista (Kuva: @tamino.wordpress.com) Epälineaarinen malli g(t, β) = M + A cos(2πft) + B sin(2πft), Malleista Mallien tulkinta on taidelaji missä β =[M, A, B, f ], koska esimerkiksi g/ A=cos(2πft) Sovituksen lopputulos β 1 riippuu vahvasti alkuoletuksesta β 0 Ratkaistaan paras f best tehospektrillä 2πf best = vakio Lineaarinen malli g(t, β) = M + A cos(2πf best t) + B sin(2πf best t), missä β =[M, A, B] β 0 ei vaikuta lopputulokseen β 1 = [M 1, A 1, B 1 ] Jetsu & Pelt (1999, A&AS 139, 629): Käytetään lopuksi epälineaarisen mallin alkuarvona β 0 = [M 1, A 1, B 1, f best ]
Malleista Malleista Yleisesti: g(t, β) = K k=0 B k cos(2πkft) + C k sin(2πkft), missä β = [B 0,.., B K, C 1,..., C K, f ] (Huom: C 0 tarpeeton) Tehospektri olettaa sinikäyrän oikeaksi malliksi (K = 1) Todellisuus K on tuntematon Samassa datassa saattaa vaihdella K = 0, 1, 2, 3,...? K = 0 Ei periodisuutta K = 1 1 huippu K = 2 1 tai 2 huippua K = 3 1, 2 tai 3 huippua Paras K arvo mallille voidaan myös ratkaista Esim: Lehtinen et al. (2011: A&A, 527, A136) 7.8 7.6 7.4 7.2 K = 0 0.0 0.2 0.4 0.6 0.8 1.0 14 K = 2 12 10 8 6 4 2 0.0 0.2 0.4 0.6 0.8 1.0 11 10 9 8 7 6 5 K = 1 4 0.0 0.2 0.4 0.6 0.8 1.0 14 12 10 8 6 4 2 K = 3 0 0.0 0.2 0.4 0.6 0.8 1.0
Malleista Signaali kohinan seasta (Kajatkari et al. 2015, A&A) Välillä periodisuutta, välillä ei