9

したがって、私のデータセットは15個の変数で構成されており、そのうちの1つ(性別)には2つのレベルしかありません。ダミー変数として使いたいのですが、レベルは1と2です。どうすればいいですか?レベル0と1にしたいのですが、Rでこれを管理する方法がわかりません。

4

3 に答える 3

24

数式インターフェイスを備えた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]選択します。1dummy[,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ですか?

于 2012-10-11T15:47:56.853 に答える
9

これを入力してください

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)に変更する必要はありません。結果は、上記の例と同じになります。

于 2012-10-11T15:47:07.513 に答える
1

上記の多くの人が示唆しているように、それを要因に変えてください。

本当に性別変数をダミーコード化したい場合は、これを検討してください

set.seed(100)
gender = rbinom(100,1,0.5)+1
gender_dummy = gender-1
于 2015-04-15T12:57:28.800 に答える