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$:

\[\begin{equation} y(x) = M(p,x) = p_1\phi_1(x) + p_2\phi_2(x) + \ldots + p_k \phi_k(x). \end{equation}\]

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

\[\begin{equation}\label{eq:sistem} y_i = M(p, x_i) = p_1\phi_1(x_i)+\ldots p_k\phi_k(x_i) \end{equation}\]

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:

\[\begin{equation} \label{eq:minkvad} (y_1-M(p,x_1))^2+\ldots + (y_n-M(p,x_n))^2 = \sum_{i=1}^n (y_i + M(p,x_i))^2 \end{equation}\]

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

\[A = \begin{bmatrix} \phi_1(x_1) & \phi_2(x_1) & \ldots &\phi_k(x_1)\\ \phi_1(x_2) & \phi_2(x_2) & \ldots &\phi_k(x_2)\\ \vdots & \vdots & \ddots &\vdots \\ \phi_1(x_n) & \phi_2(x_n) & \ldots &\phi_k(x_n)\\ \end{bmatrix}\]

in stolpec desnih strani je enak meritvam

\[\mathbf{y} = [y_1,y_2,\ldots, y_n]^\mathsf{T}.\]

Pogoj najmanjših kvadratov razlik (\ref{eq:minkvad}) za optimalne vrednosti parametrov $\mathbf{p}_{opt}$ lahko sedaj zapišemo s kvadratno vektorsko normo

\[\begin{equation} \mathbf{p}_{opt} = \mathrm{argmin}_{\mathbf{p}} \left\|A\mathbf{p}-\mathbf{y}\right\|_2^2. \end{equation}\]

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)
2643-element Vector{String}:
 "# --------------------------------------------------------------------"
 "# USE OF NOAA GML 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. To ensure that GML"
 "# receives fair credit for their work please include relevant citation"
 "# text in publications. We encourage users to contact the data providers,"
 "# who can provide detailed information about the measurements and"
 "# scientific insight.  In cases where the data are central to a"
 ⋮
 "  2024   2  25  2024.1544    425.13  7           421.24    398.32    143.94"
 "  2024   3   3  2024.1708    425.45  4           421.44    398.78    144.18"
 "  2024   3  10  2024.1899    425.74  6           420.08    400.31    144.34"
 "  2024   3  17  2024.2090    425.37  6           420.75    400.87    143.81"
 "  2024   3  24  2024.2281    425.04  4           421.50    400.49    143.27"
 "  2024   3  31  2024.2473    426.35  2           422.64    400.97    144.33"
 "  2024   4   7  2024.2664    425.86  6           422.68    401.36    143.55"
 "  2024   4  14  2024.2855    426.34  6           423.82    401.84    143.72"
 "  2024   4  21  2024.3046    427.94  5           423.96    401.62    145.03"

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

\[\begin{equation} y=\mathrm{CO}_2(t). \end{equation}\]

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:

\[\begin{equation} \label{eq:model} \mathrm{CO}_2(t)= p_1 + p_2 t +p_3t^2+p_4\sin(2\pi t)+p_5\cos(2\pi t). \end{equation}\]

Č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

\[A = \begin{bmatrix} 1 & t_1 & t_1^2 & \sin(2\pi t_1) & \cos(2\pi t_1)\\ 1 & t_2 & t_2^2 & \sin(2\pi t_2) & \cos(2\pi t_2)\\ \vdots & \vdots & \vdots &\vdots &\vdots\\ 1 & t_n & t_n^2 & \sin(2\pi t_n) & \cos(2\pi t_n)\\ \end{bmatrix}\]

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

\[\|Ap-y\|^2\]

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.

\[\begin{eqnarray} Ap-y \perp C(A)\cr A^T(Ap-y) = 0\cr A^TAp=A^Ty \end{eqnarray}\]

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)
53.89977550607687

Problem normalnega sistema je, da je zelo občutljiv

cond(N), cond(A)
(4.491317669662354e21, 8.60463112404154e10)

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)
416.76881205476707

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.

\[\begin{eqnarray*} A = QR Rp = Q^Ty \end{eqnarray*}\]

norm(A*p-co2)
53.89977550602497

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)
53.89977550602497

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 Vector{Float64}:
 368.384043953225
   1.8434191891151068
   0.01398631034813944
  -0.7929082150073851
   2.8511566909225925

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 Vector{Float64}:
 411.42303311473785
 437.0092237334014
 496.5733911796018
Kaj smo se naučili
  • 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