формула lm с именами переменных в ней - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу написать функцию, которая будет принимать модель lm, попытаться добавить некоторую функцию и проверить ее статистическую значимость.Я рассмотрел код следующим образом:

library(rlang)
library(tidyverse)
dataset <- data.frame(y = rnorm(100, 2, 3),
                      x1 = rnorm(100, 0, 4),
                      x2 = rnorm(100, 2, 1),
                      x3 = rnorm(100, 9, 1))

model1 <- lm(y ~ ., data = dataset)

dataset2 <- dataset %>% 
  mutate(x10 = rnorm(100, 20, 9),
         x11 = rnorm(100, 3, 3))

test_var <- function(data, var, model){
  y_name <- names(model$model)[1]

  dataset_new <- data %>% 
    select_at(vars(y_name,
                   str_remove_all(labels(model), '`'),
                   var))

  model_new <- lm(y_name ~ ., data = dataset_new)  
  return(summary(model_new))
}

Как вы можете заметить, чтобы создать новую модель из доступного набора данных, мне нужно указать, какая переменная должна быть зависимой переменной.Однако я не знаю этого названия напрямую, мне просто нужно вытащить его из оригинальной модели.Так что я сделал это в функции выше, но это приводит к ошибке:

Ошибка в model.frame.default (формула = y_name ~., Data = dataset_new,: переменные длины отличаются (найдено для'y')

Поправьте меня, если я ошибаюсь, но я считаю, что это связано с тем, что y_name является строкой, а не символом. Поэтому я попробовал следующие издания:

test_var <- function(data, var, model){
  y_name <- sym(names(model$model)[1])

  dataset_new <- data %>% 
    select_at(vars(!!y_name,
                   str_remove_all(labels(model), '`'),
                   var))

  model_new <- lm(eval(y_name) ~ ., data = dataset_new)  
  return(summary(model_new))
}

Хотя это, кажется, работает, получающаяся модель идеально подходит, поскольку y рассматривается не только как зависимая переменная, но и как одна из функций. Указание формулы с помощью eval(y_name) ~ . - eval(y_name) здесь не помогаетИтак, мой вопрос: как мне передать имя зависимой переменной в формулу lm, чтобы построить правильную модель?

1 Ответ

0 голосов
/ 18 февраля 2019

Поскольку dataset_new содержит зависимую переменную в первом столбце, фактически вы можете использовать просто

lm(dataset_new)
...