Como posso plotar um objeto fda usando ggplot2?

Sep 04 2020

Usando o pacote fda, ​​criei o objeto fd chamado "curva":

splinebasis = create.bspline.basis(rangeval = c(0,100), 
                                     nbasis = 23,         
                                     norder = 4) 
curve = smooth.basis(x, y, splinebasis)$fd

Neste ponto, posso facilmente plotar meu objeto fd por meio do comando:

plot(curve)

Obtendo um bom resultado.

O que eu gostaria de fazer é plotar o objeto usando o pacote ggplot2, mas infelizmente não tenho ideia de como codificar o ggplot2 st ele usa a base e o coeficiente para retornar a curva contínua *.

  • Na verdade, eu fiz isso usando eval.fd, mas desejo plotar a função spline B real usando ggplot, em vez de alguns novos pontos discretos gerados.

Respostas

1 MarcoSandri Sep 04 2020 at 21:32

Aqui está uma solução simples usando predictdo fdapacote.

library(fda)
set.seed(1)
x <- 0:100
y <- cumsum(rnorm(101))

splinebasis <- create.bspline.basis(rangeval = c(0,100), 
                                     nbasis = 23,         
                                     norder = 4) 
curve <- smooth.basis(x, y, splinebasis)

# Plot using base graphic engine
plot(curve$fd)

# Plot using ggplot2
library(ggplot2)   
xx <- seq(0,100,0.1)
df <- data.frame(x=xx, yhat = predict(curve, newdata=xx))
ggplot(data=df, aes(x=x, y=yhat)) +
  geom_line() +
  geom_hline(aes(yintercept=0), linetype=2) +
  labs(x="time", y="value") +
  theme_bw()