したがって、私のデータセットは15個の変数で構成されており、そのうちの1つ(性別)には2つのレベルしかありません。ダミー変数として使いたいのですが、レベルは1と2です。どうすればいいですか?レベル0と1にしたいのですが、Rでこれを管理する方法がわかりません。
3 に答える
数式インターフェイスを備えたRのモデリングツールのほとんどでは、ダミー変数を作成する必要はありません。数式を処理および解釈する基になるコードがこれを行います。他の理由でダミー変数が必要な場合は、いくつかのオプションがあります。最も簡単な(IMHO)は使用することmodel.matrix()
です:
set.seed(1)
dat <- data.frame(sex = sample(c("male","female"), 10, replace = TRUE))
model.matrix( ~ sex - 1, data = dat)
これは次のようになります。
> dummy <- model.matrix( ~ sex - 1, data = dat)
> dummy
sexfemale sexmale
1 0 1
2 0 1
3 1 0
4 1 0
5 0 1
6 1 0
7 1 0
8 1 0
9 1 0
10 0 1
attr(,"assign")
[1] 1 1
attr(,"contrasts")
attr(,"contrasts")$sex
[1] "contr.treatment"
> dummy[,1]
1 2 3 4 5 6 7 8 9 10
0 0 1 1 0 1 1 1 1 0
のいずれかの列をdummy
数値ダミー変数として使用できます。1
ベースレベルにしたい列を選択します。女性クラスと男性クラスを表すものとしてdummy[,1]
選択します。1
dummy[,2]
カテゴリオブジェクトとして解釈する場合は、これを要素としてキャストします。
> factor(dummy[, 1])
1 2 3 4 5 6 7 8 9 10
0 0 1 1 0 1 1 1 1 0
Levels: 0 1
しかし、それは要因の目的を打ち負かしています。また何0
ですか?
これを入力してください
set.seed(001) # generating some data
sex <- factor(sample(1:2, 10, replace=TRUE)) # this is what you have
[1] 1 1 2 2 1 2 2 2 2 1
Levels: 1 2
sex<-factor(ifelse(as.numeric(sex)==2, 1,0)) # this is what you want
sex
[1] 0 0 1 1 0 1 1 1 1 0
Levels: 0 1
ラベルを0=男性、1 =女性にしたい場合は、...
sex<-factor(ifelse(as.numeric(sex)==2, 1,0), labels=c('M', 'F'))
sex # this is what you want
[1] M M F F M F F F F M
Levels: M F
実際には、を使用してモデルを推定するためにダミー変数を作成する必要はありません。次lm
の例を見てみましょう。
set.seed(001) # Generating some data
N <- 100
x <- rnorm(N, 50, 20)
y <- 20 + 3.5*x + rnorm(N)
sex <- factor(sample(1:2, N, replace=TRUE))
# Estimating the linear model
lm(y ~ x + sex) # using the first category as the baseline (this means sex==1)
Call:
lm(formula = y ~ x + sex)
Coefficients:
(Intercept) x sex2
19.97815 3.49994 -0.02719
# renaming the categories and labelling them
sex<-factor(ifelse(as.numeric(sex)==2, 1,0), labels=c('M', 'F'))
lm(y ~ x + sex) # the same results, baseline is 'Male'
Call:
lm(formula = y ~ x + sex)
Coefficients:
(Intercept) x sexF
19.97815 3.49994 -0.02719
Rがダミーをうまく処理していることがわかるように、factor
変数として数式に渡すだけで、残りはRが自動的に処理します。
ちなみに、カテゴリをc(2,1)からc(0,1)に変更する必要はありません。結果は、上記の例と同じになります。
上記の多くの人が示唆しているように、それを要因に変えてください。
本当に性別変数をダミーコード化したい場合は、これを検討してください
set.seed(100)
gender = rbinom(100,1,0.5)+1
gender_dummy = gender-1