R de 100 değişkenli lineer model formülü yazma


22

R'de 100 parametresi olan bir model üzerinde doğrusal bir regresyon oluşturmak için R'de kolay bir yol var mı? Diyelim ki 10 değerinde bir Y vektörümüz ve 10 sütun ve 100 satırlık bir X veri karemiz var. Matematiksel gösterimde yazarım Y = X[[1]] + X[[2]] + ... + X[[100]]. R sözdiziminde benzer bir şeyi nasıl yazarım?


1
100 ya da 1000 var mı? Ayrıca, normalde sütunların değişkenleri ve satırların da gözlemleri olmasını istersiniz (burada ters görünüyor)
Makro

100 ekstra 0 bir yazım hatası oldu
Christian

2
Gerçekten mi? Bunu yapmak istediğinden emin misin? Tahmin edicilerin lineer kombinasyonları arasındaki aşırı uyum ve korelasyondan endişe ediyorum. Sadece bu değil, 100 prediktörle değil, sadece 10 gözlemle, değerine sahipsiniz ve doğrusal regresyon hiç işe yaramayacak. p>n
Aaron - Monica,

Yanıtlar:


29

Bunu dene

df<-data.frame(y=rnorm(10),x1=rnorm(10),x2=rnorm(10))
lm(y~.,df)

4
Ve eğer tüm ikinci dereceden etkileşimleri söylemek isterseniz, yazabilirsiniz y ~ . + .^2. Ve bunun gibi.
Lutz Prechelt

3
Ve sadece ikinci dereceden etkileşimlerden bazılarını istiyorsanız, gibi bir şey y ~ . + .:x1size her değişkenin (hariç x1) ile olan etkileşimlerini sağlayacaktır x1. Ve bunun gibi; kaptın bu işi.
Lutz Prechelt

21

Harika cevaplar!

Varsayılan olarak, bir çağrı formulayapmayı çağırmak data.frame, ilk sütunu diğerlerine germek için ek bir formül oluşturduğunu da eklerdim.

Yani @ danas.zuokas cevabı durumunda bile yapabilirsiniz

lm(df)

hangi doğru yorumlanır.


Yine de, etkileşim terimlerinde karıştırmak istiyorsanız, bu cevap işe yaramaz. Seninkiler (+1).
gui11aume

6
ROperatörlerin çoğunun ne kadar aşırı yüklendiğine sürekli şaşırdım :)
Makro

19

YnXn×pp=100

Z = as.data.frame(cbind(Y,X))
lm(Y ~ .,data=Z)

Prediktör olarak dahil etmek istemediğiniz başka sütunlar varsa, Xbu numarayı kullanmadan önce bunları çıkarmak veya -model formülünü hariç tutmak için kullanmanız gerekir. Örneğin, 67. öngörücüyü (karşılık gelen ada sahip x67) hariç tutmak istiyorsanız, yazabilirsiniz

lm(Y ~ .-x67,data=Z)

Ayrıca, etkileşimleri vb. Dahil etmek istiyorsanız, bunları manuel olarak eklemeniz gerekir (örneğin).

lm(Y ~ .+X[,1]*X[,2],data=Z)

veya sütun olarak girildiklerinden emin olun X.


19

Ayrıca formulave pasteişlevlerinin bir birleşimini kullanabilirsiniz .

Kurulum verileri : Let biz belirleyicisi değişkenleri içeren bir data.frame var hayal var x1etmek x100ve bizim bağımlı değişken y, aynı zamanda bir sıkıntı değişken olduğunu asdfasdf. Ayrıca, yordayıcı değişkenleri, data.frame dosyasında bitişik olmayacak şekilde düzenlenir.

Data <- data.frame(matrix(rnorm(102 * 200), ncol=102))
names(Data) <- c(paste("x", 1:50, sep=""), 
    "asdfasdf", "y", paste("x", 51:100, sep=""))

Ayrıca, tahmin değişkenlerinin adlarını içeren bir dize bulunduğunu hayal edin. Bu durumda, bu pasteişlev kullanılarak kolayca oluşturulabilir , ancak diğer durumlarda grepveya bu dizeyi almak için başka bir yaklaşım kullanılabilir.

PredictorVariables <- paste("x", 1:100, sep="")

Yaklaşım uygulayın : Daha sonra aşağıdaki gibi bir formül oluşturabiliriz:

Formula <- formula(paste("y ~ ", 
     paste(PredictorVariables, collapse=" + ")))
lm(Formula, Data)
  • collapsebağımsız değişken uçlar +belirleyici değişkenler arasında
  • formuladizeyi lmişlev için uygun bir sınıf formül nesnesine dönüştürür .

Daha genel olarak, bir yordayıcı değişkenlerini değişken isimlerinin vektörü olarak vermek istediğimde, aşağıdaki işlevi oldukça düzenli kullanıyorum.

regression <- function(dv, ivs, data) {
    # run a linear model with text arguments for dv and ivs
    iv_string <- paste(ivs, collapse=" + ")
    regression_formula <- as.formula(paste(dv, iv_string, sep=" ~ "))
    lm(regression_formula, data)

}

Örneğin,

regression("y", PredictorVariables, Data)

2
+1. Bu tekniği her zaman kullanırım. Ancak, zaman zaman, formülün değişkende saklanması sorunlara neden olur. Aramadan önce formülü değerlendirmek için bkz. Stackoverflow.com/a/7668846/210673 . do.calllm
Aaron - Monica,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.