Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por...

21
Splines Ana Júlia e Arthur Tarso Departamento de Estatística Universidade Federal de Minas Gerais Novembro 2018

Transcript of Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por...

Page 1: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

Splines

Ana Júlia e Arthur Tarso

Departamento de EstatísticaUniversidade Federal de Minas Gerais

Novembro 2018

Page 2: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um
Page 3: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 4: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um
Page 5: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 6: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um
Page 7: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 8: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 9: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 10: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 11: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 12: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 13: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 14: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 15: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 16: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 17: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 18: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 19: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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

Page 20: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um
Page 21: Splines - ICEx - UFMGcristianocs/MetComput/Relatorio1_2.pdf · Spline é uma função definida por partes por polinômios. Ao invés de modelar um conjunto de observações por um

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