একটি স্প্লাইনের ভিত্তিতে ভিজ্যুয়ালাইজ করা


18

পাঠ্যপুস্তকগুলিতে সাধারণত বিষয়টি ব্যাখ্যা করার সময় ইউনিফর্ম স্প্লাইনের জন্য ভিত্তির ভাল উদাহরণ রয়েছে। লিনিয়ার স্প্লাইনের জন্য সামান্য ত্রিভুজের একটি সারি বা কিউবিক স্প্লিনের জন্য সামান্য কুঁচকির সারি জাতীয় কিছু।

এটি একটি সাধারণ উদাহরণ:

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

আমি ভাবছি যে স্ট্যান্ডলিন আরএসের ফাংশনগুলি (বিএস বা এনএসএস) ব্যবহার করে স্প্লাইন ভিত্তির প্লট তৈরি করার কোনও সহজ উপায় আছে কিনা। আমার ধারণা ম্যাট্রিক্স পাটিগণিতের কিছু সাধারণ টুকরো আছে যা একটি তুচ্ছ আর প্রোগ্রামের সাথে মিলিত হয়েছে যা একটি মার্জিত উপায়ে একটি স্প্লাইন ভিত্তির একটি সুন্দর প্লটগুলি ছড়িয়ে দেবে। আমি এটা ভাবতে পারি না!

উত্তর:


22

এটি বি-স্প্লাইনের উদাহরণ হিসাবে দেখুন:

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), কেন আমি এটিকে আমার মানসিক সরঞ্জামদণ্ড থেকে বাদ দিয়েছি তা আমি জানি না।
jbowman

9

"ভিত্তি" শ্রেণীর জন্য এখানে একটি autoplotপদ্ধতি রয়েছে (যা বিএস এবং এনএস উভয়ই উত্তরাধিকার সূত্রে প্রাপ্ত):

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

এটি আপনাকে কেবল autoplotএকটি এনএস বা বিএস অবজেক্টে কল করতে দেয় । জবোম্যানের উদাহরণ গ্রহণ করা:

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.