2016-03-18 28 views
0

當建立一個模型矩陣,我注意到,與具有2倍以上的值的變量打交道時,模型矩陣似乎隨機地選擇爲列要使用的變量:限定在model.matrix控制值

在示例1:

diet <- factor(c('high','high','control','control','low','low')) 
sex <- factor(c("f","f","m","f","m","m")) 
model.matrix(~ diet + sex) 
    (Intercept) diethigh dietlow sexm 
1   1  1  0 0 
2   1  1  0 0 
3   1  0  0 1 
4   1  0  0 0 
5   1  0  1 1 
6   1  0  1 1 

飲食=對照,並且性別= f被推斷。在飲食的情況下,控制被忽略了,所以我對矩陣感到滿意。

在實施例2:

diet <- factor(c('high','high','med','med','low','low')) 
sex <- factor(c("f","f","m","f","m","m")) 
model.matrix(~ diet + sex) 
    (Intercept) dietlow dietmed sexm 
1   1  0  0 0 
2   1  0  0 0 
3   1  0  1 1 
4   1  0  1 0 
5   1  1  0 1 
6   1  1  0 1 

飲食=高是缺少的變量。現在我知道這可能是迂腐的,因爲我知道R不關心。但有指定哪些變量應該被排除在外(在這種情況下,我想減肥=中到是控制權,因此離開了)

+1

我發現網上的東西就在這裏再平層:http://genomicsclass.github.io/book/pages/expressing_design_formula.html這是正確的方式來做到這一點? – kmace

+0

是的,這將是我的方法 – Raad

+1

請參閱'對比','C'等。請注意'基本'參數。另請參閱'model.matrix'的'contrasts.arg'可選參數。 –

回答

3

選擇不是隨意的方式。它留下了第一層的因素。在你的例子中,觀察

# from example 1 
levels(factor(c('high','high','control','control','low','low'))) 
# [1] "control" "high" "low" 

# from example 2 
levels(factor(c('high','high','med','med','low','low'))) 
# [1] "high" "low" "med" 

默認情況下,它們按字母順序排序。所以在第一種情況下,當在第二種情況下使用「高」作爲參考時,「控制」用作參考。如果你有相同的水平是這兩個因素,這不會是一個問題。您可以通過將因素設置爲在創建因子時具有相同級別的明確性,或者可以使用relevel()命令來調整該因子。例如

diet <- relevel(diet,"med") 
model.matrix(~ diet + sex) 

另外,請記住它們不是「被遺漏」的;默認的對比度是參考水平,所以參考水平在截獲它們。如果擬合模型,而不攔截時,都在那裏

model.matrix(~ diet -1) 
# dietmed diethigh dietlow 
# 1  0  1  0 
# 2  0  1  0 
# 3  1  0  0 
# 4  1  0  0 
# 5  0  0  1 
# 6  0  0  1 
1
sex <- factor(c("f","f","m","f","m","m")) 
diet <- factor(c('high','high','control','control','low','low')) 
diet <- relevel(diet, "high") 
model.matrix(~ diet + sex) 

#  (Intercept) dietcontrol dietlow sexm 
# 1   1   0  0 0 
# 2   1   0  0 0 
# 3   1   1  0 1 
# 4   1   1  0 0 
# 5   1   0  1 1 
# 6   1   0  1 1