Я хочу написать функцию, которая будет принимать модель 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
, чтобы построить правильную модель?