Выполнение анализа идентичных наборов данных и извлечение коэффициентов в таблицу - PullRequest
1 голос
/ 29 января 2020

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

 one_table <- data.frame() #dataframe I will use to store results in later
for(i in 1:198){
  load(file = paste("Dataset_",i,".RData",sep = "")) #loads a dataset
  Dataset = get(paste0("Dataset_", i)) #renames the loaded Dataset_i to Dataset, important for model below
  model_result = try(summary(lme(A ~ B + C + B*C + D + E, random = ~1|company,na.action=na.omit,
                                 control=lmeControl(opt='optim'),method='REML',
                                 data=Dataset,correlation = corAR1())),silent=TRUE) #model
  coefficients = coef(model_result) #extracts coefficients from model results
  coefficients_df <- as.data.frame(coefficients) #puts coefficients into a table
  one_table <- rbind(one_table, coefficients_df) #updates table with each iteration of i 

Теперь код работает до набора данных № 96, в котором я получаю следующую ошибку: $ operator is invalid for atomic vectors. Я не совсем уверен, как продолжить, к чему относится эта ошибка?

Редактировать: Я думаю, что нашел проблему. Модель не работает на наборе данных № 97, я получаю следующую ошибку, которая относится к B *C

[1] "Error in logLik.reStruct(object, conLin) : \n  NA/NaN/Inf in foreign function call (arg 3)\n"
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in logLik.reStruct(object, conLin): NA/NaN/Inf in foreign function call (arg 3)>

1 Ответ

1 голос
/ 29 января 2020

Произошла ошибка B *C, поскольку переменная была неправильно вычислена в наборе данных № 97 - глупая ошибка!

Примечание: результаты модели также можно сохранить в списке

list.res.H = list()
for(i in 1:198){
  load(file = paste("Dataset_",i,".RData",sep = "")) #loads a dataset
  Dataset = get(paste0("Dataset_", i)) #renames the loaded Dataset_i to Dataset, important for model below
  model_result = try(summary(lme(A ~ B + C + B*C + D + E, random = ~1|company,na.action=na.omit,
                                 control=lmeControl(opt='optim'),method='REML',
                                 data=Dataset,correlation = corAR1())),silent=TRUE) #model
  list.res.H[[i]] = coef(model_result) #extracts coefficients from model results
}
...