Использование "~ call" в R с переменными dynamic c - PullRequest
1 голос
/ 28 мая 2020

В настоящее время я работаю над регрессией и классификацией с помощью R.

Поэтому я использую формулу, подобную X ~ Y, чтобы делать прогнозы относительно X. Сейчас я пытаюсь использовать function внутри for-l oop, чтобы сделать несколько прогнозов о разных значениях на стороне X от тильды и постоянных значениях на стороне Y. Примерно так: X1 ~ Y X2 ~ Y X3 ~ Y

с X1, X2, X3 и Y, все являются столбцами данных (данные $ X1 <- a, data $ X2 <- b, data $ X3 <- c, data $ Y), если это так или иначе важно </em>

, как я могу динамически выбирать переменную внутри ~ -Expression? Я пробовал что-то подобное, но это не работает:

# referring to "iris" data set with columns (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width, Species)

getFormula <- function(variable){
  variable ~ Sepal.Length + Sepal.Width + Species
}

petal.length.formula <- getFormula(Petal.Length)
petal.width.formula <- getFormula(Petal.Width)

я получаю это:

petal.length.formula: variable ~ Sepal.Lenght + Sepal.Width + Species
petal.width.formula: variable ~ Sepal.Lenght + Sepal.Width + Species

, но я хочу добиться этого:

petal.length.formula: Petal.Length ~ Sepal.Lenght + Sepal.Width + Species
petal.width.formula: Petal.Width ~ Sepal.Lenght + Sepal.Width + Species

Так как у меня более 40 переменных на стороне Y и 10 переменных на стороне X, было бы очень сложно вводить каждую формулу вручную. Может ли кто-нибудь помочь мне с этой проблемой?

Я не смог найти аналогичный вопрос, так как мне трудно определить ключевые слова, которые я должен использовать, чтобы найти что-нибудь об этом.

Если возможно , Я бы предпочел не использовать какую-либо дополнительную библиотеку, так как я новичок в R и хочу сначала выяснить основы механики R.

Поскольку engli sh не является моим первым языком, Я надеюсь, что вы понимаете мой вопрос, и я, конечно, с радостью объясню, если это необходимо. Заранее благодарим за уделенное время!

1 Ответ

0 голосов
/ 30 мая 2020

Вы можете попробовать это, вам нужно передать символ переменной. Это намного проще, и если у вас есть 10 переменных на стороне X, вы можете легко перебирать их:

getFormula <- function(variable){
  as.formula(paste(variable,"~ Sepal.Length + Sepal.Width + Species"))
}

petal.length.formula <- getFormula("Petal.Length")
petal.width.formula <- getFormula("Petal.Width")

lm(petal.length.formula,data=iris)
Call:
lm(formula = petal.length.formula, data = iris)

Coefficients:
      (Intercept)       Sepal.Length        Sepal.Width  Speciesversicolor  
         -1.63430            0.64631           -0.04058            2.17023  
 Speciesvirginica  
          3.04911 

Вы также можете попробовать переформулировать, как это было предложено @BenBolker и @MrFlick:

getFormula <- function(variable){
  reformulate(c("Sepal.Length","Sepal.Width","Species"), 
response = variable, intercept = TRUE)
}

lm(getFormula("Petal.Length"),data=iris)

Call:
lm(formula = getFormula("Petal.Length"), data = iris)

Coefficients:
      (Intercept)       Sepal.Length        Sepal.Width  Speciesversicolor  
         -1.63430            0.64631           -0.04058            2.17023  
 Speciesvirginica  
          3.04911 
...