Все, что вам нужно сделать, это получить прогнозы модели:
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)
#> # 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