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))

混淆矩阵:

 

结果:

 

posted @ 2025-02-11 15:21  百里屠苏top  阅读(28)  评论(0)    收藏  举报