#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
цикл.