R Как передать список имен переменных вместе в функцию

#r #regression

#r #регрессия

Вопрос:

Я пытаюсь построить линейную регрессию с сотнями терминов взаимодействия. Теперь я вручную ввожу их в уравнение.

 model lt;- lm(Y ~ A   B   C   A*X1   A*X2   A*X3 ... A*X100   B*X1   B*X2   B*X3... B*X100, data)  

есть ли способ кодировать это более эффективно? Я думаю о чем-то вроде:

 Group lt;- X1   X2   X3  ...   X99   X100 model lt;- lm(Y~ A   B   C   A*Group   B*Group)  

Возможно ли это достичь в R с помощью каких-либо пакетов или функций?

Ответ №1:

Вы могли бы попробовать:

 xs lt;- paste(paste("X", 1:100, sep=""),collapse=" ") form1 lt;- as.formula(sprintf("Y~ C (A B)*(%s)",xs)) model lt;- lm(form1) form1  Y ~ C   (A   B) * (X1   X2   X3   X4   X5   X6   X7   X8   X9     X10   X11   X12   X13   X14   X15   X16   X17   X18   X19     X20   X21   X22   X23   X24   X25   X26   X27   X28   X29     X30   X31   X32   X33   X34   X35   X36   X37   X38   X39     X40   X41   X42   X43   X44   X45   X46   X47   X48   X49     X50   X51   X52   X53   X54   X55   X56   X57   X58   X59     X60   X61   X62   X63   X64   X65   X66   X67   X68   X69     X70   X71   X72   X73   X74   X75   X76   X77   X78   X79     X80   X81   X82   X83   X84   X85   X86   X87   X88   X89     X90   X91   X92   X93   X94   X95   X96   X97   X98   X99     X100)  

Первая строка строит X1 X2 ... X100 деталь. Вторая строка создает формулу с A , B а C основные эффекты с A и B пересекаются с каждым X . as.formula превратит строку в формулу.

Ответ №2:

Рассмотрим reformulate , построив вектор переменных правой части, а затем передав его в качестве первого аргумента:

 rhs_vars lt;- c(  "A", "B", "C",   paste0("A*X", 1:100),  paste0("B*X", 1:100) )   model lt;- lm(reformulate(rhs_vars, "Y"), data)  

Ответ №3:

Мы можем использовать комбинацию paste0 и reformulate :

 Group lt;- paste0("X", 1:100) rhs_expandedlt;-c(paste0("A*", Group), paste0("B*", Group)) lm_formulalt;-reformulate(response = 'Y', termlabels = c('A', 'B', 'C', rhs_expanded))  lm(formula = lm_formula, data)  

См lm_formula . Объект, созданный reformulate :

 lm_formula  Y ~ A   B   C   A * X1   A * X2   A * X3   A * X4   A * X5     A * X6   A * X7   A * X8   A * X9   A * X10   A * X11   A *   X12   A * X13   A * X14   A * X15   A * X16   A * X17   A *   X18   A * X19   A * X20   A * X21   A * X22   A * X23   A *   X24   A * X25   A * X26   A * X27   A * X28   A * X29   A *   X30   A * X31   A * X32   A * X33   A * X34   A * X35   A *   X36   A * X37   A * X38   A * X39   A * X40   A * X41   A *   X42   A * X43   A * X44   A * X45   A * X46   A * X47   A *   X48   A * X49   A * X50   A * X51   A * X52   A * X53   A *   X54   A * X55   A * X56   A * X57   A * X58   A * X59   A *   X60   A * X61   A * X62   A * X63   A * X64   A * X65   A *   X66   A * X67   A * X68   A * X69   A * X70   A * X71   A *   X72   A * X73   A * X74   A * X75   A * X76   A * X77   A *   X78   A * X79   A * X80   A * X81   A * X82   A * X83   A *   X84   A * X85   A * X86   A * X87   A * X88   A * X89   A *   X90   A * X91   A * X92   A * X93   A * X94   A * X95   A *   X96   A * X97   A * X98   A * X99   A * X100   B * X1   B *   X2   B * X3   B * X4   B * X5   B * X6   B * X7   B * X8     B * X9   B * X10   B * X11   B * X12   B * X13   B * X14     B * X15   B * X16   B * X17   B * X18   B * X19   B * X20     B * X21   B * X22   B * X23   B * X24   B * X25   B * X26     B * X27   B * X28   B * X29   B * X30   B * X31   B * X32     B * X33   B * X34   B * X35   B * X36   B * X37   B * X38     B * X39   B * X40   B * X41   B * X42   B * X43   B * X44     B * X45   B * X46   B * X47   B * X48   B * X49   B * X50     B * X51   B * X52   B * X53   B * X54   B * X55   B * X56     B * X57   B * X58   B * X59   B * X60   B * X61   B * X62     B * X63   B * X64   B * X65   B * X66   B * X67   B * X68     B * X69   B * X70   B * X71   B * X72   B * X73   B * X74     B * X75   B * X76   B * X77   B * X78   B * X79   B * X80     B * X81   B * X82   B * X83   B * X84   B * X85   B * X86     B * X87   B * X88   B * X89   B * X90   B * X91   B * X92     B * X93   B * X94   B * X95   B * X96   B * X97   B * X98     B * X99   B * X100