У меня есть решение для вас относительно линейной регрессии. Незначительные изменения приведут к тому, что он будет работать для теста DW.
У вас есть в общей сложности 378 возможных пар: вы действительно хотите применить 378 регрессий?
Пример, который я предлагаю, основан на mtcars
head(mtcars)
Сначала вы вычисляете все 2 на 2 комбинации ваших столбцов, кроме тех, которые включают первый столбец (зависимая переменная)
combinations <- combn(colnames(mtcars)[-1], m = 2L, simplify = FALSE)
Вы l oop по этим комбинациям и выводите статистика производительности, например, rsquared
perf <- lapply(combinations, function(cols){
ols <- lm(
formula = as.formula(paste0("mpg ~ ", paste(cols, collapse = "+"))),
data = mtcars
)
summary(ols)$r.squared
})
names(perf) <- sapply(combinations, paste, collapse = "_")
perf[1:5]
$cyl_disp
[1] 0.7595658
$cyl_hp
[1] 0.7407084
$cyl_drat
[1] 0.7402482
$cyl_wt
[1] 0.8302274
$cyl_qsec
[1] 0.7373272
И вы переименовываете, чтобы получить, какие столбцы дали результат
Обновление
Теперь, если вы хотите получить все пары, независимо от order:
list_countries <- combn(c("France","Spain","Germany"), 2L, simplify = FALSE)
list_countries <- c(list_countries,
lapply(list_countries, function(l) rev(l))
)
list_countries
[[1]]
[1] "France" "Spain"
[[2]]
[1] "France" "Germany"
[[3]]
[1] "Spain" "Germany"
[[4]]
[1] "Spain" "France"
[[5]]
[1] "Germany" "France"
[[6]]
[1] "Germany" "Spain"
rev
- это базовая функция для обратного порядка вектора. Затем, если вы хотите применить одну как зависимую переменную, а другую как пояснительную, вы должны сделать
perf <- lapply(list_countries, function(cols){
ols <- lm(as.formula(paste(cols, collapse = "~")),
data = df)
)
summary(ols)$r.squared
})