科研星球

线性拟合与曲线拟合,直接在图上添加拟合曲线、拟合方程、判别系数R2和P值

1、什么是线性拟合?


线性拟合,顾名思义,针对两组数据或多组数据,找出一条最佳拟合直线,常用于处理与自变量呈线性关系的因变量。线性拟合是数据处理的常用方法,拟合的目的是对呈现一定数值关系的因变量与自变量找出最佳拟合方程,一般用线性回归来实现。


2、什么是曲线拟合?


真实世界研究中,变量间不一定是线性关系,比如疾病疗效与疗程长短的关系、服药后血药浓度与时间的关系等常呈曲线关系。此时,线性拟合效果不佳,曲线拟合提供了一个很好的解决思路。
曲线拟合(Curve Fitting)是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两个变量之间的关系。也可以说曲线拟合就是使用某个模型(或者称为方程),将一系列的数据拟合出平滑的曲线,以便观察两组数据之间的内在联系,了解数据之间的变化趋势。
通过对数据进行曲线拟合,我们不但能找到数据中潜在的某种规律,还能对数据的变化进行预测。


3、Excel实现线性拟合与曲线拟合

Excel软件对于简单的线性和曲线拟合,实现起来比较方便。


1.png


2.png


3.png


4.png



4、R语言实现线性拟合与曲线拟合
R语言的ggplot2函数在数据可视化方面很厉害,但是有的图形用ggplot2实现起来会比较费劲,需要写很多的代码,耗时耗力,对于初学者不太友好。此时,可以用专门的包来实现,非常的方便,这也是R语言比Python强大的地方,很多R包能方便实现一些特定的用途
比如我们想用ggplot2函数把拟合的方程显示到图形上,需要写不少代码来实现这一目的。但有一个R包basicTrendline,可以很方便实现,此包的优秀之处在于它可以一次性生成散点图的拟合曲线、拟合方程、判别系数R2和P值,并把这些内容显示在图上。知识补充:R^2衡量的是回归方程整体的拟合度,R^2等于回归平方和在总平方和中所占的比率,即回归方程所能解释的因变量变异性的百分比。R^2越大越好,说明曲线拟合的越好,当然也要注意过拟合的问题。
basicTrendline包可以使用函数“trendline”建立不同的拟合方程,只需要改变参数model的值就可以选择不同模型来拟合。参数“model”的值如line2P为一次函数,line3P为二次函数,log2P为对数函数,exp2P为指数函数,exp3P为指数函数(带常数项),power2P为幂函数,power3P为幂函数(带常数项),更多内容可以通过?trendline查看其帮助文档。


软件操作


#install.packages("basicTrendline")

library(basicTrendline)


#使用R软件自带的数据集women,有两个变量,分别为身高height和体重weight。

head(women)

str(women)

#加载数据

attach(women)


#我们想通过height来预测weight,把height赋值为x,weight赋值为y。注:如果直接用weight和height放到函数trendline里有时候会出错,为了保险,直接赋值为x和y。

x<-height

y<-weight


#添加趋势线

# 一次函数:y=a*x+b

trendline(x, y, model="line2P", ePos.x = "topleft", summary=TRUE, eDigit=5)

5.png


# 二次函数:y=a*x^2+b*x+c

trendline(x, y, model="line3P", ePos.x = "topleft", summary=TRUE, eDigit=5)

6.png

# 对数函数:y=a*ln(x)+b

trendline(x, y, model="log2P", ePos.x = "topleft", summary=TRUE, eDigit=5)

7.png

# 指数函数:y=a*exp(b*x)

trendline(x, y, model="exp2P", ePos.x = "topleft", summary=TRUE, eDigit=5)

8.png

# 幂函数:y=a*x^b

trendline(x, y, model="power2P", ePos.x = "topleft", summary=TRUE, eDigit=5)

9.png


*更多统计绘图相关技巧及课程

没有账号?