R circunflexo e NAs

26

Eu prefiro o sinal de intercalação por sua capacidade de ajuste de parâmetros e interface uniforme, mas observei que ele sempre exige conjuntos de dados completos (ou seja, sem NAs), mesmo que o modelo "nu" aplicado permita NAs. Isso é muito incômodo, pois é necessário aplicar métodos de imputação trabalhosos, que não são necessários em primeiro lugar. Como evitar a imputação e ainda usar vantagens de sinal de intercalação?

Fredrik
fonte
3
Você sempre tem que fazer algo com valores ausentes. Devo dizer que realmente não entendi sua pergunta - você está procurando uma abordagem de tamanho único ..? Se você não deseja atribuir NAs, o que você quer fazer com elas? Excluir?
Tim
11
Quero deixar NAs lá e deixar para o modelo lidar com NAs. Se eu fizer isso com uma função C5.0 em C50, por exemplo, ele poderá lidar com os NAs em si, mas neste caso não posso usar o sinal de intercalação, porque a função de trem do sinal de intercalação não permite NAs em conjuntos de dados, mesmo quando eu quiser usar o C5. Função 0 de C50 mencionada acima.
22715 Fredrik
3
Mas o que o "modelo" faz é ignorar (excluir) esses dados, deixando uma amostra menor; estima (imputa) esses valores; ou prevê a categoria "NA" (por exemplo, em alguns modelos baseados em árvores). O que mais você gostaria que seu "modelo" fizesse? Alguns softwares fazem essas coisas automaticamente, mas imagine que sua máquina de café tenha lhe fornecido o café "padrão" ... Alguns softwares produzem o "café padrão" dos NAs, mas não é o melhor que você pode obter.
Tim
3
Tem certeza de que o sinal de intercalação não permite NAs? Tentei introduzir NA com o exemplo padrão na página de ajuda do train e com o método C5.0 train funcionou muito bem. Falhou com floresta aleatória.
Mkttas 20/08/2015

Respostas:

32

Para a função de trem em circunflexo, você pode passar o parâmetro na.action = na.pass e sem pré-processamento (não especifique pré-processo, deixe-o como seu valor padrão NULL). Isso passará os valores de NA não modificados diretamente para a função de previsão (isso fará com que as funções de previsão que não suportam valores ausentes falhem, para aqueles que você precisaria especificar pré-processo para imputar os valores ausentes antes de chamar a função de previsão). Por exemplo:

train(formula,
      dataset,
      method = "C5.0",
      na.action = na.pass)

Nesse caso, o C5.0 manipulará os valores ausentes por si só.

Stan Hatko
fonte
11
Esta é uma discussão interessante. Qual seria a armadilha de adicionar NA como outro nível a um preditor categórico? Se as NAs não puderem ser modeladas ou imputadas, ou seja, a presença de uma ausência é realmente informativa, parece que simplesmente fazer NA ser um nível adicional faz sentido?
21417 Seanosapien
Se alguém usar a especificação x, y em trainter a na.action = na.passopção definida, causará o seguinte erro:Something is wrong; all the RMSE metric values are missing
user29609
3

Você já tentou recodificar as NAs? Algo> 3 desvios-padrão fora de seus dados (por exemplo, -12345) deve incentivar o C5.0 a prever esses dados separadamente, como acontece com os NAs.

psiconomia
fonte
2

Eu acho que sua solução seria imputar os valores enquanto usava a função predict () .

Veja ?predict.trainpara mais detalhes.

Você pode usar na.omitpara permitir que o acento circunflexo imute valores. Por exemplo:

    ## S3 method for class 'train':
    predict((object, newdata = NULL, type = "raw", na.action = na.omit, ...)

de http://www.inside-r.org/packages/cran/caret/docs/predict.train

Outra solução seria imputar durante o pré - processamento dos dados:

    ## S3 method for class 'default':
    preProcess(x, 
       method = "knnImpute",   # or *bagImpute* / *medianImpute*
       pcaComp = 10,
       na.remove = TRUE,
       k = 5,
       knnSummary = mean,
       outcome = NULL,
       fudge = .2,
       numUnique = 3,
       verbose = TRUE,
       )

de http://www.inside-r.org/node/86978

Kristijan
fonte