A review of spline function procedures in R

De term “spline” verwijst naar een ambachtswerktuig, een flexibele dunne strook hout of metaal, gebruikt om vloeiende krommen te tekenen. Verschillende gewichten zouden op verschillende posities worden aangebracht zodat de strook zou buigen volgens hun aantal en positie. Deze werd dan gedwongen om door een reeks vaste punten te gaan: metalen pennen, de ribben van een boot, enz. Op een vlak oppervlak waren dit vaak gewichten met een haak eraan en dus gemakkelijk te manipuleren. De vorm van het gebogen materiaal zou op natuurlijke wijze de vorm van een spline curve aannemen. Op dezelfde manier worden splines in de statistiek gebruikt om flexibele vormen mathematisch weer te geven. Op verschillende plaatsen in het gegevensbereik worden knopen aangebracht om de punten aan te geven waar aangrenzende functionele stukken met elkaar versmelten. In plaats van metalen of houten strepen worden gladde functionele stukken (gewoonlijk polynomen van lage orde) gekozen om de gegevens tussen twee opeenvolgende knopen te passen. Het type polynoom en het aantal en de plaats van de knopen bepalen vervolgens het type spline.

Motiverend voorbeeld

Met de invoering van gegeneraliseerde additieve modellen (GAM’s) in 1986 is het gebruik van spline-modellering een vast hulpmiddel geworden bij statistische regressieanalyse. Om dit te illustreren, beschouwen we gegevens over een set van 892 vrouwen jonger dan 50 jaar, verzameld in drie dorpen in West-Afrika (gegevens beschikbaar in Additional file 1: Appendix). Wij willen de relatie onderzoeken tussen leeftijd (in jaren) en een ruwe maat voor lichaamsvet, namelijk de triceps huidplooidikte. Figuur 1 toont de relatie tussen leeftijd en triceps huidplooidikte gemeten in logaritmische schaal. Zie voor meer informatie over de gegevens .

Fig. 1

Een uitzetting van de leeftijd in jaren tegen de triceps-huidplooidikte voor 892 vrouwen in West-Afrika . De stippellijn geeft een eenvoudige lineaire fit weer, de ononderbroken lijn een fit met behulp van flexibele derdegraads polynomen

Een eenvoudig regressiemodel van de vorm yi=β0+β1xi+ε,i=1,…,n, zou nauwelijks een benadering geven van het waargenomen patroon, aangezien het duidelijk is dat de relatie niet lineair is. Het model kan worden uitgebreid voor niet-lineaire effecten met behulp van een aantal polynomialen. Zo kunnen niet-lineaire effecten worden gemodelleerd met een polynoom van graad 3, gegeven door:

$$ y_{i}==\alpha_{0}+\alpha_{1} u_{i}+\alpha_{2} u_{i}^{2}+\alpha_{3} u_{i}^{3}+\epsilon $$
(1)

waarbij u een functie van x is, basisfunctie genaamd, hier gedefinieerd door:

$$U=left $$

Het in Eq. 1 beschreven regressiemodel is nog steeds een lineair model, ondanks het feit dat het een niet-lineaire functie van de voorspellende variabele geeft. Het model is nog steeds lineair in de coëfficiënten en kan worden ingepast met gewone kleinste kwadratenmethoden. De basis kan in R worden gecreëerd met de functie poly(x,3) met de ingangen x (de variabele) en p (de graad van de polynoom). Dit leidt tot een eenvoudig univariaat glad model van de vorm: yi=f(xi)+ε waarbij f() een functie/transformatie van de voorspeller is. Een dergelijk model kan gemakkelijk in R worden ingepast met behulp van: lm(y ∼poly(x,3)). Ondanks de eenvoud heeft polynomiale regressie een aantal nadelen, waarvan de belangrijkste de niet-lokaliteit is. Dat betekent dat de functie op een gegeven waarde x0 afhangt van gegevenswaarden ver van dat punt. Het is gemakkelijk om dit in actie te zien door een polynoom aan te passen aan een reeks gegevens en een van de gegevenspunten dichtbij de rechterrand naar boven of beneden te schuiven. Het resultaat is dat de ingepaste functie meestal ver van die x-coördinaat zal veranderen.

Overweeg, in plaats van een globale polynoom in te passen, het bereik van x in kleinere intervallen te verdelen, gebruikmakend van een willekeurig aantal en positie van punten, τ, ook wel de knopen genoemd. Een eenvoudig stukgewijs continu model kan worden ingepast door de functies te definiëren: f1(x)=1,f2(x)=x,f3(x)=(x-τ1)+,f4(x)=(x-τ2)+,…, met “+” een functie gedefinieerd als:

$$u_{+}=$$u_{+}==$$u_{+}===$$u_{+}==$$ u, & \text{if}}, u>0, & \text{if}}, u>0, & \text{if}}, u>0, & \leq 0 \eind{array}}right. $

De verzameling van deze functies leidt tot een samengestelde functie f(x).

Definitie van splines

De metalen spline van de tekenaar kan willekeurige vormen aannemen, bijvoorbeeld de dwarsdoorsnede van een vliegtuigvleugel of de spiraal van een centrifugaalpomp. Voor statistische toepassingen gaan wij uit van krommen van de vorm f(X), d.w.z. een enkele y-waarde voor elke x. De voorspeller x kan een enkele variabele of meerdere variabelen zijn. Onze bespreking zal zich bijna volledig toespitsen op een univariate functie met (X in \mathbb {R}). Definieer een verzameling knopen τ1<…<τK in het bereik van X. Een spline f(X) zal een gladde functie zijn, die voldoet aan bepaalde differentieerbaarheidseigenschappen die hieronder worden genoemd, zodanig dat f(X) een polynoom is van graad d. Hout- of metaalplines hebben continue afgeleiden van alle ordes, aangezien zij een fysisch object zijn. Dit is niet het geval voor statistische splines. In plaats daarvan leggen we een gladheidscriterium op dat alle afgeleiden van een orde kleiner dan d continu zijn. Een fysische splijn is lineair voorbij de laatste knoop en we kunnen een verdere beperking opleggen dat afgeleiden van orde 2 of groter nul zijn bij de meest linkse en meest rechtse knoop; splijnen met deze bijkomende beperking staan bekend als “beperkte” of “natuurlijke” splijnen. Om flexibelere krommen te verkrijgen kan het aantal knopen of de graad van de polynoom worden verhoogd. Er is echter een wisselwerking: een toename van het aantal knopen kan tot een overfitting van de gegevens en een toename van de variantie leiden, terwijl een afname van het aantal knopen kan resulteren in een starre en restrictieve functie met een grotere bias.

Voorstelling door basisfuncties

Aannemelijk is dat de onbekende functie f wordt voorgesteld door een spline-functie met vaste knopenreeks en vaste graad d. Omdat laatstgenoemde functies een vectorruimte V vormen, is het mogelijk f te schrijven als

$$ f(X)= B_{k} (X), $$
(2)

waar de Bk een verzameling basisfuncties zijn die V definiëren en βk de bijbehorende spline coëfficiënten zijn. Met k knopen zijn er k+1 polynomen van graad d samen met d∗k beperkingen, hetgeen leidt tot (d+1)(k+1)-d∗k=d+k+1 vrije parameters ; voor een natuurlijke spline zijn er k vrije parameters. Aangezien βB=(βA)(A-1B)=γB∗ voor elke niet-singuliere matrix A, zijn er een oneindig aantal mogelijke basisreeksen voor de spline fit.

De voorstelling in (2) heeft het voordeel dat de schatting van f reduceert tot de schatting van de coëfficiënten βk. Meer in het bijzonder is de uitdrukking in (2) lineair in de coëfficiëntvector β=(β1,…,βK+d+1). Daarom kan de schatting van f worden beschouwd als een optimaliseringsprobleem dat lineair is in de getransformeerde variabelen B1(X),…,BK+d+1(X), waardoor gebruik kan worden gemaakt van beproefde schattingstechnieken voor het gebruik van splines in een breed scala van (gegeneraliseerde) multivariabele regressiemodellen. Belangrijk is dat spline modellering de schatting van de functies f() reduceert tot de schatting van een kleine reeks reële coëfficiënten.

Zoals door verschillende auteurs wordt opgemerkt (b.v., de grote flexibiliteit van spline modellering gaat gepaard met de prijs van een aantal afstemparameters. Twee daarvan, de keuze van de basisfuncties B en de graad d van de onderliggende polynomialen, blijken weinig invloed te hebben. Kubische polynomen (d=3) zijn de gebruikelijke standaard omdat zij resulteren in krommen die voor het menselijk oog perfect glad lijken. Indien afgeleiden van de curven van belang zijn, is soms een hogere orde geschikt, maar in het algemeen zijn passingen voor d>3 niet van elkaar te onderscheiden. Pasvormen met d=1 of d=2 hebben vrijwel identieke statistische eigenschappen, maar zien er grilliger uit. De keuze tussen twee basissets B en B∗ verandert per definitie niets aan de voorspellingen van een fit en komt dus neer op gemakzucht.

De twee belangrijkste keuzes liggen in het aantal knopen en de afstand tussen de knopen en het gebruik (of niet) van een straffunctie, b.v. de geïntegreerde tweede afgeleide van de spline. Wanneer er geen straf is, kan de creatie van de getransformeerde variabelen afzonderlijk gebeuren en worden de nieuwe variabelen gewoon opgenomen in een standaard model fit; er is geen wijziging van de onderliggende regressieprocedure vereist. Deze aanpak wordt vaak regressiesplines genoemd; de flexibiliteit van de resulterende niet-lineaire functie is volledig een functie van het aantal knopen. De opneming van een afvlakkingscorrectie daarentegen vereist een wijziging van de aanpassingsroutine om daarmee rekening te houden. Dit moet in elke regressiefunctie afzonderlijk worden opgenomen. De resulterende afvlakkende splines hebben een aantal wenselijke eigenschappen, maar de extra complexiteit van de afvlakkende functie kan een reden zijn waarom zij niet vaker in toegepaste omgevingen worden gebruikt.

Hoewel er veel onderzoek is verricht naar de wiskundige eigenschappen van de diverse splinebenaderingen (zie , lijken toegepaste statistici en data-analisten zich nauwelijks bewust van deze resultaten bij het gebruik van spline-modellering in praktische toepassingen. In feite bevatten veel van de door onze websearch geïdentificeerde artikelen geen rechtvaardiging van de beweegredenen voor de keuze van de gebruikte spline methode.

Populaire spline basis

Er zijn talrijke opties voor de definitie van de basisfuncties Bk, waarbij de verschillende spline basis verschillen met betrekking tot hun numerieke eigenschappen . In dit deel zullen we enkele van de meest populaire spline basis introduceren, namelijk de afgeknotte machtreeks basis, de B-spline basis en de kardinale spline basis.

Afgeknotte machtreeks en kubische splines

De afgeknotte machtreeks basis wordt gedefinieerd door de basisfuncties

$$B_{1}(x) = 1, B_{2}(x) = x,…., B_{d+1}(x) = x^{d}, $$
$$B_{d+2}(x) = (x- \tau_{1})_{+}^{d},…, B_{K+d+1} = (x -\tau_{k})_{+}^{d} $

Een voordeel van de bovenstaande basisfuncties is hun gemakkelijke interpretatie: Beginnend met een “basis”-polynoom van graad d gedefinieerd op (eerste regel van de vergelijking), worden afwijkingen van de basispolynoom achtereenvolgens toegevoegd aan de spline-functie rechts van elk van de K knopen (tweede regel). Een afgeknotte machtsbasislijn is d-1 maal differentieerbaar op de knopen en heeft d+K vrijheidsgraden. Het is relatief eenvoudig voor de gebruiker om een afgeknotte machtsreeks in R te maken. Stel x vertegenwoordigt een aantal waarnemingen in , dan kan een afgeknotte machtsbasis van graad d=3 met 5 knopen op gelijke afstand binnen het bereik van x worden gemaakt met behulp van code 1 in het Additional file 1: Appendix (Fig. 2).

Fig. 2

Gekorte polynomialen spline basisfuncties van de derde graad (d=3) met vijf equidistante knopen (K=5). Plot gemaakt met behulp van code #1 in Additional file 1: Appendix

Een kenmerk van de afgeknotte machtsreeksen is dat de steunpunten van de functies niet lokaal zijn, waarbij sommige van de Bk gedefinieerd zijn over het gehele bereik van de gegevens. Dit kan leiden tot hoge correlaties tussen sommige basislines, hetgeen numerieke instabiliteiten bij de schatting van de spline impliceert. Voor de afgeknotte machtreeksbasis wordt een voorbeeld gegeven in , hoofdstuk 5.

Cubische splines worden gecreëerd door een kubische polynoom te gebruiken in een interval tussen twee opeenvolgende knopen. De spline heeft vier parameters op elk van de K+1 gebieden minus drie beperkingen voor elke knoop, wat resulteert in een K+4 vrijheidsgraden.

Een kubische spline functie, met drie knopen (τ1,τ2,τ3) zal 7 vrijheidsgraden hebben. Met behulp van de weergave in Eq. 2 kan de functie worden geschreven als:

$$ f(X)= \beta_{0} + \beta_{1} X + \beta_{2} X^{2} + βbeta_{3} X^{3} + \beta_{4} (X-tau_{1})^{3} + beta_{5} (X-tau_{2})^{3} + \beta_{6} (X-\tau_{3})^{3} $$

B-splines

De B-spline basis is een veelgebruikte spline basis die gebaseerd is op een speciale parametrisering van een kubische spline. De B-spline basis , is gebaseerd op de knopenreeks

$$ \xi_{1} \le \ldots & \le \xi_{d+1} < \xi_{d+2} < \ldots < \xi_{d + K + 1} &< \xi_{d + K + 2} \le \xi_{d + K + 3} \le \ldots \le \xi_{2d + K + 2} \,, \einde{aligned} $$

waarbij de verzamelingen ξd+2 := τ1,…,ξd+K+1:=τK en ξd+1:=a,ξd+K+2:=b respectievelijk “binnenknopen” en “grensknopen” worden genoemd. De keuze van de bijkomende knopen ξ1,…,ξd en ξd+K+3,…,ξ2d+K+2 is in wezen arbitrair. Een gebruikelijke strategie is om ze gelijk te stellen aan de randknopen. Als alternatief, als de binnenste knopen en de randknopen ξd+1<…<ξd+K+2 zo gekozen worden dat ze op gelijke afstand van elkaar liggen, d.w.z, ξk+1-ξk=δ ∀k∈{d+1,…,d+K+1}, kunnen de grensknopen geplaatst worden op ξd+1-δ,…,ξd+1-d-δ en ξd+K+2+δ,…,ξd+K+2+d-δ.

Voor d>0 worden B-spline basisfuncties van graad d (aangeduid met \(B_{k}^{d}(x)\)) gedefinieerd door de recursieve formuleVootnoot 1

$$ $ begin{aligned} B_{k}^{d}(x)&=\frac{x-\xi_{k}}{\xi_{k+d}-\xi_{k}}B_{k}^{d-1}(x)-\frac{\xi_{k+d+1}-x}{\xi_{k+d+1}-\xi_{k+1}}B_{k+1}^{d-1}(x),\\k &= 1,….,K+d+1, einde{aligned} $$

waar

$$B_{k}^{0}(x)= begin{array}{cc} 1, & \xi_{k} \leq x < \xi_{k+1} 0, & \text{else} \end{array} \Goed. $$

en (B_{k}^{0}(x) \equiv 0) als ξk=ξk+1. B-splines hebben het voordeel dat de basisfuncties een lokale ondersteuning hebben. Meer in het bijzonder zijn zij groter dan nul in intervallen die door d+2 knopen worden omspannen en elders nul. Deze eigenschap resulteert in een hoge numerieke stabiliteit, en ook in een efficiënt algoritme voor de constructie van de basisfuncties, zie voor details.

Natuurlijke kubische en kardinale splines

Een polynomiale spline, zoals een kubische of een B-spline, kan onregelmatig zijn aan de grenzen van de gegevens. Om dit probleem op te lossen zijn natuurlijke splines kubische splines die als extra beperking hebben dat zij lineair zijn in de staarten van de grensknopen (-∞,a], Hoofdstuk 4.

Naast de afgeknotte machtreeks natuurlijke splines, B-spline en kardinale spline basis, bestaan er nog diverse andere – minder populaire – basis. Voor een overzicht verwijzen wij naar de boeken van .

Penalized splines

De tot nu toe gepresenteerde splines worden vaak aangeduid als regressie splines. Naast de keuze van de basis van de spline (B-spline, afgeknotte machtreeks, enz.) moet ook het aantal knopen en de knoopposities worden gekozen. Het is duidelijk dat deze afstemmingsparameters een belangrijke invloed kunnen hebben op de geschatte vorm van een spline functie: Een groot aantal knopen impliceert een grote flexibiliteit, maar kan ook resulteren in een overfitting van de gegevens in kwestie. Omgekeerd kan een klein aantal knopen resulteren in een “oversoepele” schatting die vatbaar is voor vertekening door een te lage fit (zie ).

Een populaire aanpak om de keuze van de knoopposities in spline-modellering te vergemakkelijken is het gebruik van bestrafte splines. Gegeven een i.i.d. steekproef van gegevens (x1,y1),…(xn,yn), is een bestrafte spline de oplossing van het probleem

$$\hat{beta} = \text{argmax}_{beta} \left \,, $$

waarbij lβ de log-likelihood (of, in het geval van Cox-regressie, de partiële log-likelihood) en Jr een ruwheidscorrectie is die klein wordt als de spline-functie “glad” is. In het algemeen zijn bestrafte splines gebaseerd op het idee dat de onbekende functie f wordt gemodelleerd door een spline met een groot aantal knopen, waardoor een grote mate van flexibiliteit mogelijk is. Anderzijds leidt een ruwe spline-schatting die een hoge waarde van lβ heeft en dicht bij de gegevenswaarden ligt, tot een grote waarde van Jβ. De maximalisatie van deze functie impliceert derhalve een afruil tussen gladheid en modelgeschiktheid die door de afstemparameter λ≥0 wordt beheerst.

Een speciaal geval is het bestrafte kleinste kwadratenprobleem

$$ \hat{\beta} = \text{argmin}_{\beta} \left $$
(3)

in Gaussische regressie. De straf ¤(J_{\beta} =, \int _{a}^{b} \links (^{2} f / ^{2} x^{2} rechts)^{2} dx) drukt de “gladheid” van een spline functie uit in termen van de tweede afgeleide van f. Voor gegeven λ kan worden aangetoond dat de oplossing een natuurlijke kubische spline is met knopenreeks x(1)<…<x(n), d.w.z., de knoopposities hoeven niet gekozen te worden, maar zijn “natuurlijk” gegeven door de geordende unieke datawaarden van X. In de literatuur wordt dit type spline aangeduid als smoothing spline . Opgemerkt zij dat kan worden aangetoond dat een afvlakkende spline de gegevens interpoleert als λ=0, terwijl λ=∞ een lineaire functie impliceert. Merk op dat afvlakkende splines een speciaal geval zijn van de algemenere klasse van dunne plaat-splines , die een uitbreiding van het criterium in Eq. (3) naar hoger-dimensionale xi mogelijk maken (zie , Paragraaf 4.15], en voor details).

Een handige eigenschap van afvlakkende splines is dat de straf Jβ kan worden geschreven als β⊤Ωβ met een geschikt gedefinieerde strafmatrix Ω. Daarom wordt de oplossing van (3) gegeven door de bestrafte kleinste kwadraten schatting

$$ ^{\beta} = ^links(B^{\top} B + \lambda ^Omega} rechts)^{-1} B^{\top} y $$
(4)

waarin B een matrix is van dimensie n×n met de natuurlijke spline basisfuncties geëvalueerd tegen de datawaarden. De vector y bevat de responswaarden y1,…,yn. In de praktijk bestaan er zeer efficiënte algoritmen om de waarde van de natuurlijke spline in (4) te berekenen. In plaats van een natuurlijke spline basis voor f op te geven, is het verder mogelijk om met een ongedwongen B-spline basis te werken, omdat de penalty in (3) automatisch de lineariteitsbeperkingen oplegt bij de knopen x(1) en x(n) (zie , Hoofdstuk 5, en , Hoofdstuk 2). Wat de B-spline basis betreft, zullen de schattingsresultaten niet afhangen van de keuze van de grensknopen: het is ofwel mogelijk om x(1) en x(n) als grensknopen te gebruiken, ofwel om x(1) en x(n) op te nemen in de verzameling van binnenste knopen.

Als n groot is en het interval dicht door de waargenomen gegevens wordt bestreken, is het gewoonlijk niet nodig om bij elke xi,i=1,…,n een knoop te plaatsen. In plaats daarvan kan de afvlakkende spline benaderd worden door een bestrafte regressie spline die een gereduceerde verzameling knopen gebruikt. Een zeer populaire klasse van bestrafte regressiesplines zijn P-splines , die gebaseerd zijn op de kubische B-splinebasis en op een “grote” verzameling equidistante knopen (gewoonlijk 10-40). In plaats van de integraal in (3) te evalueren, zijn P-splines gebaseerd op een tweede-orde verschilpenalty gedefinieerd door

$$J^{*}_{\beta} = \sum_limits_{k=3}^{K+4} \links(\Delta^{2} \beta_{k} rechts)^{2} \$$

waarvan kan worden aangetoond dat het, in geval van gelijkmatig verdeelde knopen, een benadering is van Jβ. De tweede-ordeverschiloperator Δ2 wordt gedefinieerd door Δ2βk:=(βk-βk-1)-(βk-1-βk-2). De boete kan derhalve worden uitgedrukt als β⊤Pβ, waarbij P wordt gedefinieerd door D⊤D met D een matrix van verschillen. Het is gemakkelijk af te leiden dat de resulterende schatter van β dezelfde structuur heeft als 2, met Ω vervangen door P.

Een handige eigenschap van P-splines is dat ze numeriek stabiel zijn en zeer gemakkelijk te definiëren en te implementeren. In het bijzonder is het veel eenvoudiger om de verschilmatrix D op te stellen dan de matrix Ω. Ook is het eenvoudig om de penalty Jβ (en dus de matrix D) uit te breiden naar hogere-orde verschillen Δq met q>2. Het is ook mogelijk om een knopenreeks te gebruiken die niet gelijkmatig verdeeld is; in dat geval moeten gewichten worden ingevoerd. Omdat P-splines met ongelijkmatig verdeelde knopen in de praktijk zelden worden gebruikt, laten we ze hier buiten beschouwing en verwijzen we in plaats daarvan naar

Smoothing splines en P-splines ondervangen het probleem van de knoopselectie tot op zekere hoogte. Hun filosofie is een groot aantal knopen te gebruiken en dan λ de mate van gladheid te laten bepalen. Dit resulteert in een extra afstemparameter, zonder dat er een algemene consensus bestaat over hoe deze parameter moet worden afgesteld. Enkele populaire manieren om de “optimale” waarde van λ te bepalen maken gebruik van gegeneraliseerde kruisvalidatie (GCV), AIC of een mixed-model representatie.

Splines in R

De basis installatie bundel van R bevat een set van functies die eenvoudige polynomiale splines en afvlakkende splines kunnen passen. Verdere functies zijn opgenomen in de bibliotheek splines geschreven door DM Bates en WN Venables. Het pakket is al vele jaren het werkpaard van spline-fitting en maakt nu deel uit van de basisdistributie van R. Er zijn meer dan 100 andere pakketten die bij het laden afhankelijk zijn van splines. Het pakket bevat verschillende functies om spline basis te creëren, zoals bs voor B-splines en ns voor natuurlijke splines, die veel gebruikt worden, maar ook enkele meer gespecialiseerde functies om basisfuncties te creëren (zoals periodicSpline dat een periodieke interpolatie splines creëert) of commando’s die nuttig zijn zoals het commando predict.bSpline dat een spline zou evalueren op nieuwe waarden van X.

De standaard bs waarden zullen een kubische B-spline basis creëren met twee grensknopen en één interne knoop geplaatst op de mediaan van de geobserveerde gegevenswaarden. De gebruiker kan meer flexibiliteit bereiken door de plaatsing en het aantal knopen te verhogen en/of hun plaats te wijzigen. Figuur 3 (code 2 in Additional file 1: Appendix) toont B-splines gemaakt met verschillende opties. Het bovenste deel toont lineaire splines, d.w.z. polynomen van de eerste orde (graad is één) met elkaar verbonden op equidistante knopen. Het onderste deel toont kubische polynomen (graad 3).

Fig. 3

B-spline basis met behulp van bs commando in bibliotheek splines. Linksboven: Spline basis van de eerste graad met drie vrijheidsgraden. Rechtsboven: Spline basis van de eerste graad met vier vrijheidsgraden. Linksonder: Kubische spline basis met drie vrijheidsgraden. Rechtsonder: Kubische spline basis met vier vrijheidsgraden. Grafieken gemaakt met code #2

Opgemerkt zij dat B-splines die in R met bs() worden gemaakt automatisch worden begrensd door het bereik van de gegevens, en dat de extra knopen (τ1,…,τd) gelijk worden gesteld aan de grensknopen, zodat er meerdere knopen zijn aan beide uiteinden van het domein. Deze aanpak is nuttig in univariate gevallen en heeft enkele rekenkundig aantrekkelijke kenmerken. Als men echter werkt aan een tweedimensionaal afvlakkingsprobleem, met tensorproducten van B-splines, of als men werkt met P-splines, is deze basis ongeschikt en kan dit leiden tot verkeerde resultaten.

Natuurlijke splines kunnen worden gemaakt in het splines-pakket, met het commando ns. Tenzij de gebruiker de vrijheidsgraden of de knopen specificeert, levert de functie standaard een rechte lijn binnen de grensknopen op. Figuur 4 (code 3 in Additional file 1: Appendix toont natuurlijke splines gemaakt met verschillende opties.

Fig. 4

Natuurlijke kubische spline basis met behulp van commando ns in bibliotheek splines. Linksboven: Spline basis met twee vrijheidsgraden. Rechtsboven: Spline basis met drie vrijheidsgraden. Linksonder: Spline basis met vier vrijheidsgraden. Rechtsonder: Spline basis met vijf vrijheidsgraden. Gemaakt met code#3

Om te illustreren hoe deze functies in de praktijk kunnen worden gebruikt, bekijken we nogmaals de gegevens uit paragraaf 2.0.1. Figuur 5 (gemaakt met (code 4 in Additional file 1: Appendix)) toont de fit die wordt verkregen met de volgende commando’s: poly() voor eenvoudige orthogonale polynomische splines, smooth.spline() voor smoothing splines, bs() en ns() van library splines, voor respectievelijk B-splines en natuurlijke splines. De grafiek linksboven toont een eenvoudige lineaire fit op de gegevens (stippellijn) en een derdegraads polynomiale fit die in staat is de meer complexe relatie tussen de variabelen te vatten. De grafiek in de rechterbovenhoek is echter bijzonder interessant, omdat deze de fit toont met de standaardwaarden van de spline-functies. De groene lijn komt van de functies poly() en ns() die standaard beide een rechte lijn definiëren. Aan het andere uiterste is de blauwe lijn een fit van de functie smooth.spline() die, als geen vrijheidsgraden worden opgegeven, de neiging heeft de gegevens te undersmoothen, d.w.z. een zeer flexibele wiggly fit te produceren, hier gebaseerd op 45 vrijheidsgraden. Een -visueel- redelijke fit met de gegevens kan worden bereikt wanneer vier vrijheidsgraden worden opgegeven (grafiek linksonder). Het is te zien dat er enkele verschillen zijn afhankelijk van de gekozen basis. De polynomiale basis (zwarte lijn) is iets flexibeler dan de rest, vooral bij hogere leeftijden. Anderzijds is een afvlakkende spline die beperkt is tot slechts vier vrijheidsgraden, stijver dan andere benaderingen, maar waarschijnlijk worden de gegevens op kleine leeftijden, tussen 0 en 10 jaar, te sterk afgevlakt. Tussen deze twee uitersten bieden B-splines en natuurlijke splines zeer vergelijkbare pasvormen die het effect van kleine leeftijden vastleggen en minder beïnvloed worden door extreme gevallen aan het eind van het leeftijdsspectrum. De grafiek rechtsonder toont ten slotte hoeveel flexibeler de pasvormen worden naarmate er meer vrijheidsgraden bijkomen, en suggereert een mogelijke vertekening van de over-fit als gevolg van het gebruik van te veel vrijheidsgraden.

Fig. 5

Een plot van leeftijd in jaren tegen de triceps huidplooidikte voor 892 vrouwen in West-Afrika. Linksboven: De stippellijn geeft een eenvoudige lineaire fit weer, de ononderbroken lijn een fit met flexibele derdegraads polynomialen. Rechtsboven: Splines fit met standaard R-waarden. Groene lijn is het resultaat van een polynomiale spline van graad 1 (standaardwaarde voor functie poly, en een fit van een natuurlijke spline zonder vrijheidsgraden gespecificeerd (standaardwaarde voor functies ns). Rode lijn komt van een b-spline met drie vrijheidsgraden (functie bs en blauwe lijn van een afvlakkende spline (van functie smooth.spline). Linksonder: Zwarte lijn is polynomiale fit, rode lijn b-splines fit, groene lijn is een natuurlijke splines fit en smoothing spline, alle gedefinieerd met vier vrijheidsgraden. Rechtsonder: Dezelfde functies gedefinieerd met 10 vrijheidsgraden. Gemaakt met code #4

Een opmerking over vrijheidsgraden

In de praktijk is het altijd nuttig om een spline te definiëren met vrijheidsgraden. Deze aanpak is vooral nuttig bij het werken met B-splines en natuurlijke splines. B-splines hebben d+K, terwijl een natuurlijke kubische spline basisfunctie met K knopen K+1 vrijheidsgraden heeft. Standaard creëert de functie bs in R B-splines van graad 3 zonder interne knopen en met grensknopen gedefinieerd op het bereik van de X variabele. Als zodanig creëert de functie drie basisfuncties. Beschouw nu het volgende geval: wanneer een gebruiker een B-spline definieert met een interne knoop op de mediaan van X (bs(x,knots=mediaan(x)) zal de software vier functies creëren (d=3 plus K=1 interne knopen, vier vrijheidsgraden). Indien de gebruiker echter in de functie de grensknopen specificeert binnen het knopenargument (bs(x,knots=c(min(x),mediaan(x),max(x)))), dan zal de functie zes vrijheidsgraden hebben (d =3 plus k =3). Een soortgelijke voorzichtigheid is geboden met de functie ns.

Wanneer we werken met afvlakkende splines, is het niet eenvoudig om de vrijheidsgraden te specificeren, omdat ze zullen variëren afhankelijk van de grootte van de afstraffing. In de praktijk kunnen bestrafte splines echter ook worden beperkt tot een maximum aantal vrijheidsgraden of gewenste vrijheidsgraden.

Andere spline-pakketten

In het algemeen bevat de uitgebreide lijst spline-pakketten ofwel benaderingen die vrij veel lijken op wat hier wordt gepresenteerd, ofwel zeer gespecialiseerde gevallen die gericht zijn op specifieke toepassingen. In Tabel 1 worden enkele van deze pakketten voorgesteld, samen met het aantal downloads. Het aantal verwijst naar het aantal keren dat een pakket werd gedownload, maar niet naar unieke gebruikers. Het valt buiten het bestek van dit werk om al deze benaderingen in detail te beschrijven.

Tabel 1 R-pakketten die zijn gebruikt voor het maken van splines

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.