繁体   English   中英

如何在R中只有很少点的图上拟合平滑曲线

[英]How to fit a smooth curve on a plot with very few points in R

我只有4个数据点:

points = c(60, 46, 46, 60)

那个“想”形容抛物线。 显然,我找不到一种使它平滑的方法。 取而代之的是,我使用下面这些行代码,最终得到了下面红色方框图:

plot(points, ylim=c(40,60), pch = 20, col = 2, cex = 2)
fit = loess(points ~ c(1:4), bw=nrd0, na.rm=T)
lines(predict(fit), lwd=2, col= 2)

我想知道是否有任何方法可以使拐角平滑,使其看起来更像蓝线...

在此处输入图片说明

正如您收到的消息中所述, loess对这么少的分数并不满意。 但是您可以使用spline曲线获得漂亮的曲线:

points = c(60, 46, 46, 60)
plot(points, ylim=c(40,60), pch = 20, col = 2, cex = 2)
lines(spline(1:4, points, n=100))

在此处输入图片说明

由于您想拟合二次方,因此可以按以下方式获得所需的结果。 假设二次函数为

f(x) = a*x^2 + b*x + c

那么我们知道

a+b+c = 60
4a+2b+c = 46
9a+3b+c = 46

通过将f(1),f(2),f(3)等同于points[1:3] 由于对称性,我们可以忽略points]的第四个元素。 a,b,c是一组线性方程A %*% x = points 因此,如下构建矩阵A

A <- matrix(c(1,1,1,4,2,1,9,3,1),nrow=3,byrow=TRUE)

然后求解线性方程:

pcoef <- solve(A,points[1:3])

现在获取您想要的图形

f <- function(x,pcoef)  pcoef[1]*x^2 + pcoef[2]*x + pcoef[3]
g <- function(x) f(x,pcoef)

plot(points, ylim=c(40,60), pch = 20, col = 2, cex = 2)
curve(g,from=1,to=4,add=TRUE, col="blue")

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM