2012-11-11 41 views
0

我有一個森林多邊形數據集,我試圖使用混淆矩陣比較Field分類和Map分類。我可以找到的唯一一個可以在較大的數據集上運行的軟件包(超過兩個分類選項),並且可以比較文本值是在軟件包「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 

錯誤我明白,不匹配,但是,我似乎無法找到任何暗示的在線或在文件中隨附的包。我懷疑有這麼高的「不匹配」價值是好的,但我不知道如何解釋它。我認爲這可能是一個相當具體的問題,也許只能由曾經使用過這個軟件包的人回答,但如果有人知道,或者有關於如何發現的暗示,我將不勝感激。

感謝,艾登

編輯 - 要包含我的數據集的剪輯,顯示了可能是錯配(懷疑它的意思一致的錯誤分類)。顯示最一致的錯誤分類剪輯。

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

您可以輸入(Habitat [somerows,c(「Field」,「Map」)]),其中somerows是以複製不匹配的方式定義的,並將結果粘貼到您的問題中?以便給出更好的答案 – MattBagg