У меня есть два вектора, фактические и прогнозные значения.Оба типа фактор с 8 уровнями.Восьмой уровень имеет только 55 фактических наблюдений и 0 прогнозируемых.Однако, когда я делаю матрицу путаницы, наблюдения уровня 8 исчезают или каким-то образом перемещаются.Разве столбцы фактической суммы не должны соответствовать их фактическим значениям?
Я сделал путаницу двумя разными способами для двойной проверки.Я также попытался явно сделать уровни факторов одинаковыми в обоих векторах.Пока не повезло.
library(nnet); library(caret)
sc <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/00272/SkillCraft1_Dataset.csv")
# First column is ID
sc$LeagueIndex <- as.factor(sc$LeagueIndex)
sc <- sc[, -1]
# Set missing values to NA
which_qm <- sc[, c(2,3,4)] == '?'
sc[, c(2,3,4)][which_qm] <- NA
sc[, c(2,3,4)] <- apply(sc[, c(2,3,4)], 2, as.numeric)
# Set impossible values to NA
sc$TotalHours[sc$Age < sc$TotalHours/8760] <- NA
sc$HoursPerWeek[sc$HoursPerWeek >= 168] <- NA
# Fit model and store predictions
sc_mod1 <- multinom(LeagueIndex ~ ., sc)
sc_fitted1 <- predict(sc_mod1, sc)
# sc_fitted1 is missing factor level 8
confusionMatrix(data = sc_fitted1, reference = sc$LeagueIndex)
table(predicted = sc_fitted1, actual = sc$LeagueIndex)
# sc_fitted1 has factor level 8
levels(sc_fitted1) <- levels(sc$LeagueIndex)
confusionMatrix(data = sc_fitted1, reference = sc$LeagueIndex)
table(predicted = sc_fitted1, actual = sc$LeagueIndex)
# What's the problem?
table(sc$LeagueIndex)
length(sc$LeagueIndex)
table(sc_fitted1)
length(sc_fitted1)