绘制逻辑回归残差与预测变量时的奇怪图?
Weird plots when plotting logistic regression residuals vs predictor variables?
我已经为一个结果(一种副作用——无论患者有没有)拟合了逻辑回归。该模型的公式和结果如下:
model <- glm(side_effect_G1 ~ age + bmi + surgerytype1 + surgerytype2 + surgerytype3 + cvd + rt_axilla, family = 'binomial', data= data1)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -7.888112 0.859847 -9.174 < 2e-16 ***
age 0.028529 0.009212 3.097 0.00196 **
bmi 0.095759 0.015265 6.273 3.53e-10 ***
surgery11 0.923723 0.524588 1.761 0.07826 .
surgery21 1.607389 0.600113 2.678 0.00740 **
surgery31 1.544822 0.573972 2.691 0.00711 **
cvd1 0.624692 0.290005 2.154 0.03123 *
rt1 -0.816374 0.353953 -2.306 0.02109 *
我想检查我的模型,所以我根据预测变量或拟合值绘制了残差。我知道,如果模型拟合得当,残差和预测变量与拟合值之间应该没有相关性,所以我基本上 运行...
residualPlots(model)
我的图看起来很有趣,因为从我从在线示例中看到的情况来看,它应该围绕 0 对称。此外,尽管我检查了数据结构,但我的因子变量并未显示在箱线图中并将 surgery1、surgery2、surgery4、cvd、rt 作为因素进行编码。有人可以帮我解释我的图并指导我如何为我的因子变量绘制箱线图吗?
谢谢
您的标签或响应变量应适用于不平衡的数据集。从你的图中来看,你的大部分残差实际上都低于虚线,所以我怀疑是这种情况。
简而言之,当您的 classes 平衡时,残差周围的对称性仅适用于逻辑回归。如果它对参考标签(或 0 标签)严重不平衡,则截距将被迫朝向较低的值(即 0 标签),您将看到正标签将具有非常大的皮尔逊残差(因为它们偏离了 a很多从预期)。您可以在 this post
中阅读有关不平衡 class 和逻辑回归的更多信息
这里有一个例子来证明这一点,使用一个数据集,您可以在其中看到均匀分布的残基:
library(mlbench)
library(car)
data(PimaIndiansDiabetes)
table(PimaIndiansDiabetes$diabetes)
neg pos
500 268
mdl = glm(diabetes ~ .,data=PimaIndiansDiabetes,family="binomial")
residualPlots(mdl)
让我们让它更不平衡,你会得到一个和你的一模一样的情节:
da = PimaIndiansDiabetes
wh = c(which(da$diabetes=="neg"),which(da$diabetes == "pos")[1:100])
da = da[wh,]
table(da$diabetes)
neg pos
500 100
mdl = glm(diabetes ~ .,data=da,family="binomial")
residualPlots(mdl)
我已经为一个结果(一种副作用——无论患者有没有)拟合了逻辑回归。该模型的公式和结果如下:
model <- glm(side_effect_G1 ~ age + bmi + surgerytype1 + surgerytype2 + surgerytype3 + cvd + rt_axilla, family = 'binomial', data= data1)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -7.888112 0.859847 -9.174 < 2e-16 ***
age 0.028529 0.009212 3.097 0.00196 **
bmi 0.095759 0.015265 6.273 3.53e-10 ***
surgery11 0.923723 0.524588 1.761 0.07826 .
surgery21 1.607389 0.600113 2.678 0.00740 **
surgery31 1.544822 0.573972 2.691 0.00711 **
cvd1 0.624692 0.290005 2.154 0.03123 *
rt1 -0.816374 0.353953 -2.306 0.02109 *
我想检查我的模型,所以我根据预测变量或拟合值绘制了残差。我知道,如果模型拟合得当,残差和预测变量与拟合值之间应该没有相关性,所以我基本上 运行...
residualPlots(model)
我的图看起来很有趣,因为从我从在线示例中看到的情况来看,它应该围绕 0 对称。此外,尽管我检查了数据结构,但我的因子变量并未显示在箱线图中并将 surgery1、surgery2、surgery4、cvd、rt 作为因素进行编码。有人可以帮我解释我的图并指导我如何为我的因子变量绘制箱线图吗?
谢谢
您的标签或响应变量应适用于不平衡的数据集。从你的图中来看,你的大部分残差实际上都低于虚线,所以我怀疑是这种情况。
简而言之,当您的 classes 平衡时,残差周围的对称性仅适用于逻辑回归。如果它对参考标签(或 0 标签)严重不平衡,则截距将被迫朝向较低的值(即 0 标签),您将看到正标签将具有非常大的皮尔逊残差(因为它们偏离了 a很多从预期)。您可以在 this post
中阅读有关不平衡 class 和逻辑回归的更多信息这里有一个例子来证明这一点,使用一个数据集,您可以在其中看到均匀分布的残基:
library(mlbench)
library(car)
data(PimaIndiansDiabetes)
table(PimaIndiansDiabetes$diabetes)
neg pos
500 268
mdl = glm(diabetes ~ .,data=PimaIndiansDiabetes,family="binomial")
residualPlots(mdl)
让我们让它更不平衡,你会得到一个和你的一模一样的情节:
da = PimaIndiansDiabetes
wh = c(which(da$diabetes=="neg"),which(da$diabetes == "pos")[1:100])
da = da[wh,]
table(da$diabetes)
neg pos
500 100
mdl = glm(diabetes ~ .,data=da,family="binomial")
residualPlots(mdl)