스플라인 기초 시각화


18

교과서에는 일반적으로 주제를 설명 할 때 균일 한 스플라인의 기초를 보여주는 좋은 예가 있습니다. 선형 스플라인의 경우 작은 삼각형의 행 또는 입방 스플라인의 경우 작은 혹의 행과 같은 것입니다.

이것은 전형적인 예입니다 :

http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_introcom_a0000000525.htm

표준 R 함수 (예 : bs 또는 ns)를 사용하여 스플라인 기준의 플롯을 생성하는 쉬운 방법이 있는지 궁금합니다. 나는 사소한 R 프로그램과 결합 된 간단한 행렬 산술이 우아한 방식으로 스플라인 기초의 예쁜 음모를 뱉어내는 것 같아요. 나는 그것을 생각할 수 없다!

답변:


22

B- 스플라인의 예로 이것을 사용해보십시오 :

x <- seq(0, 1, by=0.001)
spl <- bs(x,df=6)
plot(spl[,1]~x, ylim=c(0,max(spl)), type='l', lwd=2, col=1, 
     xlab="Cubic B-spline basis", ylab="")
for (j in 2:ncol(spl)) lines(spl[,j]~x, lwd=2, col=j)

이것을주는 것 :

여기에 이미지 설명을 입력하십시오


4
matplot열을 반복하지 않고 함수 를 사용하는 것이 조금 더 효율적 입니다.
Greg Snow

그래서 그것은 (+1)입니다. 왜 내 툴킷에서 그것을 떨어 뜨 렸는지 모르겠습니다.
jbowman

9

다음 은 "basis"클래스 의 autoplot메소드 입니다 (bs와 ns가 모두 상속 함).

library(ggplot2)
library(magrittr)
library(reshape2)
library(stringr)
autoplot.basis <- function(basis, n=1000) {
    all.knots <- sort(c(attr(basis,"Boundary.knots") ,attr(basis, "knots"))) %>%
        unname
    bounds <- range(all.knots)
    knot.values <- predict(basis, all.knots) %>%
        set_colnames(str_c("S", seq_len(ncol(.))))
    newx <- seq(bounds[1], bounds[2], length.out = n+1)
    interp.values <- predict(basis, newx) %>%
        set_colnames(str_c("S", seq_len(ncol(.))))
    knot.df <- data.frame(x=all.knots, knot.values) %>%
        melt(id.vars="x", variable.name="Spline", value.name="y")
    interp.df <- data.frame(x=newx, interp.values) %>%
        melt(id.vars="x", variable.name="Spline", value.name="y")
    ggplot(interp.df) +
        aes(x=x, y=y, color=Spline, group=Spline) +
        geom_line() +
        geom_point(data=knot.df) +
        scale_color_discrete(guide=FALSE)
}

이를 통해 autoplotns 또는 bs 객체를 호출 할 수 있습니다 . jbowman의 예를 들면 다음과 같습니다.

library(splines)
x <- seq(0, 1, by=0.001)
spl <- bs(x,df=6)
autoplot(spl)

어떤 생산 :

기초 자동 플롯

편집 : 다음 버전의 ggfortify 패키지에 포함됩니다 : https://github.com/sinhrks/ggfortify/pull/129 . 그 후, 나는 당신이 필요로하는 모든 것이 있다고 믿습니다.

library(splines)
library(ggfortify)
x <- seq(0, 1, by=0.001)
spl <- bs(x,df=6)
autoplot(spl)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.