Как мне создать функцию для выполнения линейных регрессий и записи выходных данных в Excel?

#r #function #dataframe #arguments #regression

#r #функция #фрейм данных #аргументы #регрессия

Вопрос:

Я пытаюсь написать функцию в R, которая принимает фрейм данных, создает модель, суммирует его, а затем записывает выходные данные в Excel. Аргументы, передаваемые в функцию, — это имя файла, которое я хочу, чтобы файл Excel имел, и переменные, на основе которых я буду создавать модель.

Вот код, с помощью которого я пытался это сделать:

 functionForRunningRegressionWritingExcel <- function(fileName, regressionName, dataFrame, y, xFactor, w, modelType) {
  
  regressionName <- lm(data = dataFrame, dataFrame[,y] ~ factor(dataFrame[, xFactor]) * dataFrame[, w], model = as.character(modelType))
  summary(regressionName)
  plot(regressionName)
  fileName <- tidy(regressionName)
  writexl::write_xlsx(fileName, "/Users/otakarkorinek/Documents/SOC/Regression Results/new_regression.xlsx")

  ggPredict(change_vs_week_before_stimulus_payments_on_case_rate_change,se=TRUE,interactive=TRUE)
  
} 
  

Однако по какой-то причине, когда я пытаюсь запустить функцию со следующими аргументами:

 functionForRunningRegressionWritingExcel("regression", "change_on_income", Affinity_County_Weekly.csv, "spend_all", "winner2016", w = "case_rate", "within")
  
  

Я получаю ошибку:

 Error in model.frame.default(formula = dataFrame[, y] ~ factor(dataFrame[,  : 
  invalid type (list) for variable 'dataFrame[, y]'
  

У вас есть какие-либо идеи, в чем может быть проблема и как ее исправить?

Комментарии:

1. Является Affinity_County_Weekly.csv a data.frame ? Является Affinity_County_Weekly.csv[, "winner2016"] числовым или символьным?

Ответ №1:

Вы можете создать объект формулы, используя переданную строку. Попробуйте использовать эту функцию.

 functionForRunningRegressionWritingExcel <- function(fileName, regressionName, dataFrame, y, xFactor, w, modelType) {
  
  regressionName <- lm(data = dataFrame, paste0(y, '~factor(', xFactor, ')*', w), model = modelType)
  summary(regressionName)
  plot(regressionName)
  fileName <- tidy(regressionName)
  writexl::write_xlsx(fileName, "/Users/otakarkorinek/Documents/SOC/Regression Results/new_regression.xlsx")
  ggPredict(change_vs_week_before_stimulus_payments_on_case_rate_change,se=TRUE,interactive=TRUE)
} 
  

Предполагая, Affinity_County_Weekly.csv что это имя фрейма данных, вы можете вызвать его как обычно с помощью

 functionForRunningRegressionWritingExcel("regression", "change_on_income", Affinity_County_Weekly.csv, "spend_all", "winner2016", w = "case_rate", "within")