Matchit 包中的警告 ("Glm.fit: fitted probabilities numerically 0 or 1 occurred") 如何处理?
Warning in the Matchit package ("Glm.fit: fitted probabilities numerically 0 or 1 occurred") How to deal with that?
我是 运行 一个具有大约 200.000 个观察值的代码,其中 10.000 个被处理,其余的我正在尝试使用包 MatchIt 进行匹配。
由于这些变量之一,出现了一条警告消息,我不知道是否应该忽略它。消息是:Glm.fit:拟合概率数值为 0 或 1 发生
我 运行 的代码类似于下面的代码:
m.out <- matchit(var ~ VAR1 + VAR2 + VAR3 + VAR4 + VAR5, data = mydata, method = "nearest", exact = c("VAR1", "VAR3", "VAR5"))
为了便于说明,假设有问题的变量是 "VAR5"。这个变量是一个字符变量,有大约 200 个不同的文本。所以,我的问题是这个警告是否是一个真正的问题,或者它是否只是因为这个变量中的选项太多,无法满足我的数据大小,因此,不可能找到 treatment/control 预测?无论如何,我可以做些什么来避免这个警告?
最佳,
MatchIt
默认情况下通过 glm
函数使用逻辑回归来估计倾向得分。这个警告意味着逻辑回归模型已经过度拟合,一些变量完美地预测了治疗状态。这可能表明违反了积极性(即,您的两组从根本上彼此不同),但是,正如您所提到的,可能只是一个相对不重要的特征有很多类别,其中一些与治疗完全重叠。有几种方法可以解决这个问题;其中之一确实是放弃 VAR5,但您也可以尝试使用不受此问题影响的方法在 MatchIt
之外估计自己的倾向得分,然后将这些倾向得分提供给 matchit()
通过distance
参数。
我想到了两种方法。第一种是使用 brglm2
,这是一个实现拟合逻辑回归模型的替代方法的包,因此拟合概率永远不会为 0 或 1。这种方法很容易实现,因为它只使用 glm
函数。
第二种是使用执行正则化(即变量选择)的机器学习方法,以便仅包括对分析重要的变量和因素水平。您可以使用 glmnet
执行套索或弹性网络逻辑回归,您可以使用 gbm
或 twang
进行广义增强建模,或者您可以使用 SuperLearner
堆叠多个机器学习方法并从中做出最好的预测。然后,您可以将预测值提供给 matchit()
.
我是 运行 一个具有大约 200.000 个观察值的代码,其中 10.000 个被处理,其余的我正在尝试使用包 MatchIt 进行匹配。
由于这些变量之一,出现了一条警告消息,我不知道是否应该忽略它。消息是:Glm.fit:拟合概率数值为 0 或 1 发生
我 运行 的代码类似于下面的代码:
m.out <- matchit(var ~ VAR1 + VAR2 + VAR3 + VAR4 + VAR5, data = mydata, method = "nearest", exact = c("VAR1", "VAR3", "VAR5"))
为了便于说明,假设有问题的变量是 "VAR5"。这个变量是一个字符变量,有大约 200 个不同的文本。所以,我的问题是这个警告是否是一个真正的问题,或者它是否只是因为这个变量中的选项太多,无法满足我的数据大小,因此,不可能找到 treatment/control 预测?无论如何,我可以做些什么来避免这个警告?
最佳,
MatchIt
默认情况下通过 glm
函数使用逻辑回归来估计倾向得分。这个警告意味着逻辑回归模型已经过度拟合,一些变量完美地预测了治疗状态。这可能表明违反了积极性(即,您的两组从根本上彼此不同),但是,正如您所提到的,可能只是一个相对不重要的特征有很多类别,其中一些与治疗完全重叠。有几种方法可以解决这个问题;其中之一确实是放弃 VAR5,但您也可以尝试使用不受此问题影响的方法在 MatchIt
之外估计自己的倾向得分,然后将这些倾向得分提供给 matchit()
通过distance
参数。
我想到了两种方法。第一种是使用 brglm2
,这是一个实现拟合逻辑回归模型的替代方法的包,因此拟合概率永远不会为 0 或 1。这种方法很容易实现,因为它只使用 glm
函数。
第二种是使用执行正则化(即变量选择)的机器学习方法,以便仅包括对分析重要的变量和因素水平。您可以使用 glmnet
执行套索或弹性网络逻辑回归,您可以使用 gbm
或 twang
进行广义增强建模,或者您可以使用 SuperLearner
堆叠多个机器学习方法并从中做出最好的预测。然后,您可以将预测值提供给 matchit()
.