概述
原文地址:http://gossipcoder.com/?p=1106
另外一篇很好的例子:http://www.stathome.cn/html/S-plus_R/Rrumen/2009/0604/475.html
R中的公式:使用
R中很多函数都接收公式(formula)类型的参数,比如lm。来看一个最简单的使用公式的例子:
1
|
>
lm
(y ~ x, data=dfrm)
|
这里的公式是 y~ x,有这样几个意思:
- y和x之间的关系是线性的;
- y是因变量,x是自变量;
- x和y都是数据框dfrm中的列。
这是最简单的使用。还有一种稍微复杂点,但也很常用的公式。当dfrm中有多列数据,其中一列是因变量y,要建立一个y对其他所有列的线性模型:
1
|
>
lm
(y ~ ., data=dfrm)
|
R中的公式被称为模型公式(Model Formulae,下面还是简称公式),用于描述若干个变量所构成的模型。最早是在S语言中引入,用于描述线性模型,后来不断的演化和扩展使用范围,成为了S语言不可分割的一部分,也自然是R语言中不可分割的一部分。在不同的使用环境中,公式有不同的作用和特性。公式的基本形式是这样的:
1
|
因变量 ~ 表达式
|
其中表达式是一串由各种操作符连接起来的变量。延续上面的例子,看这样几个公式:
1
2
3
|
y ~ x
y ~ x + 1
y ~ x1 + x2
|
第一个公式的表达式只有变量x,但x和y之间的关系除了线性系数外,还隐含有一个截距。而公式2中则明确指定了截距是1。公式3表示的则是y是x1和x2的线性组合,同样也有一个隐藏的截距。后面两个公式用到了+符号,表示两个变量是线性可加的。在公式中还可以用到下面这些运算符(详见[1-2]):
- +:前面已经介绍了,表示变量线性可加。
- ::表示变量中的因子之间的interaction。
- *:表示factor crossing,即a*b等同于a+b+a:b。
- ^:表示crossing的次数。即(a+b+c)^2就等同于(a+b+c)*(a+b+c),再扩展一下就是a、b和c的主效应,加上它们之间的二阶互作:a+b+c+a:b+b:c+a:c。
- %in% :表示其左侧的变量是嵌套在右侧变量中的。例如a + b %in% a 就等同于a + a:b。
- -:表示移除指定的变量。(a+b+c)^2 – a:b就等同于a + b + c + b:c + a:c。还可以用于消除截距,例如y ~ x – 1 就是通过原点的直线。无截距的模型还可以用y ~ x + 0或y ~ 0 + x表示。
- /:a/b等同于a + b %in% a。
除了这些专门针对公式的运算符,公式中还可以使用各种算术运算符,比如log()、poly(),以及各种加减乘除等。但这又导致了一个问题,R怎么才能知道公式中的*号表示的是乘法元算还是factor crossing?为了解决这个问题,R提供了I()函数。把一段公式放入I()中就表示其中所有的运算符都是普通意义上的算术运算符。例如:
1
|
y ~ a +
I
(b+c)
|
其中第二个加号就表示b和c的和,而不是两者线性可加了。
在某些情况下,我们需要通过字符串操作才能组合出一个所需的公式。这时,可以用as.formula函数将其转换成一个公式,例如:
1
2
|
xnam <-
paste0
(
"x"
, 1:25)
(fmla <-
as.formula
(
paste
(
"y ~ "
,
paste
(xnam, collapse=
"+"
))))
|
公式的基本使用差不多就这样了。不过正如前面说的,不同的使用环境下,公式会有不同的特性,这个就不可能在此一一说明了。除了公式的构建和使用,另一个问题就是如何在自己编写函数时解析公式,这个过两天再来介绍。
统计学太弱了,强烈欢迎就不规范的术语和描述来拍砖~~
[1]http://www.biosino.org/pages/newhtm/r/schtml/Formulae-for-statistical-models.html
[2]http://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html
最后
以上就是呆萌萝莉为你收集整理的R中的公式:使用R中的公式:使用的全部内容,希望文章能够帮你解决R中的公式:使用R中的公式:使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复