2013-06-29 10 views
6

Jest możliwe użycie skrót dla związku o wzorze w lm()skrótu lm() w R we wzorze

m <- matrix(rnorm(100), ncol=5) 
lm(m[,1] ~ m[,2:5] 

tutaj to być taki sam jak

lm(m[,1] ~ m[,2] + m[,3] + m[,4] + m[,5] 

ale w przypadku, gdy zmienne nie są na tym samym poziomie (przynajmniej to jest moje założenie na teraz) to nie działa i pojawia się błąd:

Error in model.frame.default(formula = hm[, 1] ~ hm[, 2:4], drop.unused.levels = TRUE) : 
    invalid type (list) for variable 'hm[, 2:4]' 

danych (hm):

 N cor.distance switches time 
1 50 0.04707842  2 0.003 
2 100 -0.10769441  2 0.004 
3 200 -0.01278359  2 0.004 
4 300 0.04229509  5 0.008 
5 500 -0.04490092  6 0.010 
6 1000 0.01939561  4 0.007 

Czy jest jakiś skrót nadal możliwe, aby uniknąć konieczności pisania długiej formuły?

Odpowiedz

9

Spróbuj lm(y ~ ., data) gdzie . oznacza „każdą inną kolumnę w data oprócz y.

m <- matrix(rnorm(100), ncol =5) 
m <- as.data.frame(m) 
names(m) <- paste("m", 1:5, sep="") 
lm(m1 ~., data=m) 

można przypisać m obejmować tylko kolumn jako predyktory

m <- m[ ,2:4] 
lm(m1 ~ ., data=m) 
+0

Naprawdę fajny skrót! – PascalVKooten

+0

Dzięki. Dodałem dodatkową (prawdopodobnie oczywistą) opcję, jeśli chcesz wybrać duży, ale właściwy podzbiór kolumn. Jeśli to odpowiada na twoje pytanie, rozważ oznaczenie go jako zaakceptowanego. – Hugh

+0

Zamierzałem, ale czekałem, aby zobaczyć, co inni wymyślą. – PascalVKooten

6

Jest jeszcze jeden skrót dla przypadków, gdy zmienna zależna znajduje się w pierwszej kolumnie:

data <- data.frame(y = rnorm(10), x1 = rnorm(10), x2 = rnorm(10)) 
lm(data) 
+0

Również bardzo ładne. – PascalVKooten

Powiązane problemy