2017-10-09 52 views
-1

嗨任何一個可以寫幫我寫一個for循環或應用功能,運行多個模型應用功能爲GLM模型的列表

下面的代碼

仿真數據

set.seed(666) 
x1 = rnorm(1000) 
x2 = rnorm(1000) 
y = rbinom(1000,1,0.8) 
df = data.frame(y=as.factor(y),x1=x1,x2=x2) 

分割數據來訓練組和測試組

dt = sort(sample(nrow(df), nrow(df)*.5, replace = F)) 
trainset=df[dt,]; testset=df[-dt,] 

擬合Logistic迴歸模型

model1=glm(y~x1,data=trainset,family="binomial") 
model2=glm(y~x1+x2,data=trainset,family="binomial") 

檢驗模型準確性的測試和訓練ETS

我想環路列車集和測試集以上,並打印AUC安裝每個模型的多個模型下面提到的代碼

require(pROC) 
trainpredictions <- predict(object=model1,newdata = trainset); 
trainpredictions <- as.ordered(trainpredictions) 
testpredictions <- predict(object=model1,newdata = testset); 
testpredictions <- as.ordered(testpredictions) 
trainauc <- roc(trainset$y, trainpredictions); 
testauc <- roc(testset$y, testpredictions) 
print(trainauc$auc); print(testauc$auc) 
+0

存儲在列表中的模型?您可能想要提供所有模型的子集。 – useR

+0

你想要的輸出是什麼?你有任何寫函數的經驗嗎?你可以在這裏使用'lapply()'。用樣本輸入數據幫助一個合適的[可重現的示例](https://stackoverflow.com/questions/5963269/how-to-make-a- great-r-reproducible-example)會更容易。 – MrFlick

+0

@MrFlick我編輯了這個問題並添加了一個可重現的例子; –

回答

0

剛把你的機型列表中的

models <- list(
    model1 = glm(y~x1,data=trainset,family="binomial"), 
    model2 = glm(y~x1+x2,data=trainset,family="binomial") 
) 

定義值提取功能

getauc <- function(model) { 
    trainpredictions <- predict(object=model,newdata = trainset); 
    trainpredictions <- as.ordered(trainpredictions) 
    testpredictions <- predict(object=model,newdata = testset); 
    testpredictions <- as.ordered(testpredictions) 
    trainauc <- roc(trainset$y, trainpredictions); 
    testauc <- roc(testset$y, testpredictions) 
    c(train=trainauc$auc, test=testauc$auc) 
} 

而且sapply(),其功能是您的列表

sapply(models, getauc) 
#   model1 model2 
# train 0.5273818 0.5448066 
# test 0.5025038 0.5146211