Добавление вмененных данных из модели в набор данных - hmis c aregImpute - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь вписать значения из набора данных, используя hmis c. Я следую этому руководству .

Вот воспроизводимый пример моего кода:

#Create dataset and add 0.1 NA values randomly
data <- iris
library(missForest)
library(Hmisc)
iris.mis <- prodNA(iris, noNA = 0.1)

#Calculating imputed values with aregImpute
impute_arg <- aregImpute(~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width + Species, data = iris.mis, n.impute = 5)

completeData2 <- impute.transcan(impute_arg, imputation=1, data=iris.mis, list.out=TRUE,pr=FALSE, check=FALSE) 
head(completeData2)

#creating a fit model
library(rms)
fmi <- fit.mult.impute(Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width + Species, ols, impute_arg, data=iris.mis)

Мой вопрос: как применить эту подходящую модель к моей данные и вменять значения NA в мой набор данных (iris.mis)?

Буду весьма признателен за ответы с фрагментами кода.

1 Ответ

2 голосов
/ 19 января 2020

Все, что вам нужно сделать, это получить прогнозы модели:

model_predictions <- predict(fmi)

Теперь вы можете проверить прогнозы по отсутствующим индексам данных:

missing <- which(is.na(iris.mis$Sepal.Length))
imputed <- model_predictions[missing]
imputed
#>         5        22        27        32        34        35        54        60 
#> 5.073695* 5.119113* 5.182343* 4.949794* 5.381427* 4.863149* 5.565716* 5.596861* 
#>        89       102       107       117       131       135       145       149 
#> 5.950823* 6.217764* 5.757642* 6.829916* 7.116657* 6.726274* 6.738296* 6.662452* 
#>       150 
#> 6.428420* 

и посмотреть, как они сравниваются с фактические значения:

actual <- iris$Sepal.Length[missing]

plot(x = actual, y = imputed, xlim = c(4, 8), ylim = c(4, 8), col = "red",
     xlab = "Actual", ylab = "Imputed", main = "Imputed vs Actual Sepal Length")
lines(c(4, 8), c(4, 8), lty = 2)

enter image description here

#>  # calculate residuals
imputed - actual 
#>            5           22           27           32           34           35 
#>  0.07369483*  0.01911295*  0.18234346* -0.45020634* -0.11857279* -0.03685114* 
#>           54           60           89          102          107          117 
#>  0.06571631*  0.39686061*  0.35082282*  0.41776385*  0.85764178*  0.32991602* 
#>          131          135          145          149          150 
#> -0.28334270*  0.62627448*  0.03829600*  0.46245174*  0.52842038* 
#>
#> # sum of squared errors
sum((imputed - actual)^2)
#> [1] 2.52802

Итак, если вы хотите, чтобы в вашем наборе был новый столбец с подстановками, которые вы можете сделать

iris.mis$Sepal.Length.Imputed <- iris.mis$Sepal.Length
iris.mis$Sepal.Length.Imputed[is.na(iris.mis$Sepal.Length.Imputed)] <- imputed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...