如何在R中使用geom_smooth?

4,497 阅读8分钟

本教程将告诉你如何在R中使用geom_smooth函数。

它解释了geom_smooth的作用,解释了语法,并逐步展示了如何使用这个函数的例子。

如果你需要特定的东西,你可以点击以下任何一个链接。这些链接将直接把你带到教程中的适当位置。

对Geom Smooth的快速介绍

geom smooth函数是R语言中[ggplot2可视化包]的一个函数。

从本质上讲,geom_smooth() ,在一个现有的图上添加一条趋势线。

A simple example of a ggplot2 scatterplot, with a smooth trend line added over the top with geom_smooth.

默认情况下,添加的趋势线是一条LOESS平滑线。 但是也有一些选项可以让你改变线的性质。 例如,你可以添加一条直的 "线性模型 "线。

添加的线的具体属性取决于语法。

既然如此,我们来看看geom_smooth() 函数的语法。

Geom Smooth的语法

在这里,我们将看一下geom_smooth的语法。

一个简单的说明

注意,要使用geom_smooth,你需要安装ggplot2。

而且,你需要把ggplot2加载到你的环境中。

你可以通过代码library(ggplot2) ,或者代码library(tidyverse) ,这将加载ggplot2、dplyr和其他Tidyverse包。

geom_smooth的语法

使用geom_smooth() 的语法相当简单。

我们将这个函数与现有的ggplot2绘图结合起来使用。

这意味着,你应该已经创建了一个ggplot2可视化。 然后,你可以用'+'符号调用geom_smooth()

An image that explains the syntax of geom_smooth, and how to add it to a ggplot2 visualization.

此外,还有一些可选的参数,你可以在括号内使用,以改变函数的行为。

geom_smooth的参数

geom_smooth函数有大量的可选参数,但你应该知道的最重要的参数是。

  • mapping
  • data
  • span
  • method
  • formula
  • se
  • position
  • na.rm
  • orientation
  • show.legend
  • inherit.aes
  • n
  • fullrange
  • level
  • method.args

让我们一个一个地看这些参数。

data

data 参数指定了与这个平滑线层相关的数据。

默认情况下,geom_smooth将继承你在顶行调用ggplot() 时指定的数据集。

你可以通过向data 参数提供一个新的数据框架的名称来覆盖该继承的数据。(你可以提供数据框架以外的对象,但它们将被强化以创建一个数据框架)。

mapping

这个参数使你能够指定从你的数据到绘图美学的映射。

默认情况下,你不需要用这个参数指定一个映射,因为通常情况下,你会在ggplot() 函数中这样做,geom_smooth会继承这个映射。(默认情况下,inherit.aes 参数被设置为inherit.aes = False 。)

如果你设置了inherit.aes = True ,那么你就需要用这个参数指定一个映射。

method

method 参数允许你指定要使用的平滑函数(即,平滑方法)。

这个参数有几个可能的参数。

如果你把这个参数设置为NULL ,那么如果观测值少于1000个,函数将默认使用LOESS平滑,如果有1000个以上的观测值,mgcv::gam()

你也可以把它设置为字符串值。

  • "lm"
  • "glm"
  • "gam"
  • "loess"

或者你可以把它设置为R统计函数,比如。

  • MASS::rlm
  • mgcv::gam
  • stats::lm
  • stats::loess
formula

formula ,允许你指定一个确切的公式来用于平滑线。

例如,你可以明确地设置"formula = y ~ x"。

se

se 参数使你能够指定你是否希望在平滑线周围有一个置信区间。

默认情况下,它被设置为 "se = True"。 正如你在例子中看到的,这在平滑线周围创建了一个深灰色的区域。 这个深灰色区域表示置信区间(默认为0.95)。

如果你设置"se = False",它将删除置信区间。

position

position 参数允许你为该函数指定一个位置调整。

na.rm

na.rm 参数控制该函数如何处理缺失值。

如果你设置 "na.rm = False ",那么函数将删除缺失值发出警告。

如果你设置 "na.rm = True ",那么函数将删除缺失值,但关闭警告。

orientation

orientation 参数控制平滑线的生成方向。

默认情况下,它被设置为 "orientation = NA 。 这将导致函数自动确定方向。

另外,你可以手动将这个参数的参数设置为 "x" 或 "y" 。

show.legend

show.legend 参数允许你指定关于平滑线层的美学映射的信息。

默认情况下,这个参数被设置为show.legend = NA ,其中包括这些信息。

如果你设置show.legend = FALSE ,它将从图例中排除美学映射信息。

inherit.aes

inherit.aes 控制geom_smooth层是否会从顶线 函数调用中继承美学映射。ggplot()

默认情况下,它被设置为inherit.aes = TRUE

如果你把它设置为inherit.aes = FALSE ,你将能够手动覆盖默认的美学映射。

n

n 参数控制平滑函数的 "评估点的数量"。

span

span 指定对默认的LOESS平滑函数使用多少平滑。

默认情况下,它被设置为span = 0.75

随着span 的增加,平滑线将变得更加平滑。

随着span 的减少,平滑线将变得更加粗糙和灵活。

注意,这个参数只适用于使用LOESS平滑的情况。

fullrange

fullrange 控制线条是只适合数据,还是适合整个图。

level

level 参数控制线条周围的置信区间的大小。

默认情况下,这个参数被设置为level = .95

关于参数的最后说明

请记住,这些参数中的大多数都很少使用。

你通常只使用methodspan ,可能还有formula

如何使用geom_smooth的例子

现在我们已经看过了语法,让我们来看看如何使用geom smooth来为你的数据添加一条平滑线或趋势线的一些例子。

例子

  • [添加一条LOESS平滑线]
  • [添加一条 "线性模型 "的直线]
  • [改变平滑线的平滑度/粗糙度]

设置代码

在你运行这些例子之前,你需要运行一些设置代码。

具体来说,你需要

  • 加载Tidyverse软件包
  • 创建一些我们可以可视化的样本数据
加载Tidyverse

首先,你需要加载Tidyverse包。

library(tidyverse)

我们将主要使用ggplot2 ,用于我们的可视化,但我们稍后也会需要tibble() 函数来创建一个数据集。 既然如此,最好是直接加载整个tidyverse 函数,而不是专门加载ggplot2

创建数据

现在,我们将创建一个简单的数据集,我们可以将其可视化。

在这里,我们将使用tibble() 函数来创建一个 "tibble",它本质上只是一个漂亮的数据框。

set.seed(55)
scatter_data <- tibble(x_var = runif(100, min = 0, max = 25)
                       ,y_var = log2(x_var) + rnorm(100)
             )

这个数据集有两个变量:x_vary_var

让我们用ggplot2快速将数据绘制成散点图

ggplot(data = scatter_data, aes(x = x_var, y = y_var)) +
  geom_point(color = 'red')

OUT。

An example of a scatterplot made with ggplot2.

正如你所看到的,这两个变量之间有一个温和的曲线关系。

我们将使用geom_smooth在这个散点图的顶部添加一条平滑的线来可视化这种关系。

例子1:添加一条LOESS平滑线

首先,我们要在上面的散点图上添加一条LOESS平滑线。

我们先运行代码,然后我再来解释。

ggplot(data = scatter_data, aes(x = x_var, y = y_var)) +
  geom_point(color = 'red') +
  geom_smooth()

结束。

A ggplot scatterplot with a smoth line plotted over it, made with geom_smooth.

解释

这是很简单的。

在这里,我们通过调用ggplot()geom_point() 创建了一个散点图。

为了在上面添加一条平滑线,我们只需使用'+' 符号,然后调用geom_smooth()

记住:ggplot2允许你分层建立图。 如果你需要建立一个带有平滑线的散点图,你可以直接写出散点图的代码,然后使用'+'符号来添加一个新的图层(平滑线)。

在这种情况下,默认情况下,这条线是一条LOESS(局部加权散点图平滑线)。

不过,我们可以添加不同类型的线条,我们将在下一个例子中这样做。

实例2:用geom_smooth添加一条直线 "线性模型"

接下来,我们要在散点图的数据上添加一条直线

实际上,我们将使用geom_smooth来创建一个简单的线性模型,并在数据上绘制该模型。

为了做到这一点,我们将设置method = 'lm'

这里是代码。

ggplot(data = scatter_data, aes(x = x_var, y = y_var)) +
  geom_point(color = 'red') +
  geom_smooth(method = 'lm')

这里是输出结果。

A scatterplot with a "linear model" straight line plotted over the data, created with the parameter "method = 'lm'".

解释

这是很简单的。

我们有我们的散点图,而且我们正在添加一条趋势线作为新的层,其中包括'+' 和geom_smooth()

但是在这种情况下,我们要添加一个直线的线性模型,而不是LOESS线。

要做到这一点,我们只需设置method = 'lm' 。(如果你还不明白, 'lm' 意思是 "线性模型"。)

实例3:改变平滑线的平滑度/粗糙度

最后,让我们再次创建一条LOESS平滑线,但让我们创建一条更粗糙、更灵活的线。

要做到这一点,我们将使用span 参数。

ggplot(data = scatter_data, aes(x = x_var, y = y_var)) +
  geom_point(color = 'red') +
  geom_smooth(span = .2)

输出

A scatterplot with a LOESS line, where the span has been decreased to make the line less smooth.

解释

在这里,为了创建LOESS线,我们调用geom smooth,就像我们在[例子1]中做的那样。

这里的主要区别是,我们使用span 参数来改变线条的平滑度。

具体来说,我们把span 减少到0.2(默认是0.75)。

随着跨度的减少,线条将变得更加粗糙,而随着跨度的增加,线条将变得更加平滑。

请记住,要找到span 的理想值可能需要一些试验和错误。

还要注意,在这种情况下,降低跨度可能实际上是不好的。 它导致线条跟随数据中的一些噪音,而不是更普遍的基本模式。

当你使用这个参数时,你需要小心。

关于KEYWORD的常见问题

现在你已经了解了geom_smooth并看到了一些例子,让我们回顾一下一些常见问题。

问题1:geom_smooth和stat_smooth有什么区别?

实际上,没有什么区别。 它们几乎是相同的。

唯一的区别是,stat_smooth允许你用 "非标准几何 "来作图。