Ошибка при выполнении казалось бы не связанной регрессии R - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу сделать несколько большое количество, казалось бы, не связанных регрессий (SUR) в R из пакета systemfit. Чтобы облегчить игру с количеством включенных переменных, я хочу автоматизировать процесс. Однако я сталкиваюсь с ошибкой при использовании цикла for для выполнения регрессий, в то время как ручной способ не дает никаких ошибок. Я использую код ниже. Я получаю сообщение об ошибке:

Error in solve(sigma, tol = solvetol) : 
Lapack routine dsptrf returned error code 11

Я использую код ниже.

region=12
vars=4

# Performing Seemingly Unrelated Regression per variable and every region
for (i in 1:vars){
    system <- list()
    for (j in 1:region){
        eq_single <- data_mat[,j]~data_mat[,j+12] +  data_mat[,j+24] + data_mat[,j+36]
        system[[j]] <- eq_single
        }
    sur <- systemfit(system, method="SUR")
}


# Manually performing Seemingly Unrelated Regression for 2 regions only
Y1 <- data_mat[,1]
Y2 <- data_mat[,region]
X2 <- cbind(data_mat[,j+region] +  data_mat[,26])
eq1 <- Y1 ~ data_mat[,13] +  data_mat[,25]
eq2 <- Y2 ~ X2
system <- list(eq1=eq1, eq2=eq2)
sur <- systemfit(system, method="SUR")
summary(sur)

Я очень неопытен в R и уверен, что делаю что-то не так. Если так, что я делаю не так?

Заранее спасибо!

1 Ответ

0 голосов
/ 12 сентября 2018

Формулы в R не оцениваются, поэтому j+12 сохраняется как абсолютно одинаковое: "j+12", а не 13, 14 и т. Д. Вот почему вы получили одну и ту же формулу несколько раз в eq_single.

Также обратите внимание, что vars не используется в вашем текущем коде.

library(systemfit)
region=12
vars=4

# Performing Seemingly Unrelated Regression per variable and every region
# for (i in 1:vars){ # i is not used in the loop
system <- list()
for (j in 1:region){ 
  # using paste0() to create correct formulas
  eq_single <- formula(paste0('data_mat[,',j,'] ~ data_mat[,',j+12,'] + 
                               data_mat[,',j+24,'] + data_mat[,',j+36,']'))
  system[[j]] = eq_single
}
sur <- systemfit(system,method="SUR")
# }
...