Регрессирование фрейма данных из нескольких зависимых переменных в фрейм данных из нескольких объясняющих переменных - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть фрейм данных с несколькими зависимыми переменными, называемый dependents, и другой фрейм данных, состоящий из пояснительных переменных, называемый explanatory.Я хочу регрессировать каждую переменную в dependents на всех explanatory переменных.Однако, что бы я ни делал, я продолжаю получать (каждый раз разные) ошибки.Ниже я создал более простую версию своей проблемы:

dependents <- structure(list(exp1 = c(1,2,3), 
                             exp2 = c(4,5,6),
                             exp3 = c(7,8,9)),
                             .Names = c("exp1", "exp2", "exp3"),
                             class = "data.frame", row.names = c(NA, -3L))

explanatory <- structure(list(var1 = c(1,2,3), 
                              var2 = c(4,5,6),
                              var3 = c(7,8,9)),
                             .Names = c("var1", "var2", "var3"),
                             class = "data.frame", row.names = c(NA, -3L))

Я попробовал следующие коды:

engel <- lm(dependents ~ exp_variables )

engel <- lm(colnames(dependents) ~ colnames(exp_variables))

engel <- lapply(colnames(dependents), function(x) {
         fit <- lm(paste(x,'~',colnames(exp_vars),collapse = "+")})

reg_data = cbind(dependents, exp_variables)
engel <- lm(dependents ~ exp_variables, data = reg_data )

reg_data = cbind(dependents, exp_variables)
engel <- lm(colnames(dependents) ~ colnames(exp_variables), data = reg_data )

engel <- lapply(dependents, function(x) {
         fit <- lm(paste(x,'~',exp_vars,collapse = "+")})

reg_data = cbind(dependents, exp_variables)
engel <- lapply(dependents, function(x) {
         fit <- lm(paste(x,'~',exp_vars,collapse = "+"), data=reg_data)})

reg_data = cbind(dependents, exp_variables)
engel <- lapply(colnames(dependents), function(x) {
         fit <- lm(paste(x,'~',colnames(exp_vars),collapse = "+"), data=reg_data)})

Может кто-нибудь сказать мне, как правильно кодировать эту регрессию?

Большое спасибо заранее.

1 Ответ

0 голосов
/ 06 декабря 2018

Ваша первая попытка была отличной, за исключением того, что вы должны были предоставить матрицы, а не фреймы данных:

lm(as.matrix(dependents) ~ as.matrix(explanatory))

Это, однако, для случая, когда explanatory не включает какие-либо факторы.В случае факторов вы могли бы использовать

lm(as.matrix(dependents) ~ -1 + model.matrix(~ ., data = explanatory))

, где у меня есть -1, чтобы не было двух перехватов, так как model.matrix собирается создать для него также один столбец.Конечно, всегда есть возможность быть более простым и использовать, скажем, lapply:

lapply(dependents, function(y) lm(y ~ ., data = cbind(y = y, explanatory)))

, что на самом деле, возможно, даже лучше, так как вы можете четко контролировать формулу каждой модели и названиярегрессоры хорошо сохранились.

...