Uso de ~ (til) na linguagem de programação R

187

Eu vi em um tutorial sobre modelagem de regressão o seguinte comando:

myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

O que exatamente esse comando faz e qual é o papel de ~(til) no comando?

Ankita
fonte
Gostaria de compartilhar o link para o tutorial? Soa interessante.
cheesus
1
@cheeesus ... Eu estava estudando a mineração de dados de e-books em R com estudos de caso ... lá você pode encontrar muitos outros exemplos interessantes.
Ankita 03/09/2013

Respostas:

193

A coisa à direita de <-é um formulaobjeto. É freqüentemente usado para denotar um modelo estatístico, onde a coisa à esquerda da ~é a resposta e as coisas à direita da ~são as variáveis ​​explicativas. Então, em inglês, você diria algo como "A espécie depende do comprimento da sépala, largura da sépala, comprimento da pétala e largura da pétala" .

A myFormula <-parte dessa linha armazena a fórmula em um objeto chamado myFormulapara que você possa usá-la em outras partes do seu código R.


Outros usos comuns de objetos de fórmula em R

O latticepacote as utiliza para especificar as variáveis ​​a serem plotadas .
O ggplot2pacote os utiliza para especificar painéis para plotagem .
O dplyrpacote os utiliza para avaliação não padrão .

Spacedman
fonte
1
Para uma discussão um pouco mais expansivo: stackoverflow.com/questions/8055508/the-tilde-operator-in-r/...
IRTFM
Seção do as 'fórmulas' lazyevalvinheta dá uma boa introdução para o que a fórmula é
RobinL
82

R define um ~operador (til) para uso em fórmulas. As fórmulas têm todos os tipos de usos, mas talvez o mais comum seja para regressão:

library(datasets)
lm( myFormula, data=iris)

help("~")ou help("formula")vai te ensinar mais.

@ Spacedman cobriu o básico. Vamos discutir como isso funciona.

Primeiro, sendo um operador, observe que é essencialmente um atalho para uma função (com dois argumentos):

> `~`(lhs,rhs)
lhs ~ rhs
> lhs ~ rhs
lhs ~ rhs

Isso pode ser útil saber para uso em, por exemplo, applycomandos de família.

Segundo, você pode manipular a fórmula como texto :

oldform <- as.character(myFormula) # Get components
myFormula <- as.formula( paste( oldform[2], "Sepal.Length", sep="~" ) )

Terceiro, você pode manipulá-lo como uma lista :

myFormula[[2]]
myFormula[[3]]

Finalmente, existem alguns truques úteis com fórmulas (veja help("formula")mais):

myFormula <- Species ~ . 

Por exemplo, a versão acima é igual à versão original, pois o ponto significa "todas as variáveis ​​ainda não utilizadas". Isso examina o data.frame que você usa em sua eventual chamada de modelo, vê quais variáveis ​​existem no data.frame, mas não são explicitamente mencionadas na sua fórmula e substitui o ponto pelas variáveis ​​ausentes.

Ari B. Friedman
fonte
Obrigado pela resposta @Ari B. Friedman, mas a última linha é um pouco ambígua onde você diz 'dot significa "todas as variáveis ​​ainda não usadas"'. Se você pudesse ilustrar mais.
Ankita
9
@Ankita, "ainda não utilizado" neste contexto significa não referido. Em Species~., espécie é a única variável que foi usada. Portanto, depende de todas as outras variáveis ​​no data.frame.
X4nd3r
Eu não entendo myFormula <- Species ~ . . Quando dot ainda é substituído por variáveis ​​de data.frame? Você poderia dar um exemplo
srghma 13/03