首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将平滑曲线拟合到R中的数据?

如何将平滑曲线拟合到R中的数据?
EN

Stack Overflow用户
提问于 2010-08-14 04:18:16
回答 7查看 266.4K关注 0票数 93

我正在尝试在R中绘制一条平滑的曲线。我有以下简单的玩具数据:

代码语言:javascript
运行
复制
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> y
 [1]  2  4  6  8  7 12 14 16 18 20

现在,当我使用一个标准命令绘制它时,它看起来当然是凹凸不平的:

代码语言:javascript
运行
复制
> plot(x,y, type='l', lwd=2, col='red')

如何使曲线平滑,以便使用估计值对3条边进行舍入?我知道有很多方法可以拟合一条平滑的曲线,但我不确定哪种方法最适合这种类型的曲线,以及如何用R编写它。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-08-14 04:28:10

我非常喜欢loess()的平滑效果:

代码语言:javascript
运行
复制
x <- 1:10
y <- c(2,4,6,8,7,12,14,16,18,20)
lo <- loess(y~x)
plot(x,y)
lines(predict(lo), col='red', lwd=2)

Venables和Ripley的质量书有一整节关于平滑的内容,还涵盖了样条和多项式--但loess()几乎是每个人的最爱。

票数 108
EN

Stack Overflow用户

发布于 2010-08-14 08:51:16

也许smooth.spline是一个选项,你可以在这里设置一个平滑参数(通常在0和1之间

代码语言:javascript
运行
复制
smoothingSpline = smooth.spline(x, y, spar=0.35)
plot(x,y)
lines(smoothingSpline)

您还可以对smooth.spline对象使用预测。该函数以R为基数,详情请参见?smooth.spline。

票数 62
EN

Stack Overflow用户

发布于 2010-08-14 10:15:40

为了让它变得更流畅。

代码语言:javascript
运行
复制
x <- 1:10
y <- c(2,4,6,8,7,8,14,16,18,20)
lo <- loess(y~x)
plot(x,y)
xl <- seq(min(x),max(x), (max(x) - min(x))/1000)
lines(xl, predict(lo,xl), col='red', lwd=2)

这种风格插入了很多额外的点,并得到了一条非常平滑的曲线。这似乎也是ggplot所采用的方法。如果标准的平滑度很好,你可以直接使用。

代码语言:javascript
运行
复制
scatter.smooth(x, y)
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3480388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档