2012-11-11 6 views
0

У меня есть набор данных о лесных полигонах, и я пытаюсь сравнить классификации полей с классификациями карт с использованием матрицы путаницы. Единственный пакет, который я мог найти, который будет работать на более крупном наборе данных (более 2 вариантов классификации) и мог бы сравнивать значения текста в пакете «mda». Я запустил пакет «mda» и использовал код для «путаницы».Невозможно интерпретировать результаты из матрицы замешательства из пакета «mda» в R

Предоставленный пример с пакет ...

data(iris) 
irisfit <- fda(Species ~ ., data = iris) 
confusion(predict(irisfit, iris), iris$Species) 
       Setosa  Versicolor  Virginica 
Setosa   50    0    0 
Versicolor   0    48    1 
Virginica   0    2    49 

attr(, "error"): 
[1] 0.02 

Я бегу мое, как просто

data(Habitat) 
confusion(Habitat$Field,Habitat$Map) 

Который дает мне выход спутанность матрицы подобное (но не так, как в чистом виде), как приведенный пример кода. В этот момент я теряюсь. У меня есть 2 результата с моим.

attr(,"error") 
[1] 0.3448276 
attr(,"mismatch") 
[1] 0.889313 

Ошибка Я понимаю, несоответствие, однако, я не могу найти какой-либо намек на сайте или в литературе, которая поставляется вместе с пакетом. Я сомневаюсь, что такое высокое значение «несоответствия» хорошее, но я понятия не имею, как его интерпретировать. Я полагаю, что это, вероятно, довольно конкретный вопрос, на который, возможно, может ответить только кто-то, кто работал с этим пакетом раньше, но если кто-нибудь знает или подскажет, как узнать, я был бы очень признателен.

Спасибо, Айден

EDIT - включить клипы моего набора данных, показывая, что может быть несоответствие (подозреваю, что это означает, что последовательные Ошибочная). Показывает клипы самой последовательной ошибочной классификации.

structure(list(Field = structure(c(7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 8L), .Label = c("Black Spruce ", "Clearcut ", 
"Deciduous ", "Jack Pine ", "Lowland Conifer ", "Marshwillow ", 
"Mixed Conifer ", "Open Muskeg ", "Rock ", "Treed Muskeg ", "Upland Conifer ", 
"Young Conifer", "Young Deciduous"), class = "factor"), Map = structure(c(7L, 
7L, 7L, 11L, 11L, 11L, 11L, 11L, 11L, 12L, 13L, 13L, 13L, 6L), .Label = c("Black  Spruce", "Clearcut", "Deciduous", "Jack Pine", "Lowland Conifer", "Marshwillow", 
"Mixed Conifer", "Open Muskeg", "Rock", "Treed Muskeg", "Upland Conifer", 
"Young Conifer", "Young Deciduous"), class = "factor")), .Names = c("Field", 
"Map"), row.names = 143:156, class = "data.frame") 

ответ

1

Это означает, что переменные не имеют общего набора значений. Если кто-то предсказывает другое, он предсказывает ценности, которые нет (или наоборот). Несоответствие, по-видимому, представляет собой долю случаев, при которых значение не присутствует в уровнях другой переменной.

В примере набора данных диафрагмы, который вы публикуете, мы можем получить этот же результат, если ввести новое значение одной из переменных в матрице замешательства. Поскольку они являются факторами, нам нужно сначала создать новый факторный уровень.

data(iris) 
irisfit <- fda(Species ~ ., data = iris) 
iris$Predict<-predict(irisfit, iris) 
iris$Predict=factor(iris$Predict,levels= c("setosa", "versicolor", 
     "virginica","monsterosa")) #adding a new level 'monsterosa' 
iris$Predict[1]<-"monsterosa" #assign it to one of the observations 

Теперь мы можем повторно запустить функцию путаницы и получить несоответствие:

confusion(iris$Predict, iris$Species) 
      true 
predicted setosa versicolor virginica 
    setosa   49   0   0 
    versicolor  0   48   1 
    virginica  0   2  49 
    monsterosa  1   0   0 
attr(,"error") 
[1] 0.02013423 
attr(,"mismatch") 
[1] 0.006666667 

И если мы реорганизовать другие переменные, чтобы включить все уровни, присутствующие в обеих переменных, рассогласование уходит:

iris$Species=factor(iris$Species,levels= c("setosa", "versicolor", 
     "virginica","monsterosa")) 
confusion(iris$Predict, iris$Species) 
      true 
predicted setosa versicolor virginica monsterosa 
    setosa   49   0   0   0 
    versicolor  0   48   1   0 
    virginica  0   2  49   0 
    monsterosa  1   0   0   0 
attr(,"error") 
[1] 0.02666667 

Я бы сравнил as.character(unique(Habitat$Field)) и as.character(unique(Habitat$Map)), чтобы отследить его. As.character не нужен, но позволяет легко читать.

Теперь, когда вы добавили данные, я вижу, что проблема заключается в том, что у вас есть конечные пробелы в конце некоторых переменных и двойные пробелы между словами в других.

# see problem 
as.character(levels(Habitat$Field)) 
as.character(levels(Habitat$Map)) 

# fix problem 

# unfactor them for now so we can replace spaces 
Habitat$Field<-as.character(Habitat$Field) 
Habitat$Map<-as.character(Habitat$Map) 

# replace unwanted spaces 
Habitat$Field <- gsub("[[:space:]]*$","",Habitat$Field) #gets ending spaces 
Habitat$Map <- gsub("[[:space:]]*$","",Habitat$Map) #gets ending spaces 
Habitat$Map <- gsub("[[:space:]]{2,}"," ",Habitat$Map) # gets double spaces 
Habitat$Field <- gsub("[[:space:]]{2,}"," ",Habitat$Field) # gets double spaces 

# factor them again 
Habitat$Field <-factor(Habitat$Field) 
Habitat$Map<-factor(Habitat$Map) 
+0

Эй, большое спасибо за ответ. Похоже, это может быть из данных примера, но когда я запускаю его через свои собственные данные, я придумываю те же примеры и количество уникальных возможностей.Я повторно запускал данные примера, добавляя все больше и больше некорректно классифицированных видов. Я думаю, что это может быть количество последовательных ошибочных классификаций. Когда я сделал 45 setosa = monsterosa, ошибка была все еще небольшой, но несоответствие было огромным. Когда я распространил ошибочные ошибки вокруг ошибки, и несоответствие снизилось. Однако, когда я попытался сделать это на своих собственных данных (свертывающие классы – HeidelbergSlide

+0

, значение несоответствия и ошибка оставались постоянными во всех слияниях (в итоге рухнули 5 классов в 1, переработав матрицу при каждом крахе). Поэтому я не знаю, но это очень для справки. – HeidelbergSlide

+0

Можете ли вы использовать dput (Habitat [somerows, c («Поле», «Карта»)]), где somerows определяется таким образом, который реплицирует несоответствие и вставляет результат в ваш вопрос? Это значительно упростит чтобы дать лучший ответ. – MattBagg