Я не опытный кодер и только начал изучать R за последние несколько недель, чтобы помочь с работой, связанной с моей докторской степенью. Вот проблема:
Я пытался много, много часов безуспешно пытаться вписать пропущенные значения в набор данных с помощью пакета missForest в R. Ниже приведен типичный пример проблемы, с которой я сталкиваюсь. изготовленный набор данных.
Набор данных содержит числовые значения c, которые являются категориальными. После импорта я использую следующий код, чтобы установить для класса «factor»
data <- read.csv("~Data.csv", colClasses = c(rep('factor',3)))
>data
a b c
1 2 3
4 5
7 8 9
Чтобы проверить правильность установки класса, я запускаю:
missForest::varClass(data)
возвращает:
[1] "factor" "factor" "factor"
Затем я пытаюсь вменять и просматривать данные, но я получаю исходный набор данных с отсутствующей точкой данных вместо вставленного вмененного значения.
data.imp <- missForest(data)
data.imp$ximp
a b c
1 2 3
4 5
7 8 9
Приведенный выше пример показывает, как я импортирование данных и преобразование их в фактор и попытка вменять недостающие данные. Приведенный ниже пример является воспроизводимым примером, который создает ту же проблему.
Приведенный ниже пример должен быть воспроизводимым в R
Я использую версию R 3.5.3 (2019-03-11)
#install and load the missForest package and library
install.packages("missForest")
library(missForest)
#create the test data frame with a missing value in column c
a <- c("1","4","7")
b <- c("2","5","8")
c <- c("3","","9")
data.test <- data.frame(a,b,c)
#print the data
data.test
#view the class of the data to ensure it is "factor"
missForest::varClass(data.test)
#create the imputed data frame using missForest
data.test.imp <- missForest(data.test)
#print the imputed data frame
data.test.imp$ximp
Приведенный выше код возвращает следующее значение, значение которого в столбце c по-прежнему отсутствует
> data.test
a b c
1 1 2 3
2 4 5
3 7 8 9
> missForest::varClass(data.test)
[1] "factor" "factor" "factor"
> data.test.imp <- missForest(data.test)
missForest iteration 1 in progress...done!
missForest iteration 2 in progress...done!
> data.test.imp$ximp
a b c
1 1 2 3
2 4 5
3 7 8 9
Если я преобразую все данные в цифру c, он будет вменять значения в отсутствуют точки данных, хотя эти вмененные значения являются десятичными, а все мои данные целыми числами, но, тем не менее, это работает ...
Реальный набор данных, который я использую, намного больше, но у меня точно такой же проблема с ним.
Далее, если я последую примеру в руководстве по missForest, используя набор данных iris, все будет работать как надо. Но если я загружаю тот же набор данных из репозитория UCI и вручную удаляю категориальную точку данных и пытаюсь запустить тот же код, он не работает.
Я уверен, что есть что-то незначительное, что мне не хватает, но после нескольких часов попыток понять это, я застрял.