Как я могу отобразить объект fda с помощью ggplot2?

#r #ggplot2 #plot #bspline

#r #ggplot2 #построить #bspline

Вопрос:

Используя пакет fda, я создал объект fd под названием «кривая»:

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

На этом этапе я могу легко построить свой объект fd с помощью команды:

 plot(curve)
  

График с одной кривой

Получение прекрасного результата.

Что я хотел бы сделать, так это построить объект с использованием пакета ggplot2, но, к сожалению, я понятия не имею, как закодировать ggplot2 s.t. он использует базис и коэффициент для возврата непрерывной кривой*.

  • На самом деле я сделал это с помощью eval.fd, но я хочу построить фактическую функцию B-сплайна, используя ggplot, вместо некоторых новых сгенерированных дискретных точек.

Комментарии:

1. Ваш код не воспроизводим: Error in smooth.basis(x, y, splinebasis) : object 'y' not found .

Ответ №1:

Вот простое решение, использующее predict из fda пакета.

 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()
  

введите описание изображения здесь