Bagaimana cara memberi tahu R untuk menggunakan level tertentu sebagai referensi jika saya menggunakan variabel penjelas biner dalam regresi?
Ini hanya menggunakan beberapa level secara default.
lm(x ~ y + as.factor(b))
dengan b {0, 1, 2, 3, 4}
. Katakanlah saya ingin menggunakan 3 alih-alih nol yang digunakan oleh R.
r
regression
linear-regression
categorical-data
dummy-variable
Matt Bannert
sumber
sumber
b
Anda dapat menentukan urutan level menggunakanfactor(b, levels = c(3,1,2,4,5))
. Lakukan ini dalam langkah pemrosesan data di luarlm()
panggilan. Jawaban saya di bawah ini menggunakanrelevel()
fungsi tersebut sehingga Anda dapat membuat faktor dan kemudian menggeser tingkat referensi agar sesuai sesuai kebutuhan.Jawaban:
Lihat
relevel()
fungsinya. Berikut ini contohnya:Sekarang mengubah faktor
b
diDF
oleh penggunaanrelevel()
fungsi:Model tersebut memperkirakan tingkat referensi yang berbeda.
sumber
within
, tapidf$bR = relevel(df$b, ref=3)
.Orang lain telah menyebutkan
relevel
perintah yang merupakan solusi terbaik jika Anda ingin mengubah level dasar untuk semua analisis pada data Anda (atau bersedia untuk hidup dengan mengubah data).Jika Anda tidak ingin mengubah data (ini adalah perubahan satu kali, tetapi di masa mendatang Anda menginginkan perilaku default lagi), maka Anda dapat menggunakan kombinasi fungsi
C
(huruf besar catatan) untuk mengatur kontras dancontr.treatments
fungsi dengan argumen dasar untuk memilih level mana yang ingin Anda jadikan baseline.Sebagai contoh:
sumber
The
relevel()
perintah adalah metode singkat untuk pertanyaan Anda. Apa yang dilakukannya adalah menyusun ulang faktor sehingga apa pun yang menjadi tingkat referensi adalah yang pertama. Oleh karena itu, menyusun ulang tingkat faktor Anda juga akan memiliki efek yang sama tetapi memberi Anda lebih banyak kendali. Mungkin Anda ingin memiliki level 3,4,0,1,2. Dalam hal itu...Saya lebih suka metode ini karena lebih mudah bagi saya untuk melihat dalam kode saya tidak hanya apa referensinya tetapi juga posisi nilai-nilai lainnya (daripada harus melihat hasil untuk itu).
CATATAN: JANGAN menjadikannya faktor yang dipesan. Faktor dengan urutan tertentu dan faktor urutan bukanlah hal yang sama.
lm()
mungkin mulai berpikir Anda menginginkan kontras polinomial jika Anda melakukannya.sumber
Saya tahu ini adalah pertanyaan lama, tetapi saya memiliki masalah serupa dan menemukan bahwa:
melakukan apa yang Anda minta.
sumber
as.factor()
jika diperlukan, misalnya dengan menggunakan...+relevel(as.factor(mycol), ref = "myref")+...
Anda juga dapat memberi tag kolom secara manual dengan
contrasts
atribut, yang tampaknya diterapkan oleh fungsi regresi:sumber
Untuk mereka yang mencari versi dplyr / tidyverse. Membangun solusi Gavin Simpson:
sumber
relevel()
atauforcats::fct_relevel()
relevel
hanya bekerja dengan faktor-faktor.fct_relevel
hanya bekerja dengan faktor-faktor. Tidak ada perbedaan apapun diantara fungsinya kecuali namanya, AFAIK. Mengatakan "Jika variabel adalah faktor, Anda juga dapat menggunakanfct_relevel
" menyiratkan bahwa jika variabel tersebut bukan faktor yang dapat Anda gunakanrelevel
, tetapi itu tidak benar.