#r #purrr
#r #муррр
Вопрос:
Я хотел бы создать таблицу линейных моделей со всеми независимыми переменными вверху и всеми зависимыми переменными слева. Это можно сделать с помощью функции tab_model пакета sjPlot: https://cran.r-project.org/web/packages/sjPlot/vignettes/tab_model_estimates.html .
В то время как в документации указано, как получить таблицу с несколькими моделями, вводя каждую модель по очереди (m1, m2, m3 и т.д.), У меня есть список линейных моделей, полученный из purr. Я искал документацию и онлайн-форумы, но не могу найти ничего о том, как это сделать. Это один из примеров:
library(sjPlot)
library(sjmisc)
library(sjlabelled)
library(tidyverse)
df <- data.frame(study_id = c(1:20),
leptin = runif(20),
insulin = runif(20),
gene1 = runif(20),
gene2 = runif(20),
age = runif(20, min = 20, max = 45),
sex = sample(c(0,1), size = 20, replace = TRUE))
model_function_covariates_for_table <- function(x,y) {
M1 <- paste0(x, "~", y, " age sex")
M1_fit <- lm(M1, data = df)
return(M1_fit)
}
bioactives <- names(df)[c(2:3)]
genes <- names(df)[c(4:5)]
bioactives <- purrr::set_names(bioactives)
genes <- purrr::set_names(genes)
# Works
m <- model_function_covariates_for_table("leptin", "gene1")
tab_model(m)
# Doesn't work
m <- map(bioactives,
~map(genes, model_function_covariates_for_table, y = .x))
tab_model(m)
Сообщение об ошибке:
Error in if (fam.info$is_linear) transform <- NULL else transform <- "exp" :
argument is of length zero
In addition: Warning message:
Could not access model information.
Заранее благодарю за любые советы.
Ответ №1:
Здесь нам нужно map2
, поскольку мы передаем соответствующие элементы ‘bioactives’ и ‘genes’ в функцию model_function_covariates_for_table
library(purrr)
map2(bioactives, genes, ~ model_function_covariates_for_table(.x, .y))
-вывод
$leptin
Call:
lm(formula = M1, data = df)
Coefficients:
(Intercept) gene1 age sex
0.692454 -0.200365 -0.001285 0.044467
$insulin
Call:
lm(formula = M1, data = df)
Coefficients:
(Intercept) gene2 age sex
0.7475482 -0.1388409 -0.0006337 -0.1919895
Он tab_model
будет применен к каждому из этих элементов
out <- map2(bioactives, genes, ~
model_function_covariates_for_table(.x, .y) %>%
tab_model)
out[[1]]
out[[2]]
В base R
соответствующей функции Map
Map(model_function_covariates_for_table, bioactives, genes)