本内容为【科研私家菜】R可视化之美之科研绘图系列课程
快来收藏关注【科研私家菜】
01 散点图曲线拟合
散点图( scatter graph、point graph、X-Y plot、scatter chart或scattergram)是科研绘图中最常见的图形类型之一,通常用于显示和比较数值。散点图是使用一系列的散点在直角坐标系中展示变量的数值分布。散点图可以提供三类关键信息:
(1)变量之间是否存在数量关联趋势;
( 2)如果存在关联趋势,那么其是线性还是非线性的;
(3)观察是否有存在离群值,从而分析这些离群值对建模分析的影响。
曲线拟合(Curve Fitting)的数学定义是指用连续曲线近似地刻画或比拟平面上一组离散点所表示的坐标之间的函数关系,是一种用解析表达式逼近离散数据的方法。曲线拟合通俗的说法就是“拉曲线”,也就是将现有数据透过数学方法来代入一条数学方程式的表示方法。科学和工程遇到的很多问题,往往只能通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,如果能够找到一个连续的函数(也就是曲线)或者更加密集的离散方程,使得实验数据与方程的曲线能够在最大程度上近似吻合,就可以根据曲线方程对数据进行数学计算,对实验结果进行理论分析,甚至对某些不具备测量条件的位置的结果进行估算。
geom_smooth()函数中method参数可以设置拟合曲线类型,说明如下:
method
Smoothing method (function) to use, accepts either NULL or a character vector, e.g. "lm", "glm", "gam", "loess" or a function, e.g. MASS::rlm or mgcv::gam, stats::lm, or stats::loess. "auto" is also accepted for backwards compatibility. It is equivalent to NULL.
For method = NULL the smoothing method is chosen based on the size of the largest group (across all panels). stats::loess() is used for less than 1,000 observations; otherwise mgcv::gam() is used with formula = y ~ s(x, bs = "cs") with method = "REML". Somewhat anecdotally, loess gives a better appearance, but is O(N^2) in memory, so does not work for larger datasets.
If you have fewer than 1,000 observations but want to use the same gam() model that method = NULL would use, then set method = "gam", formula = y ~ s(x, bs = "cs")
1.1 参数回归模型
参数回归模型假定f的形式是已知的。曲线拟合( curve fitting )是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两个变量间的关系。绘图软件一般使用最小二乘法(least squaremethod )实现拟合曲线的计算求取。回归分析( regression analysis )是对具有因果关系的影响因素(自变量)和预测对象(因变量)所进行的数理统计分析处理。只有当自变量与因变量确实存在某种关系时,建立的回归方程才有意义。按照自变量的多少,可分为一元回归分析和多元回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。比较常用的是多项式回归模型、线性回归模型和指数回归模型。
1.2 非参数回归模型
非参数回归模型不采用预定义形式。相反,它对f的定性性质做出假设。例如,可以假设f是“平滑的",其不会减少到具有有限数量的参数的特定形式。因此,非参数方法通常更灵活。它们可以揭示数据中可能被遗漏的结构。数据平滑( data smoothimg )通过建立近似函数尝试抓住数据中的主要模式,去除噪声、结构细节或瞬时现象,来平滑一个数据集。在平滑过程中,信号数据点被修改,由噪声产生的单独数据点被降低,低于毗邻数据点的点被提升,从而得到一个更平滑的信号。平滑有两种重要形式用于数据分析:①若平滑的假设是合理的,则可以从数据中获得更多信息;②供灵活而且稳健的分析。
数据平滑的方法主要有:局部加权回归( Locally Weighted Scatterplot Smoothing,LOWESS 或LOESS )、广义可加模型(Generalised Additive Model,GAM )、Savitzky-Golay、样条( spline) 数据平滑。
02曲线拟合方法 method="lm"
library(ggplot2)
mydata<-read.csv("Scatter_Data.csv",stringsAsFactors=FALSE)
ggplot(data = mydata, aes(x,y)) +
geom_point(fill="black",colour="black",size=3,shape=21) +
geom_smooth(method="lm",se=TRUE,formula=y ~ splines::bs(x, 5),colour="red")+ #(h)
scale_y_continuous(breaks = seq(0, 125, 25))+
theme(
text=element_text(size=15,color="black"),
plot.title=element_text(size=15,family="myfont",hjust=.5,color="black"),
legend.position="none"
)
效果如下:
03 曲线拟合方法 method = 'gam'
library(ggplot2)
mydata<-read.csv("Scatter_Data.csv",stringsAsFactors=FALSE)
ggplot(data = mydata, aes(x,y)) +
geom_point(fill="black",colour="black",size=3,shape=21) +
geom_smooth(method="lm",se=TRUE,formula=y ~ splines::bs(x, 5),colour="red")+ #(h)
# geom_smooth(method = 'gam',formula=y ~s(x))+ #(g)
# geom_smooth(method = 'loess',span=0.4,se=TRUE,colour="#00A5FF",fill="#00A5FF",alpha=0.2)+ #(f)
scale_y_continuous(breaks = seq(0, 125, 25))+
theme(
text=element_text(size=15,color="black"),
plot.title=element_text(size=15,family="myfont",hjust=.5,color="black"),
legend.position="none"
)
效果如下:
04曲线拟合方法 method = 'loess'
library(ggplot2)
mydata<-read.csv("Scatter_Data.csv",stringsAsFactors=FALSE)
ggplot(data = mydata, aes(x,y)) +
geom_point(fill="black",colour="black",size=3,shape=21) +
geom_smooth(method="lm",se=TRUE,formula=y ~ splines::bs(x, 5),colour="red")+ #(h)
# geom_smooth(method = 'gam',formula=y ~s(x))+ #(g)
# geom_smooth(method = 'loess',span=0.4,se=TRUE,colour="#00A5FF",fill="#00A5FF",alpha=0.2)+ #(f)
scale_y_continuous(breaks = seq(0, 125, 25))+
theme(
text=element_text(size=15,color="black"),
plot.title=element_text(size=15,family="myfont",hjust=.5,color="black"),
legend.position="none"
)
效果如下:
参考资料
《R语言数据可视化之美》
关注R小盐,关注科研私家菜(溦❤工众號: SciPrivate),有问题请联系R小盐。让我们一起来学习 R可视化之美之科研绘图