Misalkan saya memiliki variabel respons dan data yang berisi tiga kovariat (sebagai contoh mainan):
y = c(1,4,6)
d = data.frame(x1 = c(4,-1,3), x2 = c(3,9,8), x3 = c(4,-4,-2))
Saya ingin menyesuaikan regresi linier dengan data:
fit = lm(y ~ d$x1 + d$x2 + d$y2)
Adakah cara untuk menuliskan rumusnya, sehingga saya tidak perlu menuliskan setiap kovariat? Misalnya, seperti
fit = lm(y ~ d)
(Saya ingin setiap variabel dalam bingkai data menjadi kovariat.) Saya bertanya karena saya sebenarnya memiliki 50 variabel dalam bingkai data saya, jadi saya ingin menghindari penulisan x1 + x2 + x3 + etc
.
Jawaban:
Ada pengenal khusus yang dapat digunakan seseorang dalam rumus yang berarti semua variabel, itu adalah
.
pengenal.Anda juga dapat melakukan hal-hal seperti ini, untuk menggunakan semua variabel kecuali satu (dalam hal ini x3 dikecualikan):
Secara teknis,
.
berarti semua variabel belum disebutkan dalam rumus . Sebagai contohdi mana
.
hanya akan mereferensikanx3
sebagaix1
danx2
sudah ada dalam rumus.sumber
.
teknis berarti semua variabeldata
belum ada dalam rumus .data
adalah daftar variabel dalam rumus yang dicari dari daftar itu, maka ya. Bingkai data, daftar, atau lingkungan adalah opsi yang dapat diterima untukdata
argumen tersebut. Jika bukan itu yang Anda maksud, Anda perlu mengembangkan lebih banyak.lm(d[[1]] ~ d[[3]] + ., data = d)
names
daftar; mengatakan Anda memilikill <- list(y = rnorm(10), x = rnorm(10), z = rnorm(10), zz = runif(10))
, maka karya-karya berikut:lm(y ~ x + ., data = ll)
. Jadi tidak banyak alasan untuk memiliki data Anda seperti ini kecuali sudah ada daftar, tetapi berfungsi. Persyaratan bahwa elemen rumus memiliki panjang yang sama menempatkan beberapa batasan pada apa yang Anda miliki dalam daftar. Objek yang lebih kompleks mungkin membutuhkan kode untuk mengekstrak elemen yang Anda inginkan; jikad[[1]]
kerangka data / matriks Anda memerlukan kode untuk membuatnya berfungsiPendekatan yang sedikit berbeda adalah membuat rumus Anda dari string. Di
formula
halaman bantuan Anda akan menemukan contoh berikut:Kemudian jika Anda melihat rumus yang dihasilkan, Anda akan mendapatkan:
sumber
Ya tentu saja, cukup tambahkan respons
y
sebagai kolom pertama di dataframe dan panggillm()
:Juga, informasi saya tentang R menunjukkan bahwa penugasan dengan
<-
direkomendasikan=
.sumber
foo(bar <- 1:10)
pekerjaan (danbar
dibuat) tetapifoo(bar = 1:10)
akan gagal karenabar
bukan merupakan argumenfoo
dan tidak akan membuatbar
juga.x3
NA
?Perpanjangan metode juba adalah menggunakan
reformulate
, fungsi yang secara eksplisit dirancang untuk tugas semacam itu.Untuk contoh di OP, solusi termudah di sini adalah
atau
Perhatikan bahwa menambahkan variabel dependen ke data.frame di
d <- cbind(y, d)
lebih disukai tidak hanya karena memungkinkan untuk digunakanreformulate
, tetapi juga karena memungkinkan penggunaanlm
objek di masa mendatang dalam fungsi sepertipredict
.sumber
Saya membangun solusi ini,
reformulate
tidak peduli jika nama variabel memiliki spasi kosong.``
sumber
Anda dapat memeriksa paket
leaps
dan khususnya fungsiregsubsets()
fungsi untuk pemilihan model. Seperti yang tertera dalam dokumentasi:Pemilihan model dengan pencarian lengkap, maju atau mundur bertahap, atau penggantian berurutan
sumber