Является ли функция R или l oop для составления матрицы результатов Дурбина-Ватсона или Линейной регрессии каждой пары столбцов? - PullRequest
0 голосов
/ 12 апреля 2020

У меня вопрос по кодированию R. Я хочу сделать l oop для вычисления Дурбина Уотсона для каждой возможной пары столбцов в наборе данных. Я получил 28 столбцов.

1 Ответ

1 голос
/ 12 апреля 2020

У меня есть решение для вас относительно линейной регрессии. Незначительные изменения приведут к тому, что он будет работать для теста 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
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...