В учебнике по регрессионному моделированию я увидел следующую команду:
myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
Что именно делает эта команда, и какова роль ~
(tilde) в команде?
В учебнике по регрессионному моделированию я увидел следующую команду:
myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
Что именно делает эта команда, и какова роль ~
(tilde) в команде?
Вещь справа от <-
представляет собой объект formula
. Он часто используется для обозначения статистической модели, где вещью слева от ~
является ответ, а вещи справа от ~
являются объясняющими переменными. Поэтому на английском языке вы бы сказали что-то вроде "Виды зависят от длины спада, ширины сепара, длины лепестка и ширины лепестков".
Часть myFormula <-
этой строки хранит формулу в объекте с именем myFormula
, поэтому вы можете использовать его в других частях вашего R-кода.
Другие распространенные применения объектов формулы в R
Пакет lattice
использует их для указать переменные для построения.
Пакет ggplot2
использует их для указать панели для печати.
Пакет dplyr
использует их для нестандартной evaulation.
R определяет оператор ~
(тильда) для использования в формулах. Формулы имеют все виды использования, но, пожалуй, наиболее распространенным является регрессия:
library(datasets)
lm( myFormula, data=iris)
help("~")
или help("formula")
научит вас больше.
@Spacedman осветил основы. Давайте обсудим, как это работает.
Сначала, будучи оператором, обратите внимание, что это по существу ярлык функции (с двумя аргументами):
> `~`(lhs,rhs)
lhs ~ rhs
> lhs ~ rhs
lhs ~ rhs
Это может быть полезно знать для использования, например. apply
команды семейства.
Во-вторых, вы можете манипулировать формулой как текст:
oldform <- as.character(myFormula) # Get components
myFormula <- as.formula( paste( oldform[2], "Sepal.Length", sep="~" ) )
В-третьих, вы можете манипулировать им как список:
myFormula[[2]]
myFormula[[3]]
Наконец, есть несколько полезных трюков с формулами (подробнее см. help("formula")
):
myFormula <- Species ~ .
Например, вышеприведенная версия аналогична исходной версии, поскольку точка означает "все переменные, которые еще не использовались". Это рассмотрит файл data.frame, который вы используете в своем конечном вызове модели, видит, какие переменные существуют в файле data.frame, но явно не упоминается в вашей формуле и заменяет точку теми отсутствующими переменными.