подгонка моделей линейной регрессии с различными предикторами с использованием циклов

#r #loops #vector #regression #linear-regression

Вопрос:

Я хочу соответствовать регрессионным моделям, используя одновременно одну переменную-предиктор. В общей сложности у меня есть 7 предикторов и 1 переменная ответа. Я хочу написать фрагмент кода, который выбирает переменную-предиктор из фрейма данных и соответствует модели. Я бы также хотел извлечь коэффициент регрессии( не перехват) и его знак и сохранить их в 2 векторах. Вот мой код-

 for (x in (1:7))
{
  
fit <- lm(distance ~ FAA_unique_with_duration_filtered[x] , data=FAA_unique_with_duration_filtered)
coeff_values<-summary(fit)$coefficients[,1]
coeff_value<-coeff_values[2]
append(coeff_value_vector,coeff_value , after = length(coeff_value_vector))
append(RCs_sign_vector ,sign(coeff_values[2]) , after = length(RCs_sign_vector))
}
 

Здесь x в будет использовать первый столбец , затем 2-й и так далее. Однако я получаю следующую ошибку.

Ошибка в model.frame.default(формула = расстояние ~ FAA_unique_with_duration_filtered[x], : недопустимый тип (список) для переменной ‘FAA_unique_with_duration_filtered[x]’

Есть ли способ сделать это с помощью циклов?

Ответ №1:

На самом деле для этого вам не нужны петли.

Предположим, мы хотим регрессировать y1, 5-й столбец встроенного набора данных anscombe, отдельно по каждому из первых 4 столбцов.

Затем:

 a <- anscombe
reg <- function(i) coef(lm(y1 ~., a[c(5, i)]))[[2]] # use lm
coefs <- sapply(1:4, reg)
signs <- sign(coefs)

# or

a <- anscombe
reg <- function(i) cov(a$y1, a[[i]]) / var(a[[i]]) # use formula for slope
coefs <- sapply(1:4, reg)
signs <- sign(coefs)
 

Поочередно следующее, где reg является одним из приведенных выше определений reg.

 a <- anscombe
coefs <- numeric(4)
for(i in 1:4) coefs[i] <- reg(i)
signs <- sign(coefs)
 

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

1. В последнем варианте используется for цикл.