R - использование циклов for в R для замены пустого вектора на ошибки CV, соответствующие сохраненным моделям - PullRequest
0 голосов
/ 24 апреля 2020

Я относительно новичок в R; это мой первый пост о переполнении стека. Для этого должно быть простое решение, но я не смог понять это.

Код R в «A» ниже создает вектор из 9 интересующих моделей, которые я хотел бы пройти через 10-кратную перекрестную проверку (если это поможет, модели находятся в нижней части этого поста). Я хотел бы запустить этот код ...

modelList <- read.csv("/Users/XX/Desktop/Academic/XX/XX/R/Core_Files/models.csv",header=F)$V1

set.seed(17)
cv.error.9=rep(NA,9)

for(i in modelList){
  cv.error.9[i]=cv.glm(collapsed_Y,eval(parse(text=paste("Mod",i,sep=""))),K=10)$delta[1]
}
cv.error.9

... (или что-то в этом роде) и заменить 'NA' в строке cv.error.9 [i] на CV. ошибки, соответствующие модели «я». Я хотел бы следующую таблицу в качестве моего вывода.

       x
1   2.734539
2   2.710424
3   2.760761
4   2.564147
5   2.583432
6   2.681044
7   2.583303
8   2.570110
9   2.635983

К сожалению, код в «A» не заменяет строки cv.error.9 [i], а скорее добавляет частоту ошибок тестирования в конец вектора cv.error.9, как показано здесь :

       x
1   0.000000
2   0.000000
3   0.000000
4   0.000000
5   0.000000
6   0.000000
7   0.000000
8   0.000000
9   0.000000
10  2.734539
11  2.710424
12  2.760761
13  2.564147
14  2.583432
15  2.681044
16  2.583303
17  2.570110
18  2.635983
Showing 1 to 18 of 18 entries, 1 total columns

Любая помощь с этим будет оценена. Большое спасибо заранее.

Модели:

print(modelList)
[1] <- glm(y ~ X1 + X2 + X3 + X4 + X5 + X6, family=gaussian, data=collapsed_Y)                                     
[2] <- glm(y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 , family=gaussian, data=collapsed_Y)                           
[3] <- glm(y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X4*X5, family=gaussian, data= collapsed_Y)
[4] <- glm(y ~ X1 + X2 + X3 + X4 + X5 + X6, family=poisson, data= collapsed_Y)                                     
[5] <- glm(y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7, family=poisson, data= collapsed_Y)                            
[6] <- glm(y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X4*X5, family=poisson, data= collapsed_Y) 
[7] <- glm.nb(y ~  X1 + X2 + X3 + X4 + X5 + X6, data= collapsed_Y)                                                  
[8] <- glm.nb(y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7, data= collapsed_Y)                                         
[9] <- glm.nb(y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X4*X5, data= collapsed_Y) 
9 Levels: <- glm.nb(y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X4*X5, data= collapsed_Y) ...             

1 Ответ

0 голосов
/ 24 апреля 2020

Вот воспроизводимый пример, который, как мы надеемся, даст вам достаточно для обновления кода.

#placeholder
rsq <- rep(NA,3)
#three separtae model specs for mtcars dataset
f <- list(formula(mpg ~ cyl), 
          formula(mpg ~ cyl + hp), 
          formula(mpg ~ cyl + hp + wt))

for (i in seq_along(f)){
  #fit the model
  m <- lm(f[[i]], data = mtcars)
  #extract value of interest
  rsq[[i]] <- summary(m)$r.squared
}
rsq
#> [1] 0.7261800 0.7407084 0.8431500

Создан в 2020-04-23 пакетом представлением (v0.3.0 )

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