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