Сделать кадр данных или ранг скорректированным R-квадрат - R - PullRequest
0 голосов
/ 02 ноября 2018

Этот вопрос в основном является продолжением того, что я задавал ранее: Как распечатать (скорректированный) R-квадрат модели регрессии?

Я хочу создать модель линейной регрессии для прогнозирования концентраций со 150 потенциальными предикторами. Я хочу выполнить пошаговую ручную процедуру продвижения вперед. Набор данных выглядит примерно так:

df = data.frame(
Site = c("A", "B", "C", "D"),
Concentration = c(2983, 9848, 2894, 8384),
Var1 = c(12, 23, 34, 45),
Var2 = c(23, 34, 45, 56))

Я использую следующий код для создания одномерной модели для каждого возможного предиктора и проверяю скорректированный R-квадрат.

for (j in names(df)){
model <- lm(Concentration ~ df[[j]], data = df)
print(j)
print(summary(model)$adj.r.squared)

[1] "site"
  r.squared adj.r.squared
1 0.02132635    -0.9573473

Тем не менее, очень много работы по проверке скорректированного R-квадрата для 150 переменных.

Можно ли создать кадр данных со всеми скорректированными значениями R-квадрата и каждым соответствующим именем переменной?

Или для ранжирования скорректированных значений R-квадрата, чтобы наивысшее значение было первым (и имя соответствующей переменной напечатано с ним)?

Мне очень любопытно услышать, возможно ли что-то подобное. Это очень помогло бы мне.

Заранее спасибо!

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете сохранить результат в матрице, а затем распечатать эту матрицу. Сначала вы создаете новую матрицу

adj.r.mat   <- matrix(, nrow = length(names(df)), 
                        ncol = 2)
               colnames(adj.r.mat) <- c("Name Var", "Adj.R")

тогда вы сохраните значение, которое вас интересует в этой матрице

for (j in 1:length(names(df))){
model <- lm(Concentration ~ df[[j]], data = df)
adj.r.mat[j,1] <- names(df)[j]
adj.r.mat[j,2] <- summary(model)$adj.r.squared
}

В конце концов вы печатаете его

print(adj.r.mat)

Если вам не нужны 2 первые переменные, вы можете начать цикл с 3.

for (j in 3:length(names(df))){
model <- lm(Concentration ~ df[[j]], data = df)
adj.r.mat[j,1] <- names(df)[j]
adj.r.mat[j,2] <- summary(model)$adj.r.squared
}

А затем исключите 2 первую строку при печати матрицы

print(adj.r.mat[-c(1,2),])
...