smooth.spline包装的stat_smooth(在ggplot2中) [英] smooth.Pspline wrapper for stat_smooth (in ggplot2)
问题描述
对不起,如果这个问题是微不足道的,但我想弄清楚如何在R中绘制某种类型的自然立方样条(NCS),它完全躲过了我。
在上一个问题中,我学会了如何绘制由ggplot中的ns()命令生成的NCS,但我有兴趣了解如何绘制略有不同的NCS,在 pspline 包。据我所知,这是唯一一个可以根据给定数据集自动选择适当CV平滑惩罚的软件包。
理想情况下,我可以提供smooth.Pspline作为ggplot2中stat_smooth图层的一种方法。我现在的代码是:
pre $ plot <-ggplot(data_plot,aes(x = age,y = wOBA,color = (方法= lm,公式= y〜ns(x,4),se = FALSE)
我想用smooth.Pspline的功能替换lm公式。我做了一些Google搜索,并找到解决方案由Hadley编写的非常相似的B样条函数smooth.spline。但我无法完美地适应这种平滑。有没有人有这方面的经验?
非常感谢!
您只需检查 predict.smooth.Pspline
如何返回预测值。
在内部工作中 stat_smooth
,调用 predictdf
来创建平滑线。 predictdf
是 ggplot2
的一个内部(非导出)函数(它被定义为这里)它是一个标准的S3方法。
一个例子(使用 Sorry if this question is trivial, but I'm trying to figure out how to plot a certain type of natural cubic spline (NCS) in R and it's completely eluded me. In a previous question I learned how to plot the NCS generated by the ns() command in ggplot, but I'm interested in how to plot a slightly different NCS generated the smooth.Pspline command in the pspline package. As far as I know this is the only package that automatically selects the proper smoothing penalty by CV for a given dataset. Ideally I would be able to provide smooth.Pspline as a method to a stat_smooth layer in ggplot2. My current code is like: I'd like to replace the "lm" formula with smooth.Pspline's functionality. I did a little bit of googling and found a solution to the very similar B-spline function smooth.spline, written by Hadley. But I haven't been able to adapt this to smooth.Pspline perfectly. Does anyone have experience with this? Thanks so much! You simply need to inspect how In the internal workings of As such the following will work. An example (with a pspline fitted using 这篇关于smooth.spline包装的stat_smooth(在ggplot2中)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋! sm.spline
返回类 smooth.Pspline $ c $因此,对于
stat_smooth
来说,您需要为类创建
。 predictdf
的方法.Pspline
$ smP < - <$ p
$ b
M < - model.frame(formula,data)
sm.spline(x = M [,2],y = M [,1] )
#s3 method for predictdf(在stat_smooth中调用)
predictdf.smooth.Pspline< - 函数(model,xseq,se,level){
pred < - 预测(模型,xseq)
data.frame(x = xseq,y = c(pred))
}
mgcv :: gam
来比较pspline)。 mgcv
非常棒,在拟合方法和平滑样条线选择方面有很大的灵活性(尽管不是CV,只有GCV / UBRE / REML / ML)
d < - ggplot(mtcars,aes(qsec,wt))
d + geom_point()+ stat_smooth(method = smP,se = FALSE,color ='red',formula = y〜x)+
stat_smooth(method ='gam',color ='blue',formula = y〜s(x,bs ='ps'))
plot <- ggplot(data_plot, aes(x=age, y=wOBA, color=playerID, group=playerID))
plot <- plot + stat_smooth(method = lm, formula = y~ns(x,4),se=FALSE)
predict.smooth.Pspline
returns the predicted values.stat_smooth
, predictdf
is called to create the smoothed line. predictdf
is an internal (non-exported) function of ggplot2
(it is defined here) it is a standard S3 method. sm.spline
returns an object of class smooth.Pspline
, therefore for stat_smooth
to work you need to create method for predictdf
for class smooth.Pspline
. smP <- function(formula,data,...){
M <- model.frame(formula, data)
sm.spline(x =M[,2],y =M[,1])
}
# an s3 method for predictdf (called within stat_smooth)
predictdf.smooth.Pspline <- function(model, xseq, se, level) {
pred <- predict(model, xseq)
data.frame(x = xseq, y = c(pred))
}
mgcv::gam
as comparison). mgcv
is awesome and gives great flexibility in fitting methods and smoothing spline choices (although not CV, only GCV/UBRE/REML/ML)d <- ggplot(mtcars, aes(qsec, wt))
d + geom_point() + stat_smooth(method = smP, se= FALSE, colour='red', formula = y~x) +
stat_smooth(method = 'gam', colour = 'blue', formula = y~s(x,bs='ps'))