了解R中的预测平均数匹配和回归建模
在现实世界中,数据集存在缺失值/数据,这给数据科学家带来了麻烦,他们可能会通过临时填补数据集的方式来处理这个问题。因此限制了他们对数据科学主要目标的追求:数据可视化、数据建模以及对数据集进行有意义的总结或分析。
本教程旨在使用预测性均值匹配和创建预测性回归模型来替换缺失的数据。我们将解释每种方法在每个用例中的适用性、优势和限制。
在我们的教程中,我们将使用R编程语言,使用预测性均值匹配和进行PMM的分析来统计估算数据集中的缺失值,并创建一个回归模型。
让我们开始吧。
前提条件
要完成这个教程,读者应该。
- [安装有R studio]。
- 对R编程语言有基本了解。
- 基本的数据预处理方法。
目标
在本教程结束时,读者应该能够。
- 理解并能够使用这些方法进行数据归因。
- 处理数据集中的缺失数据。
- 使用给定的绘图函数可视化缺失数据集。
在R中安装和加载软件包
在本教程的第一步,我们需要安装和加载软件包,这些软件包将用于我们的归因和可视化数据。让我们安装以下软件包;VIM,mice,ggplot2 ,因为我们将使用其中的一些函数。
预测平均数匹配和使用情况
预测平均数匹配(PMM)是一种归因技术,通过与观察值/数据匹配来估计缺失数据的可能值。这可以通过单次归置或多次归置来进行。
单一归因法
让我们把VIM包中的一个数据集称为nhanes 。
head(nhanes)
我们的模型将假设chl 作为响应变量,bmi 和hyp 作为预测变量。
为了找出缺失值的百分比,我们将使用mean() 和is.na() 函数。
mean(is.na(nhanes$hyp))
[1] 0.32
mean(is.na(nhanes$bmi))
[1] 0.36
mean(is.na(nhanes$chl))
[1] 0.4
在数据集中,分别有32%、36%、40%的hyp、bmi、chl缺失。
使用预测平均数匹配法解决缺失值的问题
为此,我们将使用R中的mice 包。我们将应用这个包中的一些函数,即complete() 和mice() 函数来估算我们的数据。由于我们只对我们的数据进行第一次估算,我们让m等于1。
imp <- complete(mice(nhanes, m = 1, method = "pmm"))
#our imputed values are stored in the working environment
#we are doing a single imputation hence m=1
要查看我们的数据。
head(imp)
#putting our data in format for viewing
数据存储在我们的环境中,点击imp 来查看它。
绘制我们的估算值
heart.plot <- ggplot(imp, aes(x=bmi, y=chl)) +
geom_point()
heart.plot

为预测模型拟合一个线性回归
在R中编写以下代码,创建一个预测模型,我们的兴趣模型为:chl 作为响应变量,bmi ,hyp 作为预测变量。
fitmodel <- with(imp, lm(chl ~ bmi + hyp))
summary(fitmodel)
#we get the following below
估计BMI对胆固醇水平的影响是2.45,而估计高血压对胆固醇的影响是16.845。意味着BMI每增加1%,胆固醇水平的发生率就会相关地增加2.45%。
另外,高血压每增加1%,胆固醇水平的发生率也会增加1%。
MICE的多重推断
Mice 是一个软件包,它接收不完整的数据集;有缺失/NA值,然后通过适当的技术插入缺失值。默认的插入技术是预测性平均匹配, ,默认为等于5。m
对于多重归入,它所做的是为每个不完整的数据集创建多个完整的数据集,然后进行所需的分析,以获得所需的输出。在本节中,我们将在R中调用一个数据集,以显示通过多重归因的预测性平均匹配。
对于我们的教程,我们选择在mice 中找到的nhanes 数据集,该数据集有4个变量age,BMI,hyp, 和chl 。在我们的案例中,我们将优先建模胆固醇水平与年龄和高血压的关系。
让我们通过以下步骤在R中加载我们的数据。
library(mice)
library(VIM)
head(nhanes)
#to view the data in nhanes we use the head function
age bmi hyp chl
1 1 NA NA NA
2 2 22.7 1 187
3 1 NA 1 187
4 3 NA NA NA
5 1 20.4 1 113
6 3 NA NA 184
我们需要VIM 进行绘图。在我们的案例中,让我们把我们的响应变量作为cholesterol level ,预测变量作为age 和hypertension 。mice包还提供了一些函数,使我们能够检查数据集中的缺失数据模式。为了检查我们的nhanes 数据集中的缺失数据模式,我们将使用函数md.pattern() 。
md.pattern(nhanes)
age hyp bmi chl
13 1 1 1 1 0
3 1 1 1 0 1
1 1 1 0 1 1
1 1 0 0 1 2
7 1 0 0 0 3
0 8 9 10 27
这标志着25行中的13行已经完成。只有一行的bmi 是缺失的,还有七行只有age ,对于27个缺失的变量,chl 的缺失值等于10。
我们可以有四种类型的缺失数据模式以数组形式表示。
- 两对值都被观察到的观察,用
rr表示。 - 行中的第一个变量是观察到的,而列中的第二个变量是缺失的
rm。 - 第三种模式第一个变量缺失,而第二个变量被观察到
mr。 - 两个变量都缺失的观察
mm。
为了查看成对模式,我们使用md.pairs() 来查看成对模式,并将结果存储在一个模式对对象中。当我们调用pattern-pairs 对象时,它给我们提供了四个给出模式的矩阵。
md.pairs(nhanes)
为了显示屏幕截图,我们使用VIM 包来获得pbox() 函数,以可视化我们的NHANES 数据集中的缺失数据。
pbox(nhanes,pos=1,int=GFALSE,cex=0.7)

让我们开始我们的归因过程
为了开始我们的估算,我们所需要的是我们的数组的名称,在我们的例子中是nhanes 数据集。
imp<-mice(nhanes)
我们将把它存储在imp 对象中。
访问归入的实例和归入的值
第一个归入的数据集可以通过在r中编写以下代码获得。
head(complete(imp))
#for the first instance of imputation
#head function to represent our data in data frame format
age bmi hyp chl
1 1 22.7 1 187
2 2 22.7 1 187
3 1 30.1 1 187
4 3 28.7 2 186
5 1 20.4 1 113
6 3 25.5 2 184
对于第二个,我们写。
head(complete(imp,2))
#for the second instance of imputation
age bmi hyp chl
1 1 22.5 1 118
2 2 22.7 1 187
3 1 25.5 1 187
4 3 27.4 1 218
5 1 20.4 1 113
6 3 21.7 1 184
我们可以进入第五个实例,我们也可以通过在r中运行以下代码来检查存储在5个归类数据集中的每个归类变量值。
imp$imp$chl
#the second objectname,imputedvalue,is because we want the values to be stored in it
1 2 3 4 5
1 187 118 199 187 187
4 186 218 218 218 204
10 229 186 204 206 187
11 187 199 187 206 131
12 199 187 218 206 206
15 187 186 187 199 187
16 184 113 238 204 131
20 186 218 184 186 199
21 187 238 187 229 113
24 184 204 187 206 284
对于我们的下一步,我们将我们的归类数据集与原始的nhanes 数据集附加起来。我们使用mice 中的一个函数,即complete() 函数,来进行这项工作。然后我们使用inc=TRUE 参数来指定我们要与我们的原始观察数据相结合的内容。让我们在R中运行以下代码来产生这个结果。
imp2<- complete(imp, "long", inc = TRUE)
#it is converted to a format that can be used in other statistical programs eg spss.
#to view click `imp2` on the environment
拟合线性回归模型--预测模型
正如我们前面所说,我们的目的是建立一个预测模型,胆固醇水平是我们的响应变量,年龄和高血压状态是我们的预测变量。在R中运行以下代码将分别对我们的回归模型进行近似,从第一个到第五个归类的数据集。
fitmodel <- with(imp, lm(chl ~ age + hyp))
summary(fitmodel)
#we use summary to give more details eg confidence interval,also the fmi
# A tibble: 15 x 6
term estimate std.error statistic p.value nobs
<chr> <dbl> <dbl> <dbl> <dbl> <int>
1 (Intercept) 162. 21.4 7.56 0.000000148 25
2 age 15.1 10.9 1.39 0.179 25
3 hyp 2.68 20.7 0.130 0.898 25
4 (Intercept) 124. 26.3 4.71 0.000108 25
5 age 20.4 10.2 2.01 0.0571 25
6 hyp 25.8 22.6 1.14 0.266 25
7 (Intercept) 164. 22.2 7.38 0.000000221 25
8 age 13.1 11.3 1.16 0.259 25
9 hyp 6.72 21.5 0.312 0.758 25
10 (Intercept) 167. 21.8 7.66 0.000000120 25
11 age 14.2 11.1 1.29 0.212 25
12 hyp 3.78 21.1 0.179 0.859 25
13 (Intercept) 127. 23.9 5.30 0.0000253 25
14 age 32.9 10.9 3.01 0.00642 25
15 hyp 2.58 19.8 0.130 0.898 25
对所有五个回归模型的完整案例分析
我们在R语言中写下以下代码来得到这个输出。
pool(fitmodel)
Class: mipo m = 5
term m estimate ubar b t dfcom df
1 (Intercept) 5 148.600681 537.6359 458.70483 1088.0817 22 6.098614
2 age 5 19.137087 118.0776 67.13213 198.6361 22 8.049288
3 hyp 5 8.301152 447.3520 97.94613 564.8873 22 13.659099
riv lambda fmi
1 1.0238263 0.5058864 0.6144994
2 0.6822511 0.4055584 0.5131566
3 0.2627357 0.2080687 0.3031436
为了得到所有五个归入的综合的健康的预测模型
在R语言中写下以下代码。
summary(pool(fitm))
term estimate std.error statistic df p.value
1 (Intercept) 148.600681 32.98608 4.5049507 6.098614 0.003921111
2 age 19.137087 14.09383 1.3578341 8.049288 0.211353135
3 hyp 8.301152 23.76736 0.3492669 13.659099 0.732214796
在这里,我们得到我们的预测性线性回归模型的预期参数评价集合。
结论
对于连续数据,mice 中默认的预测平均匹配为m,5。这种方式提供了拥有完整数据的许多特征的归入。归入的数据位于供体变量的范围内,这意味着它们上下都有界限。
然后,我们使用回归模型创建一个预测模型,在计算其他数值时我们将使用这个模型。MAR(Missing At Random)是我们在mice 库中使用的响应机制。