2013-09-16 2 views
-1

У меня есть R вопрос здесьдинамически генерируя имя фактора в функции ой в R

мы «нормальные» lm подходим довольно часто:

model <- lm(y~0+x1+x2+x3, data=d) 

Однако то, что я пытаюсь сделать, это выберите имена x1, x2, динамически в сценарии R. в зависимости от того, какой y я нахожусь фитинга, функция может выполняться в виде

model<-lm(y2~0+x10+x21+x33, data=d) 

model<-lm(y3~0+x41+x15+x8, data=d) 

и т.д. Пожалуйста, обратите внимание, что y2, y3 ... последовательно выбираются из списка. Существует фактически функция

factorOfInterest <-getFactors(y) 

Кто-нибудь знает, как запрограммировать R-скрипт как это? Или, есть ли лучший способ построить проблему?

+3

Создайте формулу, используя 'paste' и' as.formula'. Обратите внимание, что если RHS равно, вы можете подобрать модели для нескольких 'yi' сразу, передав их как матрицу в' lm'. – Roland

+0

'? Update.formula' – dardisco

ответ

0

Скажите ваши данные выглядит следующим образом:

set.seed(1) 
df1 <- data.frame(x1=rnorm(5), 
        x2=rnorm(5), 
        x3=rnorm(5), 
        y1=rnorm(5), 
        y2=rnorm(5) 
       ) 

Ниже будет проходить через все комбинаций x с, 7 в общей сложности:

### get columns named x 
c1 <- colnames(df1)[grepl("x",colnames(df1))] 
### make matrix of all combinations 
library(combinat) 
c2 <- combinat::hcube(rep(2, length(c1)))-1 
### remove top row (represents intercept-only model) 
c2 <- c2[-1, ] 
### list to store results 
l1 <- as.list(vector(length=nrow(c2))) 
### use matrix for y values when fitting models 
lhs1 <- cbind(df1$y1, df1$y2) 
for (i in 1:nrow(c2)){ 
### subset of x variables 
    rhs1 <- c1[as.logical(c2[i, ])] 
    rhs1 <- paste0(rhs1, collapse="+") 
    f1 <- paste("lhs1", rhs1, sep="~") 
    f1 <- as.formula(f1) 
    l1[[i]] <- lm(f1) 
} 

(я уверен, что более быстрые методы доступны для больших наборов) ...

Смежные вопросы