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.
专注系列化、高质量的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
变量为因变量。对于自变量:
-
若为连续变量,使用的变量有
wt
、qsec
、drat
; -
若为分类变量,使用的变量有
factor(vs)
、factor(am)
、factor(cyl)
,其中前两者为二分类变量,后者为三分类变量。
2 常用操作符和函数
在书写模型表达式中常常会使用一些操作符和函数,这里列举几个。
-
~
符号~
是模型表达式的标志,用于分割因变量和自变量,其前面为因变量,后面为自变量。
-
+
和-
符号+
和-
用于连接两个变量。符号+
表示模型中包括其后面的项(变量),符号-
表示模型中不包括其后面的项(变量)。
-
*
符号*
用于设置交互项,其本义为乘号。由于模型表达式使用常数1
表示截距项,并常常将其省略,因此模型表达式中的x1*x2
实际相当于数学表达式的展开式(此处仅适用x1
、x2
均是连续型变量的情况)。
-
:
以x1:x2
为例,它表示交互项。
-
I()
函数
I()
函数的作用是让表达式回归“本义”。如I(x1*x2)
表示项,而非。
下面分门别类地介绍各种模型表达式的含义。
3 基本形式
-
y ~ x1 + x2
这是最普通的模型形式。y
表示因变量,x1
、x2
表示自变量;模型包含截距项。
lm(mpg ~ wt, data = mtcars)
## lm(formula = mpg ~ wt, data = mtcars)
##
## Coefficients:
## (Intercept) wt
## 37.285 -5.344
-
y ~ x + 1
含义同y ~ x
,1
表示截距项,省略不改变模型表达式含义。
lm(mpg ~ wt + 1, data = mtcars)
## lm(formula = mpg ~ wt + 1, data = mtcars)
##
## Coefficients:
## (Intercept) wt
## 37.285 -5.344
-
y ~ x - 1
或y ~ -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 - 1
和y ~ -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^2
和y ~ 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
如果x1
、x2
均为连续变量,那么如前所述,它对应的数学表达式为。
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
输出结果中,
wt
、qsec
分别表示自身的一次项,wt:qsec
表示二者的交互项,也就是。
如果x1
、x2
均为分类变量,则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)
表示两个变量参考组的交互项,不含:
符号的三项表示一个变量的参考组与另一个变量的非参考组的交互项,含有:
符号的两项表示两个变量的非参考组的交互项。
如果x1
、x2
其中一个为连续变量,另一个为分类变量,则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 - x1
和y ~ 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 - x1
和y ~ x1:x2 + x2
(注意x1
和x2
的顺序)。
连续/连续:
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
更多推荐
所有评论(0)