एक आधार के आधार पर कल्पना करना


18

जब वे विषय को समझा रहे हों, तो पाठ्यपुस्तकों में आमतौर पर समान विभाजन के लिए आधार के अच्छे उदाहरण प्लॉट होते हैं। रैखिक रेखा के लिए छोटे त्रिभुजों की एक पंक्ति या क्यूबिक पट्टी के लिए छोटे कूबड़ की एक पंक्ति की तरह कुछ।

यह एक विशिष्ट उदाहरण है:

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

मुझे आश्चर्य हो रहा है कि मानक आर फ़ंक्शंस (जैसे bs या ns) का उपयोग करके स्पलाइन बेस का प्लॉट उत्पन्न करने का एक आसान तरीका है। मुझे लगता है कि मैट्रिक्स के कुछ सरल टुकड़े अंकगणित को एक तुच्छ आर कार्यक्रम के साथ जोड़ दिया गया है जो एक सुंदर तरीके से एक तख़्ता आधार के एक सुंदर भूखंड को थूक देगा। मैं अभी इसके बारे में सोच भी नहीं सकता!

जवाबों:


22

B-splines के लिए एक उदाहरण के रूप में इसे आज़माएँ:

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कॉलम के माध्यम से लूप करने के बजाय फ़ंक्शन का उपयोग करना थोड़ा अधिक कुशल है ।
ग्रेग स्नो

तो यह (+1) है, मुझे नहीं पता कि मैंने इसे अपने मानसिक टूलकिट से क्यों गिरा दिया।
जुम्मन

9

यहां "आधार" वर्ग के लिए एक 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 ऑब्जेक्ट पर कॉल करने देता है । जंबोमैन का उदाहरण लेते हुए:

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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.