2015-09-05 3 views
0

Я пытаюсь запустить cv DFA по набору данных сайта X видов (разновидностями являются столбцы, сайты - это строки) с группой группировки с именем «ZONE».Ошибка при запуске DFA в R при функции предсказания

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

Мой код просто:

data2.lda<-lda(ZONE~SP1+SP2+SP3+SP4+SP5+SP6+SP7+SP8+SP9+SP10+SP11+SP12+SP13+SP14+SP15 
,data=data2.x, Cna.action="na.omit",CV=TRUE) 

list(data2.lda) 

data2.lda.p<-predict(data2.lda,newdata=data2.lda.x(,c[2:17]))$class 
data2.lda.p 

ошибка я получаю это:

Ошибка метод UseMethod («предсказать»): не применяется метод «предсказать» не применяется к объекту класс "list"

Мои данные соответствуют той же форме, как в предыдущих версиях этого кода. Где я ошибся? Любая помощь приветствуется, спасибо!

ОБНОВЛЕНИЕ: Я выяснил, что проблема связана с частью проверки перекрестного кода. Существуют ли дополнительные правила для перекрестной проверки LDA, которые мне не хватает, когда дело доходит до кодирования в R?

+0

Я думаю, что вы имели в виду использовать 'data2.x' вместо' 'data2.lda.x' в predict' – pcantalupo

+0

внесении изменений, которые не делают разницы, к сожалению, но спасибо за ваш комментарий. Однако, когда я отказываюсь от проверки перекрестных ссылок (удаляю CV = TRUE), код работает отлично. Я знаю, что это правильная команда, есть ли дополнительные правила для использования разрешения на перекрестное подтверждение, которое мне не хватает? – Jesse001

ответ

0

Согласно ответу PCantalupo, я сумел достичь своей цели. Процедура перекрестной проверки должна применяться во время модели прогнозирования, а не в исходной модели. Функциональный код:

data2.lda<-lda(ZONE~SP1+SP2+SP3+SP4+SP5+SP6+SP7+SP8+SP9+SP10+SP11+SP12+SP13+SP14+SP15 
,data=data2.x, Cna.action="na.omit") 

list(data2.lda) 

data2.lda.p<-predict(data2.lda,CV=TRUE,newdata=data1[c(2:17)])$class 
data2.lda.p 
tab<-table(data2.lda.p,data2[,1]) 
tab 
summary(table(data2.lda.p,data2[,1])) 
diag(prop.table(tab,1)) 
sum(diag(prop.table(tab))) 
1

Ваша проблема в том, что predict требует объекта модели для его первого аргумента. Когда вы запускаете lda с опцией CV=T, он возвращает объект списка, а не объект модели. Документация lda говорит

Если CV = TRUE возвращаемое значение представляет собой список с классом компонентов, МАР классификации (фактор), и задней, апостериорных вероятностей классов.

В противном случае это объект класса «Lda», содержащий следующие компоненты:

+0

Спасибо за ваш ответ, который помогает мне понять, в чем проблема. Однако, если это так, то как вы должны реализовать вариант CV? DFA имеет мало значения без разрешения на перекрестное подтверждение. Новый вопрос: что такое правильный код для кода CV = TRUE для модели, которую я хочу предсказать? – Jesse001

+0

Вы создаете свою модель без опции CV = TRUE и используйте 'прогноз' на этой модели. Параметр CV = TRUE позволяет проверить, насколько точна ваша модель. Тогда вам решать, хотите ли вы отказаться от этой модели и создать новую. – pcantalupo

Смежные вопросы