Penggunaan ~ (tilde) dalam Bahasa pemrograman R

187

Saya melihat dalam tutorial tentang pemodelan regresi perintah berikut:

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

Apa sebenarnya yang dilakukan perintah ini, dan apa peran ~(tilde) dalam perintah?

Ankita
sumber
Mau berbagi tautan ke tutorial? Kedengarannya menarik.
cheesus
1
@ cheeesus ... Saya sedang meneliti data ebook di R dengan studi kasus ... di sana Anda dapat menemukan lebih banyak lagi contoh menarik seperti itu.
Ankita

Jawaban:

193

Benda di sebelah kanan <-adalah formulaobjek. Ini sering digunakan untuk menunjukkan model statistik, di mana hal di sebelah kiri ~adalah respon dan hal-hal di sebelah kanan ~adalah variabel penjelas. Jadi dalam bahasa Inggris Anda akan mengatakan sesuatu seperti "Spesies tergantung pada Panjang Sepal, Lebar Sepal, Panjang Petal dan Lebar Petal" .

Bagian myFormula <-dari baris itu menyimpan rumus dalam objek yang disebut myFormulasehingga Anda dapat menggunakannya di bagian lain dari kode R.


Penggunaan umum lainnya dari objek rumus di R

The latticepaket menggunakan mereka untuk menentukan variabel plot .
The ggplot2paket menggunakan mereka untuk menentukan panel untuk merencanakan .
The dplyrpaket menggunakan mereka untuk non-standar evaulation .

Spacedman
sumber
1
Untuk diskusi yang sedikit lebih luas: stackoverflow.com/questions/8055508/the-tilde-operator-in-r/…
IRTFM
Bagian 'formula' dari lazyevalsketsa memberikan pengantar yang bagus untuk apa formula itu
RobinL
82

R mendefinisikan ~operator (tilde) untuk digunakan dalam formula. Rumus memiliki semua jenis kegunaan, tetapi mungkin yang paling umum adalah untuk regresi:

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

help("~")atau help("formula")akan mengajarkan Anda lebih banyak.

@Spacedman telah membahas dasar-dasarnya. Mari kita bahas cara kerjanya.

Pertama, sebagai operator, perhatikan bahwa ini pada dasarnya adalah jalan pintas ke suatu fungsi (dengan dua argumen):

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

Itu bisa bermanfaat untuk diketahui untuk digunakan dalam mis apply. Perintah keluarga.

Kedua, Anda dapat memanipulasi rumus sebagai teks :

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

Ketiga, Anda dapat memanipulasinya sebagai daftar :

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

Akhirnya, ada beberapa trik yang membantu dengan formula (lihat help("formula")lebih lanjut):

myFormula <- Species ~ . 

Misalnya, versi di atas sama dengan versi asli, karena titik berarti "semua variabel belum digunakan." Ini terlihat pada data.frame yang Anda gunakan dalam panggilan model akhirnya, melihat variabel mana yang ada di data.frame tetapi tidak secara eksplisit disebutkan dalam rumus Anda, dan mengganti titik dengan variabel-variabel yang hilang.

Ari B. Friedman
sumber
Terima kasih atas jawaban @Ari B. Friedman tetapi baris terakhir agak ambigu di mana Anda mengatakan 'titik berarti "semua variabel belum digunakan"'. Jika Anda bisa mengilustrasikannya lebih lanjut.
Ankita
9
@Ankita, "belum digunakan" dalam konteks ini berarti tidak disebut. Di Species~., spesies adalah satu-satunya variabel yang telah digunakan. Oleh karena itu, ini tergantung pada setiap variabel lain dalam data.frame.
x4nd3r
Saya tidak mengerti myFormula <- Species ~ . . Kapan dot masih bisa diganti dengan variabel dari data.frame? Bisakah Anda memberikan contoh
srghma