R语言的模型表达式含义解析


专注系列化高质量的R语言教程

推文索引 | 联系小编 | 付费合集


本篇介绍各式各样的模型表达式的含义,主要参考资料是《An Introduction to R》(链接:https://cran.r-project.org/doc/manuals/r-devel/R-intro.pdf)第11.1节的内容。

本篇目录如下:

  • 1 示例数据

  • 2 常用操作符和函数

  • 3 基本形式

  • 4 转换形式

  • 5 多项式

  • 6 交互式

    • 6.1 两个变量的交互

    • 6.2 三个变量的交互

1 示例数据

示例数据mtcars是R语言自带的数据集,可以直接使用。使用下列代码可以将其加载至全局环境中:

data("mtcars")

数学模型中的变量主要分为两种类型:连续变量和分类变量,或分别称数值变量和因子变量。

mtcars中,所有变量均以数值变量的形式存在,但使用factor()函数可以将其转换为因子变量。

在本篇推文的例子中,始终以mpg变量为因变量。对于自变量:

  • 若为连续变量,使用的变量有wtqsecdrat

  • 若为分类变量,使用的变量有factor(vs)factor(am)factor(cyl),其中前两者为二分类变量,后者为三分类变量。

2 常用操作符和函数

在书写模型表达式中常常会使用一些操作符和函数,这里列举几个。

  • ~

符号~是模型表达式的标志,用于分割因变量和自变量,其前面为因变量,后面为自变量。

  • +-

符号+-用于连接两个变量。符号+表示模型中包括其后面的项(变量),符号-表示模型中不包括其后面的项(变量)。

  • *

符号*用于设置交互项,其本义为乘号。由于模型表达式使用常数1表示截距项,并常常将其省略,因此模型表达式中的x1*x2实际相当于数学表达式的展开式(此处仅适用x1x2均是连续型变量的情况)。

  • :

x1:x2为例,它表示交互项。

  • I()函数

I()函数的作用是让表达式回归“本义”。如I(x1*x2)表示项,而非。

下面分门别类地介绍各种模型表达式的含义。

3 基本形式

  • y ~ x1 + x2

这是最普通的模型形式。y表示因变量,x1x2表示自变量;模型包含截距项。

lm(mpg ~ wt, data = mtcars)
## lm(formula = mpg ~ wt, data = mtcars)
## 
## Coefficients:
## (Intercept)           wt  
##      37.285       -5.344
  • y ~ x + 1

含义同y ~ x1表示截距项,省略不改变模型表达式含义。

lm(mpg ~ wt + 1, data = mtcars)
## lm(formula = mpg ~ wt + 1, data = mtcars)
## 
## Coefficients:
## (Intercept)           wt  
##      37.285       -5.344
  • y ~ x - 1y ~ -1 + x

相当于在y ~ x的基础上- 1,表示模型不包含截距项;或理解成截距为0。

lm(mpg ~ wt - 1, data = mtcars)
## lm(formula = mpg ~ wt - 1, data = mtcars)
## 
## Coefficients:
##    wt  
## 5.292
  • y ~ x + 0

相当于在y ~ x + 1的基础上- 1,表示模型不包含截距项,含义同y ~ x - 1y ~ -1 + x+ 0不能省略。

lm(mpg ~ wt + 0, data = mtcars)
## lm(formula = mpg ~ wt + 0, data = mtcars)
## 
## Coefficients:
##    wt  
## 5.292

4 转换形式

转换形式即在模型表达式中使用各种函数对变量进行转换,转换后的结果整体表示一个变量。

  • log(y) ~ x

log(y)为因变量,x为自变量。

lm(log(mpg) ~ wt, data = mtcars)
## lm(formula = log(mpg) ~ wt, data = mtcars)
## 
## Coefficients:
## (Intercept)           wt  
##      3.8319      -0.2718

这种模型表达式对应的数学表达式类似泊松回归,但是存在本质的区别。具体可见推文广义线性模型的基本结构及与线性模型的比较第3节例2。

  • y ~ log(x)

y为因变量,log(x)为自变量。

lm(mpg ~ log(wt), data = mtcars)
## lm(formula = mpg ~ log(wt), data = mtcars)
## 
## Coefficients:
## (Intercept)      log(wt)  
##       39.26       -17.09
  • y ~ factor(x)

这种情况常见于x变量是具有分类性质的连续变量的情况,用于将该变量转换为因子变量(若x已经为因子变量则不需要转换)。

模型对连续变量和分类变量的处理方式是截然不同的。作为分类变量,它的每一个类别(组、水平)都是模型表达式中的一项,其中参考组为截距项,不出现模型输出结果中。

lm(mpg ~ cyl, data = mtcars)
## lm(formula = mpg ~ cyl, data = mtcars)
## 
## Coefficients:
## (Intercept)          cyl  
##      37.885       -2.876

lm(mpg ~ factor(cyl), data = mtcars)
## lm(formula = mpg ~ factor(cyl), data = mtcars)
## 
## Coefficients:
##  (Intercept)  factor(cyl)6  factor(cyl)8  
##       26.664        -6.921       -11.564

5 多项式

在数学中,形如称为x的多项式,最高次数称为多项式的次数。

  • y ~ x^2y ~ x^n

这种写法不能实现x的多项式。不管n取多少,它的含义均与y ~ x相同。由于x^2 = x*x,R程序将其视为x与自身的交互,最终还是x自身。

lm(mpg ~ wt^2, data = mtcars)
## lm(formula = mpg ~ wt^2, data = mtcars)
## 
## Coefficients:
## (Intercept)           wt  
##      37.285       -5.344

lm(mpg ~ wt^10, data = mtcars)
## lm(formula = mpg ~ wt^10, data = mtcars)
## 
## Coefficients:
## (Intercept)           wt  
##      37.285       -5.344
  • y ~ I(x^2)

对应的数学表达式为。

lm(mpg ~ I(wt^2), data = mtcars)
## lm(formula = mpg ~ I(wt^2), data = mtcars)
## 
## Coefficients:
## (Intercept)      I(wt^2)  
##     28.0511      -0.7058
  • y ~ x + I(x^2)

y ~ I(x^2)的基础上加上x的一次项,表示。

lm(mpg ~ wt + I(wt^2), data = mtcars)
## lm(formula = mpg ~ wt + I(wt^2), data = mtcars)
## 
## Coefficients:
## (Intercept)           wt      I(wt^2)  
##      49.931      -13.380        1.171
  • y ~ poly(x, 2, raw = T)

poly()函数可用于表示变量的多项式。y ~ poly(x, 2, raw = T)对应的数学表达式为,同y ~ x + I(x^2)

lm(mpg ~ poly(wt, 2, raw = T), data = mtcars)
## lm(formula = mpg ~ poly(wt, 2, raw = T), data = mtcars)
## 
## Coefficients:
##           (Intercept)  poly(wt, 2, raw = T)1  poly(wt, 2, raw = T)2  
##                49.931                -13.380                  1.171
  • y ~ poly(x, n, raw = T)

表示自变量为x的n次多项式。

lm(mpg ~ poly(wt, 5, raw = T), data = mtcars)
## lm(formula = mpg ~ poly(wt, 5, raw = T), data = mtcars)
## 
## Coefficients:
##           (Intercept)  poly(wt, 5, raw = T)1  poly(wt, 5, raw = T)2  
##              -87.7182               218.8897              -147.7784  
## poly(wt, 5, raw = T)3  poly(wt, 5, raw = T)4  poly(wt, 5, raw = T)5  
##               45.6093                -6.7014                 0.3797

6 交互式

6.1 两个变量的交互

  • y ~ x1*x2

如果x1x2均为连续变量,那么如前所述,它对应的数学表达式为。

lm(mpg ~ wt*qsec, data = mtcars)
## lm(formula = mpg ~ wt * qsec, data = mtcars)
## 
## Coefficients:
## (Intercept)           wt         qsec      wt:qsec  
##    -13.1149       5.4988       2.7568      -0.5897
  • 输出结果中,wtqsec分别表示自身的一次项,wt:qsec表示二者的交互项,也就是。

如果x1x2均为分类变量,则x1*x2表示二者交叉分类的结果。

lm(mpg ~ factor(am)*factor(cyl), data = mtcars)
## Call:
## lm(formula = mpg ~ factor(am) * factor(cyl), data = mtcars)
## 
## Coefficients:
##              (Intercept)               factor(am)1              factor(cyl)6  
##                   22.900                     5.175                    -3.775  
##             factor(cyl)8  factor(am)1:factor(cyl)6  factor(am)1:factor(cyl)8  
##                   -7.850                    -3.733                    -4.825
  • 输出结果中截距项(Intercept)表示两个变量参考组的交互项,不含:符号的三项表示一个变量的参考组与另一个变量的非参考组的交互项,含有:符号的两项表示两个变量的非参考组的交互项。

如果x1x2其中一个为连续变量,另一个为分类变量,则x1*x2表示按分类变量对连续变量进行分组。

lm(mpg ~ factor(cyl)*wt, data = mtcars)
## lm(formula = mpg ~ factor(cyl) * wt, data = mtcars)
## 
## Coefficients:
##     (Intercept)     factor(cyl)6     factor(cyl)8               wt  
##          39.571          -11.162          -15.703           -5.647  
## factor(cyl)6:wt  factor(cyl)8:wt  
##           2.867            3.455
  • 输出结果中,(Intercept)wt分别表示连续变量在分类变量参考组下的截距和斜率;在包含分类变量的项中,不含:符号的两项表示连续变量在分类变量非参考组下的额外截距,含有:符号的两项表示连续变量在分类变量非参考组下的额外斜率。

  • y ~ I(x1*x2)

此种情况模型中仅包含交互项,不含一次项。

lm(mpg ~ I(wt*qsec), data = mtcars)
## lm(formula = mpg ~ I(wt * qsec), data = mtcars)
## 
## Coefficients:
##  (Intercept)  I(wt * qsec)  
##      34.7587       -0.2568

I()函数内只能为数值变量,若为因子变量则报错。

lm(mpg ~ I(factor(cyl)*wt), data = mtcars)

## Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
## 没有(非NA)案例可用
  • y ~ x1:x2

此种情况模型中仅包含交互项,不含一次项。该表达式既适用于数值变量,也适用于因子变量。

lm(mpg ~ wt:cyl, data = mtcars)
## lm(formula = mpg ~ wt:cyl, data = mtcars)
## 
## Coefficients:
## (Intercept)       wt:cyl  
##     30.2679      -0.4793

lm(mpg ~ factor(cyl):wt, data = mtcars)
## lm(formula = mpg ~ factor(cyl):wt, data = mtcars)
## 
## Coefficients:
##     (Intercept)  factor(cyl)4:wt  factor(cyl)6:wt  factor(cyl)8:wt  
##          32.432           -2.690           -4.056           -4.264
  • y ~ x1 %in% x2

这种书写方法同y ~ x1:x2

lm(mpg ~ wt %in% cyl, data = mtcars)
## lm(formula = mpg ~ wt %in% cyl, data = mtcars)
## 
## Coefficients:
## (Intercept)       wt:cyl  
##     30.2679      -0.4793

lm(mpg ~ factor(cyl) %in% wt, data = mtcars)
## lm(formula = mpg ~ factor(cyl) %in% wt, data = mtcars)
## 
## Coefficients:
##     (Intercept)  factor(cyl)4:wt  factor(cyl)6:wt  factor(cyl)8:wt  
##          32.432           -2.690           -4.056           -4.264
  • y ~ x1*x2 - x1y ~ x1:x2 + x2

前者表示在包含一次项和交互项的模型基础上减去x1的一次项,后者表示在交互项的基础上加上x2的一次项。最终对应的的数学表达式是相同的,均为。

lm(mpg ~ wt*cyl - wt, data = mtcars) 
## lm(formula = mpg ~ wt * cyl - wt, data = mtcars)
## 
## Coefficients:
## (Intercept)          cyl       wt:cyl  
##     32.8026      -0.8324      -0.3562

lm(mpg ~ wt:cyl + cyl, data = mtcars) 
## lm(formula = mpg ~ wt:cyl + cyl, data = mtcars)
## 
## Coefficients:
## (Intercept)          cyl       wt:cyl  
##     32.8026      -0.8324      -0.3562
  • y ~ x2/x1

这种书写方法同y ~ x1*x2 - x1y ~ x1:x2 + x2(注意x1x2的顺序)。

连续/连续:

lm(mpg ~ cyl/wt, data = mtcars)
## lm(formula = mpg ~ cyl/wt, data = mtcars)
## 
## Coefficients:
## (Intercept)          cyl       cyl:wt  
##     32.8026      -0.8324      -0.3562

lm(mpg ~ cyl*wt - wt, data = mtcars)
## lm(formula = mpg ~ cyl * wt - wt, data = mtcars)
## 
## Coefficients:
## (Intercept)          cyl       cyl:wt  
##     32.8026      -0.8324      -0.3562

分类/连续:

lm(mpg ~ factor(am)/wt, data = mtcars) 
## lm(formula = mpg ~ factor(am)/wt, data = mtcars)
## 
## Coefficients:
##    (Intercept)     factor(am)1  factor(am)0:wt  factor(am)1:wt  
##         31.416          14.878          -3.786          -9.084

lm(mpg ~ factor(am)*wt - wt, data = mtcars) 
## lm(formula = mpg ~ factor(am) * wt - wt, data = mtcars)
## 
## Coefficients:
##    (Intercept)     factor(am)1  factor(am)0:wt  factor(am)1:wt  
##         31.416          14.878          -3.786          -9.084

连续/分类:

lm(mpg ~ wt/factor(am), data = mtcars) 
## lm(formula = mpg ~ wt/factor(am), data = mtcars)
## 
## Coefficients:
##    (Intercept)              wt  wt:factor(am)1  
##        38.8798         -5.6895         -0.4947

lm(mpg ~ wt*factor(am) - factor(am), data = mtcars) 
## lm(formula = mpg ~ wt * factor(am) - factor(am), data = mtcars)
## 
## Coefficients:
##    (Intercept)              wt  wt:factor(am)1  
##        38.8798         -5.6895         -0.4947

分类/分类:

lm(mpg ~ factor(am)/factor(vs), data = mtcars)
## lm(formula = mpg ~ factor(am)/factor(vs), data = mtcars)
## 
## Coefficients:
##             (Intercept)              factor(am)1  factor(am)0:factor(vs)1  
##                  15.050                    4.700                    5.693  
## factor(am)1:factor(vs)1  
##                   8.621

lm(mpg ~ factor(am)*factor(vs) - factor(vs), data = mtcars)
## lm(formula = mpg ~ factor(am) * factor(vs) - factor(vs), data = mtcars)
## 
## Coefficients:
##             (Intercept)              factor(am)1  factor(am)0:factor(vs)1  
##                  15.050                    4.700                    5.693  
## factor(am)1:factor(vs)1  
##                   8.621

6.2 三个变量的交互

  • y ~ (x1 + x2 + x3)^2

该模型包括三个变量的一次项以及任意两个变量的交互项。

lm(mpg ~ (wt + qsec + drat)^2, data = mtcars) 
## lm(formula = mpg ~ (wt + qsec + drat)^2, data = mtcars)
## 
## Coefficients:
## (Intercept)           wt         qsec         drat      wt:qsec      wt:drat  
##     7.08683      6.48598      0.14217      0.09028     -0.23187     -1.99972  
##   qsec:drat  
##     0.38796
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值