Aproksimacija z linearnim modelom
Linearni model
V znanosti pogosto želimo opisati odvisnost dveh količin npr. kako se spreminja koncentracija $\mathrm{CO}_2$ v odvisnosti od časa. Matematičnemu opisu povezave med dvema ali več količinami pravimo matematični model. Primer modela je Hookov zakon za vzmet, ki pravi, da je sila vzmeti $F$ sorazmerna z raztezkom $x$: $F=k x$ Model povezuje dve količini silo $F$ in raztezek $x$. Poleg tega Hookov zakon vpelje še koeficient vzmeti $k$. Koeficientu $k$ pravimo parameter modela in ga lahko določimo za vsako vzmet posebej z meritvami sile in raztezka.
Najpreporstejši je linearni model, pri katerem odvisno količino $y$ zapišemo kot linearno kombinacijo baznih funkcij $\phi_j(x)$ neodvisne spremenljivke $x$:
Koeficientom $p_j$ pravimo parametri modela in jih določimo na podlagi meritev. Znanstveniki hočejo model, pri katerem imajo parametri $p_i$ preprosto interpretacijo in pomagajo pri razumevanju pojava, ki ga opisujejo. Zato so bazne funkcije pogosto elementarne funkcije, pri katerih je jasno razvidna narava odvisnosti.
Metoda najmanjših kvadratov
Koeficiente modela, ki najbolje opisujejo izmerjene podatke lahko poiščemo z metodo najmanjših kvadratov. Napišemo najprej pogoje, ki bi jim zadoščali parametri, če bi izmerjeni podatki povsem sledili modelu. Za vsako meritev $y_i=y(x_i)$ bi bila vrednost odvisne količine $y_i$ natanko enaka vrednosti, ki jo predvidi model $M(p,x_i)$. To predpostavko lahko zapišemo s sistemom enačb
Neznanke v zgornjem sistemu so parametri $p_j$ in za linearni model so enačbe linearne. To je tudi ena glavnih prednosti linearnega modela. Meritve redko povsem sledijo modelu, zato sistem \eqref{eq:sistem} v splošnem ni rešljiv, saj je meritev običajno več kot je parametrov sistema. Sistem \eqref{eq:sistem} je predoločen. Lahko pa poiščemo vrednosti parametrov $p_j$ pri katerih bo razlika med meritvami in modelom kar se da majhna. Izkaže se, da je najboljša mera za odstopanje modela od podatkov kar vsota kvadratov razlik med meritvami in napovedjo modela:
Sistem (\ref{eq:sistem}) lahko zapišemo v matrični obliki $A\mathbf{p} = \mathbf{y},$ kjer so stolpci matrike sistema enaki vrednostim baznih funkcij
in stolpec desnih strani je enak meritvam
Pogoj najmanjših kvadratov razlik (\ref{eq:minkvad}) za optimalne vrednosti parametrov $\mathbf{p}_{opt}$ lahko sedaj zapišemo s kvadratno vektorsko normo
Opis sprememb koncentracije CO2
Na observatoriju Mauna Loa na Hawaiih že leta spremljajo koncentracijo $\mathrm{CO}_2$ v ozračju. Podatke lahko dobimo na njihovi spletni strani v različnih oblikah. Oglejmo si tedenska povprečja od začetka maritev leta 1974
using FTPClient
url = "ftp://aftp.cmdl.noaa.gov/products/trends/co2/co2_weekly_mlo.txt"
io = download(url)
data = readlines(io)
2451-element Array{String,1}:
"# --------------------------------------------------------------------"
"# USE OF NOAA ESRL DATA"
"# "
"# These data are made freely available to the public and the"
"# scientific community in the belief that their wide dissemination"
"# will lead to greater understanding and new scientific insights."
"# The availability of these data does not constitute publication"
"# of the data. NOAA relies on the ethics and integrity of the user to"
"# ensure that ESRL receives fair credit for their work. If the data "
"# are obtained for potential use in a publication or presentation, "
⋮
" 2020 3 29 2020.2418 415.75 6 412.37 391.47 133.61"
" 2020 4 5 2020.2609 416.45 7 412.67 391.12 133.96"
" 2020 4 12 2020.2801 416.27 7 413.63 392.85 133.45"
" 2020 4 19 2020.2992 415.88 6 413.71 393.25 132.75"
" 2020 4 26 2020.3183 416.82 7 414.45 393.18 133.44"
" 2020 5 3 2020.3374 416.83 6 414.11 392.98 133.29"
" 2020 5 10 2020.3566 416.79 6 415.31 392.68 133.21"
" 2020 5 17 2020.3757 416.97 5 414.72 393.46 133.45"
" 2020 5 24 2020.3948 417.43 7 414.40 392.63 134.09"
Nato odstranimo komentarje in izluščimo podatke
using Plots
filter!(l->l[1]!='#', data)
data = strip.(data)
data = [split(line, r"\s+") for line in data]
data = [[parse(Float64, x) for x in line] for line in data]
filter!(l->l[5]>0, data)
t = [l[4] for l in data]
co2 = [l[5] for l in data]
scatter(t, co2, title="Atmosferski CO2 na Mauna Loa",
xlabel="leto", ylabel="parts per milion (ppm)", label="co2",
markersize=1)
Časovni potek koncentracije $\mathrm{CO}_2$ matematično opišemo kot funkcijo koncentracije v odvisnosti od časa
Model, ki dobro opisuje spremembe $\mathrm{CO}_2$ lahko sestavimo iz kvadratne funcije, ki opisuje naraščanje letnih povprečij in periodičnega dela, ki opiše nihanja med letom:
Čas $t$ naj bo podan v letih. Predoločeni sistem (\ref{eq:sistem}), ki ga dobimo za naš model ima $n\times 5$ matriko sistema
desne strani pa so vrednosti koncentracij.
Normalni sistem
Po metodi najmanjših kvadratov iščemo vrednosti parametrov $p$ modela, pri katerih bo vsota kvadratov razlik med napovedjo modela in izmerjenimi vrednostmi najmanjša. Zapišimo vsoto kvadratov kot evklidsko normo razlike med vektorjem napovedi modela $Ap$ in vektorjem izmerjenih vrednosti $y$. Iščemo torej vektor parametrov $p$, pri katerem bo
najmanjša. Iščemo torej pravokotno projekcijo vektorja $y$ na stolpčni prostor matrike $A$, katere stolpci so podani kot vrednosti baznih funkcij, ki nastopajo v modelu.
Tako dobimo normalni sistem $A^TAp=A^Ty$, ki je kvadraten in je vedno rešljiv, če so le bazne funkcije modela linearno neodvisne (izračunane v izmerjenih vrednostih neodvisne spremenljivke).
using LinearAlgebra
A = hcat(ones(size(t)), t, t.^2, cos.(2pi*t), sin.(2pi*t))
norm(A*p-co2)
51.293225199649285
Problem normalnega sistema je, da je zelo občutljiv
cond(N), cond(A)
(6.578904129212747e22, 1.0081969493906807e11)
Pravzaprav je že sama matrika $A$ zelo občutljiva. Razlog je v izbiri baznih funkcij. Če narišemo normirane stolpce $A$ kot funkcije, vidimo, da so zelo podobni.
plot([A[:,1]/norm(A[:,1]), A[:,2]/norm(A[:,2]), A[:,3]/norm(A[:,3])], ylims=[0,0.025], title="Normirani stolpci matrike A")
Težavo lahko omilimo tako, da časa ne štejemo od začetka našega štetja, pač pa od sredine podatkov.
cond(A)
353.8410635177918
Matrika $A$ je sedaj precej dlje od singularne matrike in posledično je tudi normalni sistem manj občutljiv.
QR razcep
Normalni sistem se redko uporablja v praksi. Standarden postopek za iskanje rešitve predoločenega sistema z metodo najmanjših kvadratov je s QR razcepom. Če je $QR=A$ QR razcep matrike $A$, so stolpci matrike $Q$ ortonormirana baza stolpčnega prostora matrike $A$, matrika $R$ vsebuje koeficiente v razvoju stolpcev matrike $A$ po ortonormirani bazi določeni s $Q$. Projekcija na stolpčni prostor ortogonalne matrike še lažje izračunamo, saj lahko koeficiente izračunamo s skalarnim produktom s stolpci $Q$. Matrično skalarni produkt s stolpci matrike pomeni množenje z transponirano matriko.
norm(A*p-co2)
51.2932251996436
Na isti način deluje tudi vgrajen operator \
, če je matrika dimenzij $n\times k$ in $k < n$.
p = A\co2
norm(A*p-co2)
51.293225199643594
Kaj pa CO2?
Koncentracije CO2 se vztrajno povečuje. Kot kaže naš model, je naraščanje kvadratično in ne le linearno. To pomeni, da ne le, da se vsako leto poveča koncentracija, pač pa se vsako leto poveča za večjo vrednost.
p
5-element Array{Float64,1}:
364.7620102019955
1.7791962796707133
0.013477871899289553
-0.8004155393047849
2.8585180169042697
Koeficient $p_1$ pove povprečno koncentracijo na sredini merilnega obdobja. Medtem ko odvod $p_2+2p_3(t-\tau)$ pove za koliko se v povprečju spremeni koncentracija v enem letu.
plot(t, p[2].+2*p[3]*(t.-τ), title="Letne spremembe CO2")
Lahko poskusimo tudi napovedati prihodnost:
model(t) = p[1]+ p[2]*(t-τ) + p[3]*(t-τ)^2 + p[4]*cos(2*pi*t) + p[5]*sin(2*pi*t)
model.([2020, 2030, 2050])
3-element Array{Float64,1}:
410.85719512226353
436.06656437234386
494.57202601206774
- Linearni model je opis, pri katerem parametri nastopajo linearno
- Parametre modela poiščemo z metodo najmanjših kvadratov
- Za iskanje parametrov po metodi najmanjših kvadratov je numerično najbolj primeren QR-razcep.
- koncentracija CO2 prav zares narašča