Ошибка в eval (модель $ call $ data): объект data1 не найден - PullRequest
0 голосов
/ 01 мая 2020

Предположим, у меня есть следующая функция для запуска исследования симуляции. Я функционирую следующим образом: -

simulation<-function(n, method, process, bsd){
  M<-matrix(1:(10*n), nrow=n, ncol=10)
  U<-matrix(data=NA, nrow=5, ncol=1)

  for(i in 1:5)  {

    if(process=='1') {

      for(j in 1:10) {
        M[,j]<-runif(n, min=0, max=5*j)
      }
      epsilon<-rnorm(n, mean=0, sd=bsd)
    }

 y<-1*M[,2]+2.5*M[,6]+0.8*M[,9]+epsilon

 data1<- data.frame("X1"=M[,2], "X2"=M[,6], "X3"=M[,9],"X4"=M[,1],"X5"=M[,3],"X6"=M[,4],"X7"=M[,5],"X8"=M[,7],"X9"=M[,8],"X10"=M[,10])



  subsetb<-lm(y~0+., data=data1)

    if(method=='1'){
      k<-ols_step_best_subset(subsetb)
      U[i,]<-k$predictors[which.max(k$adjr)]
    }


    if(method=='2'){
      k<-ols_step_best_subset(subsetb) 
      U[i,]<-k$predictors[which.min(k$aic)]
    }

  }  

  V<-data.frame("SV"=U[,1]) 


  V$SV <- sapply(V$SV, function(i){i1 <- strsplit(as.character(i), ' ')[[1]];  
  i2 <- i1[order(as.numeric(gsub('\\D+', '', i1)))]; 
  paste(i2, collapse = ' ')})


  return(V)


}

Всякий раз, когда я пытаюсь выполнить system.time(simulation(50, '1', '1', 1)), я получаю следующее сообщение об ошибке с описанием: -

 Error in eval(model$call$data) : object 'data1' not found 
7.
eval(model$call$data) 
6.
eval(model$call$data) 
5.
mod_sel_data(model) 
4.
ols_step_best_subset.default(subsetb) 
3.
ols_step_best_subset(subsetb) 
2.
simulation(50, "1", "1", 1) 
1.
system.time(simulation(50, "1", "1", 1)) 

Я понятия не имею, почему это показ data1 не найден. Я полагаю, что проблема возникает, когда я вызываю функцию lm. Может ли кто-нибудь указать на любую ошибку?

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Если проблемы не устранены, попробуйте заменить

y <- 1*M[,2] + 2.5*M[,6] + 0.8*M[,9] + epsilon

data1 <- data.frame("X1"=M[,2],
                    "X2"=M[,6], 
                    "X3"=M[,9],
                    "X4"=M[,1],
                    "X5"=M[,3],
                    "X6"=M[,4],
                    "X7"=M[,5],
                    "X8"=M[,7],
                    "X9"=M[,8],
                    "X10"=M[,10])

на

y <<- 1*M[,2] + 2.5*M[,6] + 0.8*M[,9] + epsilon

data1 <<- data.frame("X1"=M[,2],
                     "X2"=M[,6], 
                     "X3"=M[,9],
                     "X4"=M[,1],
                     "X5"=M[,3],
                     "X6"=M[,4],
                     "X7"=M[,5],
                     "X8"=M[,7],
                     "X9"=M[,8],
                     "X10"=M[,10])
1 голос
/ 01 мая 2020

Заменить ols_step_best_subset(subsetb) на olsrr::ols_step_best_subset(subsetb) в каждом месте.

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