如何使用循环在R中查找RMSE

4
如果我有一个包含3个变量的数据框:
origdata <- data.frame(
  age <- c(22, 45, 50, 80, 55, 45, 60, 24,   18, 15),
  bmi <- c(22, 24, 26, 27, 28, 30, 27, 25.5, 18, 25),
  hyp <- c(1,  2,  4,  3,  1,  2,  1,  5,    4,  5) )

我创建了MCAR(完全随机缺失)数据:

halpha <- 0.1

# MCAR for attribute (1) age:
mcar <- runif(10, min = 0, max = 1)  
age.mcar <- ifelse(mcar < alpha, NA, origdata$age)  

# MCAR for attribute (2) bmi: 
mcar <- runif(10, min = 0, max = 1) 
bmi.mcar <- ifelse(mcar < alpha, NA, origdata$bmi)  

# MCAR for attribute (3) hyp: 
mcar <- runif(10, min = 0, max = 1) 
hyp.mcar <- ifelse(mcar < alpha, NA, origdata$hyp)  

接下来,我使用mice软件包来进行缺失值的填补,具体操作如下:

install.packages("mice")
library("mice")
imp <- mice(df, 10)              # 10 is mean 10 iteration imputing data 
fill1 <- complete(imp, 1)        # dataset 1
fill2 <- complete(imp, 2)        # dataset 2
allfill <- complete(imp, "long") # all iterations together 

我的问题是:我想通过循环为10个数据集分别找到RMSE。这是我的RMSE方程:

RMSE <- sqrt((sum((origdata - fill)^2)) / sum(is.na(df)))

我想要做一个循环,分别为每个填充后的数据集找到RMSE:
RMSE1(对于数据集#1)
RMSE2(对于数据集#2)
...
RMSE10(对于数据集#10)

我还想知道哪个数据集最适合用于填补NA


1
为什么RMSE能够说明哪个插补运行是“最佳”的。看起来这将是一个经典的“先入为主”的情况。我认为你需要的是统计建议,而不是编程帮助。 - IRTFM
1
通常,如果进行多重插补,会在对每个插补数据集进行分析后使用模型平均。通常不会按照您所描述的方式选择“最佳”插补。 - alexwhitworth
好的,你认为均方根误差不是检查哪种插补方法最好的最佳工具。请给我建议,有哪些新工具可以知道哪种插补方法最好。 - zhyan
1
@Alex,你是指这种方式吗?fit <- with(imp2, lm(ch1.mcar~age.mcar+bmi.mcar)) pool(fit) summary(pool(fit)) - zhyan
1个回答

4

R中的循环:

m <- imp$m  # number of imputations

RSME <- rep(NA, m)
for (i in seq_len(m)) {
  fill <- complete(imp, i)
  RMSE[i] <- (sqrt((sum((orgdata - fill)^2))/sum(is.na(x))))
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接