2016-10-09 2 views
0

J'ai travaillé sur l'obtention d'un intervalle de confiance bootstrap autour des AUC générées dans un algorithme d'apprentissage automatique à gradient de rendement avec un résultat continu. Ci-dessous le code pour une itération de ce qui doit être répété au moins 200 fois:Extraction d'AUC à partir de modèles à gradient amélioré de 200 répliques créées manuellement dans R

  1. Rééchantillonnage le jeu de données principal (n = 1000) avec le remplacement
  2. quantile normalise la variable de résultat
  3. Run GBM sur l'ensemble de données rééchantillonné et extraire AUC

Je sais SAS je pouvais utiliser une macro qui traverserait ce code 200 fois, la création de 200 jeux de données et l'extraction de 200 AUC je pouvais fusionner, mais je ne sais pas comment je boucle ceci dans R.

#calling required packages 
library("WVPlots") 
source('functions.R') 
require(gbm) 


#generating some data  
main<-matrix(
    replicate(52,rnorm(1132)), 
    ncol=52, 
    nrow=1132, 
    dimnames = list(
    1:1132, 
    1:52) 
) 
colnames(main)[1] <- "PctControl" 


#creating resampled dataset BS[1] (so my aim is to repeat this for BS[1:200] 

BS1=matrix(
    rep(as.numeric(NA)), 
    nrow=1000, 
    ncol= ncol(main), 
    dimnames= list(1:1000, colnames(main)) 
      ) 

BS1[1:1000,]<-as.matrix (main[sample(nrow(main),size=1000,replace=TRUE),]) 
BS1<-BS1[order(BS1[,1]),] 


Survival <- as.numeric (BS1[,1]) 

NormedSurvival<- as.numeric(ppoints(Survival)) 
BS1<-cbind (NormedSurvival, BS1) 

BS1<-as.data.frame(BS1[,-2]) 


#fitting the GBM model 

scwrpxy.fit.gbm = gbm(NormedSurvival~., 
         data=BS1, 
         n.trees = 50, verbose = T, shrinkage = 0.005, 
         bag.fraction = 0.25,   # subsampling fraction, 0.5 is probably best 
         train.fraction = 0.3, 
         interaction.depth = 3, n.minobsinnode = 10, distribution = "gaussian", 
         cv.folds = 3) 

summary(scwrpxy.fit.gbm) 

#Calculating AUC 

predictedGBM<-as.numeric(predict.gbm (scwrpxy.fit.gbm, 
             n.trees = 500, 
             shrinkage = 0.005, 
             interaction.depth=3, 
             bag.fraction=0.5, 
             train.fraction=0.3, 
             cv.folds = 5, 
             distribution="gaussian")) 


observedGBM<-as.numeric(BS1$NormedSurvival) 

TestTox<-as.data.frame(cbind(observedGBM,predictedGBM)) 

ROCPlot(TestTox,'predictedGBM','observedGBM','gbm model') 
gbmAUC = as.numeric(pROC::auc(TestTox$observedGBM,TestTox$predictedGBM)) 
print(gbmAUC) 

Répondre

0

SAS vous devez PROC APPEND ou DATA étape pour ajouter des jeux de données. Dans R, vous devez rbind() pour la même chose. alors faites quelque chose comme:

if !exists(baseAUC) 
    baseAUC <- gbmAUC 
else 
    baseAUC <- rbind(baseAUC,gbmAUC)