15.4 公式

我们已经看到在lattice绘图和ggplot2面板中使用了公式。许多统计模型为了指定模型中变量的结构都类似地使用了公式。公式的确切含义取决于传递给它的模型函数(相同的公式分别出现在lattice绘图和ggplot2面板中时,它们的含义是不同的),但大多数模型都满足一个通用的模式:左边指定响应变量,右边指定自变量,两者由波浪线隔开。回到gonorrhoea数据集的例子,我们有:

  1. Rate ~ Year + Age.Group + Ethnicity + Gender

在这里,Rate是响应变量,我们选择了四个自变量(year/age group/ethnicity/gender)。对于可包括截距的模型(几乎都是回归模型),这样的公式隐式包含了截距。如果把它传递给一个线性回归模型,这将意味着:

Rate = α0 + α1 Year + α2 Age.Group + α3 ethnicity + α4 Gender + Ԑ

其中每个αi是一个由该模型决定的常数,而Ԑ是正态分布的误差项。

如果我们不想要截距项,可在右边添加一个零来取消它:

  1. Rate ~ 0 + Year + Age.Group + Ethnicity + Gender

由该式给出的更新的公式为:

Rate = α1 Year + α2 Age.Group + α3 ethnicity + α4 Gender + Ԑ

每个这些公式仅包括自变量,它们之间没有任何交互。如果要包括交互,可以用星号代替加号:

  1. Rate ~ Year * Age.Group * Ethnicity * Gender

这增加了所有可能的双向交互(year和age group,year和ethnicity等),以及三方交互(year和age group和ethnicity等),一直到所有自变量之间都有交互(year和age group和ethnicity和gender)。这往往就太多了,因为所有交互通常是没有意义的。

有两种方式能限制交互的程度。首先,你可以使用冒号新增个别的交互。在下例中,Year:Ethnicity是这两者之间的交互,而Year:Ethnicity:Gender是一个三方的交互:

  1. Rate ~ Year + Ethnicity + Gender + Year:Ethnicity + Year:Ethnicity:Gender

然而,如果你有超过三到四个变量,这种方法就会显得过于精细,会使输入变得很麻烦。使用^符号这种替代语法能让你包括所有的交互组合。下例包括了year、ethnicity和gender,以及它们之间的三个双向交互:

  1. Rate ~ (Year + Ethnicity + Gender) ^ 2

还可以包括变量的修饰版本。例如,环境进程生成了大量符合对数正态分布的变量,你可能希望把它们包含到一个log(var)的线性回归中。这些项可以直接包括在内,但你可能已经发现,包括var^2时会产生问题。因为该语法是保留给交互使用的,所以如果你想把幂计算包含在内,把它们包括在I()内吧:

  1. Rate ~ I(Year ^ 2) # 是Year的平方,而不是交互