Sunteți pe pagina 1din 21

Splines

Ana Júlia e Arthur Tarso

Departamento de Estatística
Universidade Federal de Minas Gerais

Novembro 2018
Contents

1 Introdução 5
1.1 O que são splines? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Vantagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2 Desvantagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Método de Ajuste 7
2.1 Spline Linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Spline Cúbica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Spline Natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 Aplicação 11
3.1 Dados gerados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Spline Linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3 Spline Cubica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 Spline Natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.5 Código R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Bibliography 21

3
1

Introdução

1.1 O que são splines?


Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações
por um único polinômio, escolhe-se pontos distintos no intervalo de observações (nós) e é definido um
polinômio para cada intervalo, de forma a modelar curvas complexas por polinômios mais simples.

Figure 1.1: Exemplos do uso de splines para modelar uma curva.

1.1.1 Vantagens
• Maior flexibilidade para o ajuste dos modelos se comparado ao modelo de regressão linar ou
polinomial;

• Permite modelar comportamento atípico dos dados, o que não seria possível com apenas uma
função/modelo;

• Uma vez determinados a quantidade e localização dos nós, o modelo é de fácil ajuste.

1.1.2 Desvantagens
• Pode gerar overfitting, prejudicando a capacidade preditiva do modelo;

• Incluir mais nós que o necessário pode levar a uma piora do ajuste do modelo;

• Dificuldade em escolher a quantidade/localização ideal dos nós.

5
2

Método de Ajuste

A ideia básica do método é substituir o vetor de inputs X, por variáveis adicionais, que serão combinações
de X e então utilizar a aproximação linear nesse novo espaço gerado pelos inputs.
Denotando por hm (X) : <p → < a m-ésima transformação de X, m=1,...,M, temos então o modelo:
PM
f (X) = m=1 βm hm (X),

obtendo-se assim uma expansão linear de bases em X. Após a definição de hm os modelo são lineares sob
essas novas variáveis e os métodos propostos podem então ser aplicados nesse novo espaço.
Alguns problemas praticos irão exigir para uma escolha particular das funções de base hm , como
logaritmos ou funções de exponencias. Comumente, escolhe-se as funções de base hm para aumentar a
flexibilidade de f (X) e consequentemente do modelo. Polinômios são um exemplo dessa flexibilizacão,
porém, devido a sua natureza tendem a distorcer a realidade em regiões remotas. Nesse trabalho vamos
focar nos ajustes polinomiais.
Utilizando um polinômio de ordem n − 1 temos um ajuste perfeito aos dados, ou seja, o polinomio é
capaz de passar por todos os pontos dos dados. No entanto, apesar do ajuste ser perfeito, é fácil ver que a
curva ajustada não é robusta para prever novos dados. Uma alternativa é ajustar polinômios de menor
grau por partes.

Figure 2.1: Ajuste obtido usando um polinomio de terceiro grau (sem Splines) .

Supondo que X é unidimensional, um polinômio por partes é obtido separando o dominio de X em


intervalos conectados e definindo f como um polinômio por intervalo.

7
O polinômio por partes é definido da seguinte forma:

h1 (X) = I(X < ξ1 ), h2 (X) = I(ξ1 ≤ X < ξ2 ), h3 (X) = I(ξ2 ≤ X)

Então para as três sub-regiões definidas anteriormente o estimador de mínimos quadrados para o
modelo f (X) = 3m=1 βm hm (X) é igual a βm = (Y¯ )m , no qual (Y¯ )m é a média dos Y’s pertencentes
P

ao m-ésimo intervalo
É importante destacar que os exemplos anteriores não se preocupam com a continuação da função
f (X). Para garantir a continuidade é necessário incluir restrições no modelo, como por exemplo:

f (ξ1− ) = f (ξ1+ ) e f (ξ2− ) = f (ξ2+ )

ou seja,

β1 + β4 ξ1 = β2 + β5 ξ1 e β2 + β5 ξ2 = β3 + β6 ξ2

Nesse caso, como temos duas restrições perdemos 2 graus de liberdade, deixando apenas 4 parâmetros.
Uma maneira mais direta é utilizar uma base que diretamente incorpora tais restrições:

h1 (X) = 1, h2 (X) = X, h3 (X) = (X − ξ1 )+ , h4 (X) = (X − ξ2 )+

Em relação à escolha da posição dos nós ξk , não se trata de uma decisão tão importante no resultado
do modelo, pois o bom ajuste depende muito mais da quantidade de nós internos k. Popularmente,
costuma-se utilizar de três a sete nós, por isso, um bom método é utilizar os quantis (tercis, quartis, quintis,
etc).
Harrel (2001) recomenda que o número de nós seja decidido levando em conta o tamanho da amostra
disponível. Para uma amostra menor que 100, o uso de 4 nós internos geralmente produz um ajuste
adequado e retorna um modelo balanceado em relação à flexibilidade e à perda de precisão. Para amostras
grandes, o uso de 5 nós é um ponto de partida razoável. Para 7 ou mais nós a classificação passa a perder
significado, tornando a análise subjetiva.

2.1 Spline Linear


Uma spline linear, ou de primeira ordem, é definida (para um conjunto de pontos ordenados) por um
conjunto de polinômios de grau um ligados entre si através dos nós.
Considerando os n + 1 pontos ordenados de forma que:

x0 < x1 < x2 < ... < xn−1 < xn

e os correspondentes valores da função f (x0 ), f (x1 ), ..., f (xn ) e, designando o intervalo [xi−1 , xi ] por
segmento i, i = 1, 2, ..., n. A spline linear pode ser escrita em cada subintervalo i como:

i −x
si (x) = f (xi−1 ) xix−x i−1
+ f (xi ) xx−x i−1
i −xi−1
, para i = 1, 2, ..., n

A spline linear resultante é uma função contínua no intervalo [x0 , xn ], no entanto, a primeira derivada
é descontínua nos nós (ponto de união dos polinômios)

8
2.2 Spline Cúbica
As splines cúbicas são as de menor ordem nas quais a descontinuidade nos nós são suaves o suficiente
para não serem vistas a olho nu. Portanto, existe pouca justificativa para utilizar splines de maior ordem,
a não ser que por algum motivo específico seja necessário mais derivadas suavizadas. Dessa forma, é
necessário escolher a ordem da spline, o número de nós e suas localizações.
A spline cúbica pode ser dividida em duas categorias: Restrita e Irrestrita. Se as caudas (partes do
polinômio antes do primeiro nó e depois do último nó) forem modeladas através de funções lineares,
temos o caso restrito ou também conhecido como spline natural. Se as caudas não forem modeladas
através de funções lineares temos o caso irrestrito.
Seja f uma função em [a, b]. Uma spline cúbica interpolada para f é a função contínua S tal que:
(i) para i = 1, ..., N , em cada intrvalo [xi−1 , xi ] seja S(x) = si (x), onde cada um dos si é um polinômio
cúbico;
(ii)si (xi−1 ) = f (xi−1 ), para i = 1, ..., N ;
(iii)si (xi ) = f (xi ), para i = 1, ..., N ;
(iv)s0i (xi ) = s0i+1 ( xi ), para i = 1, ..., N − 1;
00 00
(v)si (xi ) = si+1 ( xi ), para i = 1, ..., N − 1

A spline cúbica é uma função que interpola f em N + 1 pontos, possui a primeira e a segunda derivada
contínuas em [x0 , xN ]
A função spline cúbica com k pontos pode ser escrita, de forma geral, como:

f (x) = β0 + β1 x + β2 (x − ξ1 )3+ + β3 (x − ξ2 )3+ + ... + βk+1 (x − ξk )3+

A vantagem de utilizarmos a spline cúbica é a possibilidade de garantir continuidade da função


e até de sua derivada de segunda ordem, mesmo quando especifica-se a primeira derivada da função a
ser interpolada nos extremos do intervalo. A desvantagem é que as primeiras derivadas da spline não
coincidem com a função original, mesmo nos nós.

Figure 2.2: Splines cúbicas e suavização

9
2.3 Spline Natural
Uma spline natural (ou spline cúbica restrita) utiliza a suposição de que a funções são lineares além das
fronteiras. Essa hipótese de linearidade nas regiões próximas às fronteiras é considerada adequada já que
essa é uma região com pouca informação.
Temos uma spline natural se:
(i) para i = 1, ..., N , em cada intrvalo [xi−1 , xi ] seja S(x) = si (x), onde cada um dos si é um polinômio
cúbico;
(ii)si (xi−1 ) = f (xi−1 ), para i = 1, ..., N ;
(iii)si (xi ) = f (xi ), para i = 1, ..., N ;
(iv)s0i (xi ) = s0i+1 ( xi ), para i = 1, ..., N − 1;
00 00
(v)si (xi ) = si+1 ( xi ), para i = 1, ..., N − 1;
00 00
(vi)si (x0 ) = si (xN ) = 0.

Os pedaços de polinômios de spline cúbico acabam se tornando uma única curva contínua, pois o
encontro das funções no ponto de corte é forçado através de uma restrição implícita no modelo, onde as
derivadas das funções se igualam, com o intuito de atender a restrição de continuidade do modelo.

10
3

Aplicação

3.1 Dados gerados


Os dados para este exemplos foram gerados da função:
 
 πx  4(x − 6)
y = 10 + 5 sin − 2 cos + ,  ∼ N (0, 1)
24 24

Figure 3.1: Plot dos dados gerados. A linha vermelha representa a curva real (sem os erros )

3.2 Spline Linear


Primeiro define-se a posição dos nós, para permitir que a curva mude de direcao e trace uma nova linha.
Para este exemplo, foram fixados pontos igualmente espaçados em (6, 12, 18).
O modelo especificado é:

Ŷ = β0 + β1 X + β2 max(0, X − 6) + β3 max(0, X − 12) + β4 max(0, X − 18) (3.1)

Esse modelo permite que uma curva seja ligada a próxima, para que não haja descontinuidade. A
inclinacao da curva muda somente quando ela passa pelo nó.
Os preditores auxiliares max( 0, X-k ) fazem com que a inclinação só mude a partir de max(0, X −
k) = X − k.

11
Figure 3.2: Preditores auxiliares.

O ajuste então é realizado usando a função lm.

fit <- lm( y ~ x + x6 + x12 + x18 )

Figure 3.3: Ajuste obtido usando a Spline Linear.

3.3 Spline Cubica


Primeiro é realizado um ajuste utilizando um polinômio de grau 3, sem o uso de Splines, para posterior
comparação. O ajuste do polinômio já oferece maior flexibilidade que o ajuste da spline linear.

fit <- lm( y ~ x + x.squared + x.cubed )

12
Figure 3.4: Ajuste obtido usando um polinomio de terceiro grau (sem Splines) .

Agora utilizando uma Spline Cubica para impedir que haja mudança de direção brusca entre as retas.

Ŷ = β0 + β1 X + β2 X 2 + β3 X 3
+β4 max(0, X − 6)3 + β5 max(0, X − 12)3 + β6 max(0, X − 18)3

Semelhante ao que foi feito na Spline Linear, agora adiciona-se os termos cubicos auxiliares ao invés de
termos lineares. O modelo resultante permite maior flexibilidade que o modelo polinomial sem as splines.
Os preditores auxiliares max(0, X − k)3 fazem com que a inclinação só mude a partir de max(0, X −
k)3 = (X − k)3 .

Figure 3.5: Preditores auxiliares.

O ajuste então é realizado usando a função lm.

fit <- lm( y ~ x + x.squared + x.cubed + x6.cubed + x12.cubed + x18.cubed )

13
Figure 3.6: Ajuste obtido usando a Spline Cubica.

3.4 Spline Natural


Para o ajuste da Spline Natural foi utilizado o pacote splines do R. Para esse ajuste os nós foram
especificados por meio do parâmetro knots.

fit <- lm( y ~ ns( x, knots=c(6,12,18) ) )

Figure 3.7: Ajuste obtido usando a Spline Natural.

Um segundo ajuste Spline Natural foi realizado, dessa vez sem especificar a posição dos nós. Para
esse ajuste são especificados os graus de liberdade df. A função ns() então escolhe df - 1 - intercept nós
em quantis de x adequadamente escolhidos.

fitk <- lm( y ~ ns( x, df = k ) )

Figure 3.8: Ajuste obtido usando a Spline Natural para diferentes nós.

14
3.5 Código R

################
#
# Gerando dados
#
################

# Preditor tem valores entre 1:24


x <- c(1:24)
x <- seq(1,24,by=0.05)

# Variavel de saida e predita pela variavel X, de maneira nao linear:


mu <- 10 + 5 * sin( x * pi / 24 ) - 2 * cos( (x-6)*4/24 )

# Gerando erros de medida


set.seed(2010)
e <- rnorm( length(mu) )

# Dados gerados
y <- mu + e

plot( x, y )
lines( x, mu, col="red" )
title("Simulated data")

################
#
# Spline Linear
#
################

# Define preditores auxiliares


#
x6 <- ( x - 6 )
x6[ x6<0 ] <- 0
#
x12 <- ( x - 12 )
x12[ x12<0 ] <- 0
#

15
x18 <- ( x - 18 )
x18[ x18<0 ] <- 0
#
#print( cbind( x, x6, x12, x18 ) )

#plots
x11()
grid = seq(1,24,0.05)
plot(grid,x6, ylab = "X-k", xlab = "Value",
main = "New predictors", type = "l")
lines(grid,x12,col="red")
lines(grid,x18,col="blue")
lines(grid,x,col="darkgreen")
legend("topleft", inset = 0.05, col=c("darkgreen","black","red","blue"),
lty = c(1,1,1,1),legend = c("X","X-6","X-12","X-18"))

# Ajusta spline linear


fit <- lm( y ~ x + x6 + x12 + x18 )

print( summary( fit ) )


fitted.mean <- predict( fit )

plot( x, y )
lines( x, mu, col="red" )
lines( x, fitted.mean, col="blue", lwd=2 )
title("Data, true mean curve (red), and fitted (blue) using linear spline")
abline(v = 6, lty = 2)
abline(v = 12, lty = 2)
abline(v = 18, lty = 2)

##### A spline linear permite uma mudanca de direcao na posicao dos nos.

################
#
# Spline Cubica
#
################

##### Aqui usamos um modelo polinomial cubico


##### para dar flexibilidade ao ajuste.

16
x.squared <- x^2
x.cubed <- x^3

# Ajuste sem usar Splines


fit <- lm( y ~ x + x.squared + x.cubed )

print( summary( fit ) )

fitted.mean.pol <- predict( fit )

plot( x, y )
lines( x, mu, col="red" )
lines( x, fitted.mean.pol, col="green", lwd=2 )
title("Data, true mean curve (red),
and fitted (green) using cubic pol.(No Splines)")

##### CUBIC SPLINE


# Termos da Spline Cubica
x6.cubed <- x6^3
x12.cubed <- x12^3
x18.cubed <- x18^3
#
#print( cbind( x, x.squared, x.cubed, x6.cubed, x12.cubed, x18.cubed ) )

#plots
x11()
grid = seq(1,24,0.05)
plot(grid,x6.cubed, ylab = "(X-k)^3", xlab = "Value",
main = "New predictors", type = "l")
lines(grid,x12.cubed,col="red")
lines(grid,x18.cubed,col="blue")
lines(grid,x^3,col="darkgreen")
legend("topleft", inset = 0.05, col=c("darkgreen","black","red","blue"),
lty = c(1,1,1,1),legend = c("X^3","(X-6)^3","(X-12)^3","(X-18)^3"))

# Ajuste do modelo
fit <- lm( y ~ x + x.squared + x.cubed + x6.cubed + x12.cubed + x18.cubed )

print( summary( fit ) )


fitted.mean.cub <- predict( fit )

plot( x, y )

17
lines( x, mu, col="red" )
lines( x, fitted.mean.pol, col="green", lwd=2 )
lines( x, fitted.mean.cub, col="blue", lwd=2 )
title("Data, true mean curve (red),
fitted (blue) using cubic spline and polynomial (green)")
abline(v = 6, lty = 2)
abline(v = 12, lty = 2)
abline(v = 18, lty = 2)

################
#
# Spline Natural
#
################

#install.packages("splines")
library( splines )
#
fit <- lm( y ~ ns( x, knots=c(6,12,18) ) )

print( summary( fit ) )


fitted.mean <- predict( fit )

plot( x, y )
lines( x, mu, col="red" )
lines( x, fitted.mean.cub, col="green", lwd=2 )
lines( x, fitted.mean, col="blue", lwd=2 )
title("Data, true mean curve (red),
fitted (blue) using natural spline and (green) cubic spline")

abline(v = 6, lty = 2)
abline(v = 12, lty = 2)
abline(v = 18, lty = 2)

################
#
# Spline Natural, sem fixar nos
#
################

fit1 <- lm( y ~ ns( x, df = 1 ) )

18
fit3 <- lm( y ~ ns( x, df = 3 ) )
fit5 <- lm( y ~ ns( x, df = 5 ) )
fit10 <- lm( y ~ ns( x, df = 10 ) )

print( summary( fit1 ) )


print( summary( fit3 ) )
print( summary( fit5 ) )
print( summary( fit10 ) )

fitted.mean.1 <- predict( fit1 )


fitted.mean.3 <- predict( fit3 )
fitted.mean.5 <- predict( fit5 )
fitted.mean.10 <- predict( fit10 )

plot( x, y )
lines( x, mu, col="red" )
lines( x, fitted.mean.1, col="goldenrod", lwd=2 )
lines( x, fitted.mean.3, col="blue", lwd=2 )
lines( x, fitted.mean.5, col="green", lwd=2 )
lines( x, fitted.mean.10, col="orange", lwd=2 )
title("Natural Splines for 1,3,5 and 10 Degrees of Freedom")

19
Bibliography

[1] CRAN. R documentation on splines function.

[2] Harrell, F. Regression Modeling Strategies with Applications to Linear Models, Logistic Regression
and Survival Analysis. New York: Springer-Verlag 2001.

[3] Hastie, T., Tibshirani, R and Friedman, J. The Elements of Statistical Learning. California: Springer
2008. Second Edition.

21

S-ar putea să vă placă și