No.18 Kappa系数精度评价2.0
# Loading necessary libraries
library(openxlsx)
library(vcd)
# Reading the Excel data
AccData <- read.xlsx("D:/R_proj/a绘图demo/bKappa/五指山生态系统分类精度评价一二级类.xlsx",
sheet = 1, colNames = T)
# Handle missing values (replace NA with 0)
AccData[is.na(AccData)] <- 0
AccMatrix <- data.matrix(AccData[1:nrow(AccData), 2:ncol(AccData)])
# Extract diagonal and total sum,提取对角线和总和
MatDiag <- diag(AccMatrix)
TotalNum <- sum(AccMatrix)
# Overall accuracy,总体精度 (OA)
OA <- sum(MatDiag) / TotalNum
# Kappa coefficient,计算Kappa系数,用vcd包中的函数
K <- Kappa(AccMatrix)
# Calculate Kappa manually,手动计算Kappa系数
colFreqs <- colSums(AccMatrix) / TotalNum
colFreqs
rowFreqs <- rowSums(AccMatrix) / TotalNum
rowFreqs
p0 <- sum(MatDiag) / TotalNum
pe <- crossprod(colFreqs, rowFreqs)[1]
k2 <- (p0 - pe) / (1 - pe)
# Calculate mapping accuracy and user accuracy
mapping_accuracy <- data.frame(Class = character(), MappingAccuracy = numeric())
user_accuracy <- data.frame(Class = character(), UserAccuracy = numeric())
for (i in 1:nrow(AccMatrix)) {
PA <- AccMatrix[i, i] / sum(AccMatrix[, i])
UA <- AccMatrix[i, i] / sum(AccMatrix[i, ])
# Append results to data frames
mapping_accuracy <- rbind(mapping_accuracy, data.frame(Class = AccData[i, 1], MappingAccuracy = PA))
user_accuracy <- rbind(user_accuracy, data.frame(Class = AccData[i, 1], UserAccuracy = UA))
print(paste(AccData[i, 1], "制图精度为", PA * 100, "%"))
print(paste(AccData[i, 1], "用户精度为", UA * 100, "%"))
}
# Output overall classification accuracy and Kappa coefficient
print(paste("总体分类精度为", OA * 100, "%"))
print(paste("Kappa系数为", K[["Unweighted"]][["value"]] * 100, "%"))
# Save results to Excel
output_file <- "D:/R_proj/a绘图demo/bKappa/classification_accuracy_results1.xlsx"
write.xlsx(list(
"Mapping Accuracy" = mapping_accuracy,
"User Accuracy" = user_accuracy,
"Overall Accuracy" = data.frame(OverallAccuracy = OA * 100),
"Kappa Coefficient" = data.frame(Kappa = K[["Unweighted"]][["value"]] * 100)
), file = output_file)
print(paste("Results saved to", output_file))
混淆矩阵:

结果:


浙公网安备 33010602011771号