【发布时间】:2021-03-25 15:22:08
【问题描述】:
我正在尝试从一个数据帧创建多个混淆矩阵,每个矩阵都是根据数据帧中的不同条件生成的。
所以对于下面的数据框,我想要一个混淆矩阵,用于何时 Value = 1、Value = 2、Value =3
observed predicted Value
1 1 1
0 1 1
1 0 2
0 0 2
1 1 3
0 0 3
并查看如下结果:
Value Sensitivity Specificity PPV NPV
1 .96 .71 .84 .95
2 .89 .63 .30 .45
3 .88 .95 .28 .80
这是我尝试使用可重现的示例。我正在尝试编写一个循环来查看每一行,确定是否Age = 1,然后从预测列和观察列中提取值以生成混淆矩阵。然后我手动从混淆矩阵中提取值以写出 sen、spec、ppv 和 npv,并尝试将所有矩阵组合在一起。然后循环再次以Age = 2 开始。
data(scat)
df<-scat %>% transmute(observed=ifelse(Site=="YOLA","case", "control"), predicted=ifelse(Location=="edge","case", "control"),Age)
x<-1 #evaluate at ages 1 through 5
for (i in dim(df)[1]) { #for every row in df
while(x<6) { #loop stops at Age=5
if(x=df$Age) {
q<-confusionMatrix(data = df$predicted, reference = df$observed, positive = "case")
sensitivity = q$table[1,1]/(q$table[1,1]+q$table[2,1])
specificity = q$table[2,2]/(q$table[2,2]+q$table[1,2])
ppv = q$table[1,1]/(q$table[1,1]+q$table[1,2])
npv = q$table[2,2]/(q$table[2,2]+q$table[2,1])
matrix(c(sensitivity, specificity, ppv, npv),ncol=4,byrow=TRUE)
}
}
x <- x + 1 #confusion matrix at next Age value
}
final<- rbind(matrix) #combine all the matrices together
但是,此循环完全不起作用。我不确定错误在哪里。
【问题讨论】:
标签: r loops while-loop confusion-matrix