2017-02-22 9 views
0

私はあなたから各項目を呼び出すには、それぞれの年の私が年によって分割し、電車やテストで作成した大きなデータベースリストに関数を適用し、出力結果

#split the dataset into a list of datasets 
Y <- split(dat_all, dat_all$year) 
#create a train and test dataset for all years 
#takes Y is inp 
create_sets <- function(x){ 
    train_set <- sample(2, nrow(x), replace = TRUE, prob = c(0.7, 0.3)) 
    train <- x[train_set == 1, ] 
    test <- x[train_set == 2, ] 
    assign('x', list(train = train, test = test)) 
} 
Ylist <- lapply(Y, create_sets) 

を持っていますYlist $ '2016'を使用する$

私は各リストを個別に実行できる正確度関数を作ったが、膨大な量のコードを保存するためにすべてを1つにする方法を探しているデータの年数)

以下は、現在1年間の精度比の作成方法です

val_train<-Ylist$'2016'$train 
val_train$pred<-predict(modf,newdata=Ylist$'2016'$train) 
val_train$probs<-exp(val_train$pred)/(1+exp(val_train$pred)) 
x<-data.frame(rcorr.cens(val_train$probs, val_train$default_flag)) 
train_AR<-x[2,1] 
train_AR 

modfull <-ModFit(test) 
val_test<-test 
val_test$pred<-predict(modf,newdata=test) 
val_test$probs<-exp(val_test$pred)/(1+exp(val_test$pred)) 
x<-data.frame(rcorr.cens(val_test$probs, val_test$default_flag)) 
test_AR<-x[2,1] 
test_AR 

AR_Logistic1<-c(train_AR,test_AR,) 
AR_Logistic2<-c(train_AR,test_AR) #just in to see if table works 
AccuracyRatio<-rbind(AR_Logistic1,AR_Logistic2) 
colnames(AccuracyRatio)<-c("Train","Test","All") 
AccuracyRatio 

ちょうど私が私の精度比を通じて私の全体のリストを実行しようとした後、その電車やテストのために各年の出力ARてる明確にします。

すべてのヘルプは大lapply

答えて

0

に感謝し、あなたが以下のように出力をまとめることができます機能におけるARの計算をラップしています。 サンプルデータがないとテストできませんでしたが、エラーが発生した場合はお知らせください。

fn_Calc_AR <- function(yearDat = listInput) { 

#yearDat <== Ylist$'2016' 

trainDat <- yearDat$train 
testDat <- yearDat$test 

val_train<- trainDat 
val_train$pred<-predict(modf,newdata= trainDat) 
val_train$probs<-exp(val_train$pred)/(1+exp(val_train$pred)) 
x<-data.frame(rcorr.cens(val_train$probs, val_train$default_flag)) 
train_AR<-x[2,1] 
#train_AR 

modfull <-ModFit(testDat) 
val_test<-testDat 
val_test$pred<-predict(modf,newdata=testDat) 
val_test$probs<-exp(val_test$pred)/(1+exp(val_test$pred)) 
x<-data.frame(rcorr.cens(val_test$probs, val_test$default_flag)) 
test_AR<-x[2,1] 
#test_AR 

AR_Logistic1<-c(train_AR,test_AR) # removed extraneous comma, previous input c(train_AR,test_AR,) 
AR_Logistic2<-c(train_AR,test_AR) #just in to see if table works 
AccuracyRatio<-rbind(AR_Logistic1,AR_Logistic2) 
colnames(AccuracyRatio)<-c("Train","Test","All") 

#confirm yearName is being created 
try(yearName <- head(names(x),1)) #retain only year 

if(length(yearName) > 0L) { 
AR_DF <- data.frame(yearName = yearName , AccuracyRatio,stringsAsFactors=FALSE) 
}else{ 
AR_DF <- AccuracyRatio 
} 

return(AR_DF) 

} 

出力を要約:

AR_Summary = do.call(rbind,lapply(Ylist,fn_Calc_AR)) 

集計データセット:

aggregateTrain = do.call(rbind,lapply(Ylist,function(x) x$train)) 
aggregateTest = do.call(rbind,lapply(Ylist,function(x) x$test)) 

aggregateList = list(train = aggregateTrain,test = aggregateTest) 

AR_AggregateSummary = do.call(rbind,lapply(aggregateList,function(x) fn_Calc_AR(x))) 
+0

こんにちは、このすべては、私が正しいとしてそれをマークした正常に動作します。しかし、少し質問があります。表では、xを使用して各年の名前が呼び出されます。これは、 "2008 rcorr.cens.val_train_test.probs..val_train_test.default_flag"を出力します。ちょうどその年を持つ方法はありますか? – user2902494

+0

もう1つは、その後、私はやった。私はまた、1年を通して設定された精度比、例えばtest + trainを実行しようとしています。 trainDat < - yearDat $ traintestDat < - yearDat $ testtrainDat_testDat <-yearDat でこれを追加しようとしましたが、別のセクションでtrainDat_testDatを追加しましたが、成功しませんでした。どのように私はこれを行うことができるかに関する任意のアイデア?あなたの助けは本当に感謝しています! – user2902494

+0

私はそれが正しいとマークしていることを知っていますが、私は本当にいくつかの特別な助けに感謝するでしょう – user2902494

関連する問題