R中的公式:利用
当前位置:以往代写 > 其他教程 >R中的公式:利用
2019-06-14

R中的公式:利用

R中的公式:利用

R中许多函数都吸收公式(formula)范例的参数,好比lm。来看一个最简朴的利用公式的例子:

代码
1 > lm(y ~ x, data=dfrm)

这里的公式是 y~ x,有这样几个意思:

  1. y和x之间的干系是线性的;
  2. y是因变量,x是自变量;
  3. x和y都是数据框dfrm中的列。

这是最简朴的利用。尚有一种稍微巨大点,但也很常用的公式。当dfrm中有多列数据,个中一列是因变量y,要成立一个y对其他所有列的线性模子:

代码
1 > lm(y ~ ., data=dfrm)

R中的公式被称为模子公式(Model Formulae,下面照旧简称公式),用于描写若干个变量所组成的模子。最早是在S语言中引入,用于描写线性模子,厥后不绝的演化和扩展利用范畴,成为了S语言不行支解的一部门,也自然是R语言中不行支解的一部门。在差异的利用情况中,公式有差异的浸染和特性。公式的根基形式是这样的:

代码
1 因变量 ~ 表达式

个中表达式是一串由各类操纵符毗连起来的变量。延续上面的例子,看这样几个公式:

代码
123 y ~ xy ~ x + 1y ~ x1 + x2

第一个公式的表达式只有变量x,但x和y之间的干系除了线性系数外,还隐含有一个截距。而公式2中则明晰指定了截距是1。公式3暗示的则是y是x1和x2的线性组合,同样也有一个埋没的截距。后头两个公式用到了+标记,暗示两个变量是线性可加的。在公式中还可以用到下面这些运算符(详见[1-2]):

  1. +:前面已经先容了,暗示变量线性可加。
  2. ::暗示变量中的因子之间的interaction。
  3. *:暗示factor crossing,即a*b等同于a+b+a:b。
  4. ^:暗示crossing的次数。即(a+b+c)^2就等同于(a+b+c)*(a+b+c),再扩展一下就是a、b和c的主效应,加上它们之间的二阶互作:a+b+c+a:b+b:c+a:c。
  5. %in% :暗示其左侧的变量是嵌套在右侧变量中的。譬喻a + b %in% a 就等同于a + a:b。
  6. -:暗示移除指定的变量。(a+b+c)^2 – a:b就等同于a + b + c + b:c + a:c。还可以用于消除截距,譬喻y ~ x – 1 就是通过原点的直线。无截距的模子还可以用y ~ x + 0或y ~ 0 + x暗示。
  7. /:a/b等同于a + b %in% a。

除了这些专门针对公式的运算符,公式中还可以利用各类算术运算符,好比log()、poly(),以及各类加减乘除等。但这又导致了一个问题,R怎么才气知道公式中的*号暗示的是乘法元算照旧factor crossing?为了办理这个问题,R提供了I()函数。把一段公式放入I()中就暗示个中所有的运算符都是普通意义上的算术运算符。譬喻:

代码
1 y ~ a + I(b+c)

个中第二个加号就暗示b和c的和,而不是两者线性可加了。

在某些环境下,我们需要通过字符串操纵才气组合出一个所需的公式。这时,可以用as.formula函数将其转换成一个公式,譬喻:

代码
12 xnam <- paste0("x", 1:25)(fmla <- as.formula(paste("y ~ ", paste(xnam, collapse= "+"))))

公式的根基利用差不多就这样了。不外正如前面说的,差异的利用情况下,公式会有差异的特性,这个就不行能在此一一说明白。除了公式的构建和利用,另一个问题就是如安在本身编写函数时理会公式,这个过两天再来先容。

    关键字:

在线提交作业