#r #dplyr #lapply #lm
#r #dplyr #лапли #лм
Вопрос:
У меня есть набор данных с довольно большим количеством переменных. В наборе данных у меня есть предиктор и переменная результата, которую я хочу исследовать. Я хочу найти ковариаты либо со значительным влиянием на переменную результата, либо со значительным эффектом взаимодействия между предиктором и ковариацией на переменную результата.
Поэтому было бы удобно иметь возможность регрессировать все ковариаты по очереди с желаемым предиктором для зависимой переменной и создать таблицу эффектов и эффектов взаимодействия ковариат с их соответствующими значениями p.
Я хочу сделать что-то вроде этого:
library(dplyr) # Generating sample data set.seed(5) df lt;- data.frame(matrix(round(abs(2*rnorm(100*100)), digits = 0), ncol=100)) # Selecting covariates covar lt;- names(df)[! names(df) %in% c("X1", "X2")] # Running the lm function over the list of covariates. I should get the covariate coefficients from each regression, but I get an error when I try run this step. coeff lt;- lapply(covar, function(x){ # Retrive coefficient matrix summary(lm(X1 ~ X2 x X2*x, df))$coefficients %gt;% # Coerce into dataframe and filter for covariates and interaction effects as.data.frame(.) %gt;% filter(row.names(.) %in% grep(x, rownames(.), value = TRUE))}) %gt;% # Finally I want to join all data frames into one bind_rows(.)
Мне бы не помешала помощь с синтаксисом. При попытке запустить функцию я получаю следующую ошибку:
Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'summary': variable lengths differ (found for 'x')
Ответ №1:
Когда вы используете x
(в lapply
) внутри function
, возможно, было бы лучше использовать paste
для формулы модели, а не просто указывать ее формулу.
lapply(covar, function(x){ modd lt;- paste0("X1 ~ X2 ", x, " X2 *", x) summary(lm(modd, df))$coefficients %gt;% as.data.frame(.) %gt;% filter(row.names(.) %in% grep(x, rownames(.), value = TRUE))}) %gt;% bind_rows(.)