Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por...
Transcript of Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por...
Splines
Ana Júlia e Arthur Tarso
Departamento de EstatísticaUniversidade Federal de Minas Gerais
Novembro 2018
Contents
1 Introdução 51.1 O que são splines? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Vantagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2 Desvantagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Método de Ajuste 72.1 Spline Linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Spline Cúbica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Spline Natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Aplicação 113.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:
f(X) =∑M
m=1 βmhm(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) =∑3
m=1 βmhm(X) é igual a βm = ¯(Y )m, no qual ¯(Y )m é a média dos Y’s pertencentes
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:
si(x) = f(xi−1)xi−x
xi−xi−1+ f(xi)
x−xi−1
xi−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)s′i(xi) = s′i+1(xi), para i = 1, ..., N − 1;
(v)s′′i (xi) = s
′′i+1
(xi), para i = 1, ..., N − 1
A spline cúbica é uma função que interpola f emN+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 + β1x+ β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)s′i(xi) = s′i+1(xi), para i = 1, ..., N − 1;
(v)s′′i (xi) = s
′′i+1
(xi), para i = 1, ..., N − 1;
(vi)s′′i (x0) = s
′′i (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:
y = 10 + 5 sin(πx
24
)− 2 cos
(4(x− 6)
24
)+ ε, ε ∼ N(0, 1)
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 é:
Y = β0 + β1X + β2max(0, X − 6) + β3max(0, X − 12) + β4max(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.
Y = β0 + β1X + β2X2 + β3X
3
+β4max(0, X − 6)3 + β5max(0, X − 12)3 + β6max(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 auxiliaresmax(0, X−k)3 fazem com que a inclinação só mude a partir demax(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