Выполнение линейных регрессий с использованием столбцов двух матриц в R - PullRequest
0 голосов
/ 21 января 2019

У меня есть две большие матрицы с одинаковыми размерами, например ::1001*

#dummy matrices
A <- matrix(c(1:3288),nrow=12) 
B <- matrix(c(3289:6576),nrow=12)

Для каждого столбца я хотел бы запустить линейную регрессию между двумя матрицами (A и B) и, если возможно, я хотел бы получить вывод lm в кадр данных, например, для регрессии каждого столбца я хочу знать lm r ^ 2, наклон, точку пересечения и т. д.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 22 января 2019

Предполагая, что вы поместите регрессию между любыми двумя комбинациями столбцов, это может быть решением.Имейте в виду, что в зависимости от того, что вам в конечном итоге понадобится в результирующем файле data.frame, код будет меняться.

A <- matrix(c(1:3288),nrow=12) 
B <- matrix(c(3289:6576),nrow=12)


library(broom)
library(dplyr)

results <- NULL

for (i in 1:ncol(A)){
  for (j in 1:ncol(B)){
    model_<-lm(A[,i]~B[,j])

    results<-bind_rows(results,
                       bind_cols(columnx = i, 
                                 columny = j,
                                 glance(model_),
                                 intercept=model_$coefficients[1],
                                 slope=model_$coefficients[2]
                       )
    )
  }
}

Если вам понадобится только парная регрессия в виде столбца 1 в A, будет установлен столбец 1 в B, 2 с 2 и т. Д., Более элегантное решение может быть написано с использованием картыиз мурлыкающего пакета.Надеюсь, это поможет.

Редактировать: только фитинг 1 в A с 1 в B и т. Д.

library(purrr)
library(dplyr)
library(broom)


A<-data.frame(A)
B<-data.frame(B)

results <- map2_df(.x = A,
     .y = B, ~ {

       model_<-lm(.y ~ .x)
       bind_cols(glance(model_),
                 intercept=model_$coefficients[1],
                 slope=model_$coefficients[2]
       )
     })

Вот мурлыканье документация .Это очень ясно объясняет, как работает map2_df.Он в основном выполняет циклы по двум спискам одновременно, выполняя одну функцию и возвращая data.frame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...