Verilerimin yalnızca bir alt kümesinde lm () çalıştırmaya çalışıyorum ve bir sorunla karşılaşıyorum.
dt = data.table(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100), x3 = as.factor(c(rep('men',50), rep('women',50)))) # sample data
lm( y ~ ., dt) # Use all x: Works
lm( y ~ ., dt[x3 == 'men']) # Use all x, limit to men: doesn't work (as expected)
Yukarıdakiler işe yaramıyor çünkü veri kümesinin artık sadece erkekleri var ve bu nedenle cinsiyet değişkeni x3'ü modele dahil edemeyiz. FAKAT...
lm( y ~ . -x3, dt[x3 == 'men']) # Exclude x3, limit to men: STILL doesn't work
lm( y ~ x1 + x2, dt[x3 == 'men']) # Exclude x3, with different notation: works great
Bu formülde "eksi işareti" gösterimi ile ilgili bir sorun mu? Lütfen tavsiye. Not: Elbette farklı bir şekilde yapabilirim; örneğin, değişkenleri lm () içine koymadan önce hariç tutabilirim. Ama bu konuda bir ders veriyorum ve öğrencileri formülde eksi işareti kullanarak değişkeni hariç tutabileceklerini söylemiş olmakla karıştırmak istemiyorum.
.
basitleştirilmiş bir formül elde etmek için "genişletmek" çalışıyordu terms(y ~ . -x3, data=dt, simplify=TRUE)
ama garip bir şekilde hala x3
lm
neg.out=
seçeneği ilişkili olabilir. S yardım dosyalarından terms
, nerede neg.out=
uygulanır: "-" işareti ile girilen terimlerin tedavisini kontrol eden bayrak. DOĞRU ise, koşullar iptal için kontrol edilir ve aksi takdirde yok sayılır. YANLIŞ ise, negatif terimler korunur (negatif sıra ile).
lm
çağırır model.matrix
. Çok başlayarak başta lm
ifade aşağıdaki oluşturur ve değerlendirir: mf <- stats::model.frame( y ~ . -x3, dt[x3=="men"], drop.unused.levels=TRUE )
. Bu x3
tek seviyeli bir faktör haline gelir. model.matrix()
daha sonra mf
orijinal veriler değil çağrılır , bu da gözlemlediğimiz hataya neden olur.
model.matrix(y ~ . - x3, data = dt[x3 == "men"])
vemodel.matrix(y ~ x1 + x2, data = dt[x3 == "men"])
(işlm
görüşmelerimodel.matrix
içten). Her iki model matrisi arasındaki tek fark"contrasts"
(hala içermekte olanx3
) ve daha sonralm
rutin içinde alınan bir özelliktir ve muhtemelen gördüğünüz hataya neden olur. Benim düşüncem, sorununmodel.matrix
terimleri kaldırırken tasarım matrisini nasıl oluşturduğu ve sakladığı ile ilgili olmasıdır.