逻辑回归的解释和绘图

Y. *_*kes 5 r ggplot2 facet-wrap logistic-regression

我目前正在进行一项涉及不同种类蝙蝠和栖息地破碎化的研究。我的数据集包含存在数据(1 = 存在,0 = 不存在)和关于片段大小、体重(均连续)和饲养行会(Feeding.Guild;分类,6 个级别:食肉动物、食果动物、食虫动物、蜜食动物、杂食动物和食血动物的数据)。使用自然对数转换碎片大小 (logFrag) 和体质量 (logMass) 以符合正态分布。由于被分类,我无法提供完整的数据集 (bats2)。

为了分析这些数据,我使用逻辑回归。在 R 中,这是具有二项式族的 glm 函数。

bats2 <- read.csv("Data_StackExchange.csv", 
                 quote = "", sep=";", dec = ".", header=T, row.names=NULL)
bats2$presence <- ifelse(bats2$Corrected.Abundance == 0, 0, 1)
bats2$logFrag <- log(bats2$FragSize)
bats2$logMass <- log(bats2$Mass)
str(bats2$Feeding.Guild)
     Factor w/ 6 levels "carnivore","frugivore",..: 6 1 5 5 2 2 2 2 2 2 ...    
levels(bats2$Feeding.Guild)
    [1] "carnivore"    "frugivore"    "insectivore"  "nectarivore"  "omnivore"     "sanguinivore"


regPresence <- glm(bats2$presence~(logFrag+logMass+Feeding.Guild), 
                   family="binomial", data=bats2)
Run Code Online (Sandbox Code Playgroud)

这个回归的结果是通过summary()函数得到的,如下。

Coefficients:
                          Estimate Std. Error z value Pr(>|z|)    
(Intercept)               -4.47240    0.64657  -6.917 4.61e-12 ***
logFrag                    0.10448    0.03507   2.979 0.002892 ** 
logMass                    0.39404    0.09620   4.096 4.20e-05 ***
Feeding.Guildfrugivore     3.36245    0.49378   6.810 9.78e-12 ***
Feeding.Guildinsectivore   1.97198    0.51136   3.856 0.000115 ***
Feeding.Guildnectarivore   3.85692    0.55379   6.965 3.29e-12 ***
Feeding.Guildomnivore      1.75081    0.51864   3.376 0.000736 ***
Feeding.Guildsanguinivore  1.73381    0.56881   3.048 0.002303 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是验证我是否正确解释了这些数据:如何正确解释这些数据?我使用这个网站来帮助我进行口译。

此外,我尝试绘制这些数据以将其可视化。然而,当添加 facet_wrap 函数为不同的喂养公会制作单独的图时,与在一个图中为不同的喂养公会着色相比,截距和斜率会发生变化。我使用了以下代码:

情节 1:

library(ggplot2)
qplot(logFrag, bats2$presence, colour=Feeding.Guild, data=bats2, se=F) +
  geom_smooth(method = glm, family = "binomial", se=F, na.rm=T) + theme_bw() 
Run Code Online (Sandbox Code Playgroud)

情节 2:

qplot(logFrag, bats2$presence, data=bats2, se=F) + facet_wrap(~Feeding.Guild, 
                                                              scales="free") +
  geom_smooth(method = glm, family = "binomial", se=F, na.rm=T) + theme_bw() 
Run Code Online (Sandbox Code Playgroud)

产生以下图像:

图 1(左)和图 2(右)。

是什么导致了这些差异,哪一个是正确的?

样本数据集(未分类的数据集的一部分)。

Mil*_*ain 2

您链接到的资源在标题下的项目符号部分中有解释说明Using the logit modelEstimate是每个协变量对存在对数几率的加性效应。这是连续协变量每增加 1 个单位或校准类别的每个实例。对此有几点:

  • 因为您已经取了连续协变量的对数,所以它们的影响是对数刻度上的每 1 个单位 - 很难解释。我强烈建议不要这样做。为了拟合该模型,不需要FragSize或 的正态性。Mass
  • 注意到列表中缺少您的一个类别吗?协变量的影响必须根据某些参考来测量。在这种情况下,参考是logFrag=0 和logMass=0 的食肉动物。这些 0 值是不可能的。这是很常见的,也是为什么解释对(Intercept)您没有用处。

在 上Std. Error,这是衡量您对效果的信心的指标EstimateStd. Error人们经常使用围绕的正态近似值 +- 2*Estimate来形成置信区间并使用它们进行陈述。当 +- 2* 的区间Std. Error包含 0 时,真实效果有可能为 0。您不希望出现这种情况,因此您正在寻找相Std. Error对于Estimate

z valuePr(>|z|)与我提到的正常近似值相关。您可能已经知道 Z 分数(标准正态)是什么以及人们如何使用它们来执行显着性检验。

现在来看你的图:这些图实际上并不是在绘制你的模型。您正在使用平滑器来拟合类似类型但针对不同数据集的新模型。logFrag平滑者只考虑在每个公会内部拟合一个迷你逻辑模型的效果。

因此,我们预计这些图与 不同summary(),但彼此之间没有差异。发生这种情况的原因很有趣,它与使用bats2$presence而不是presence. 当您传入 时bats2$presence,这实际上就像向 ggplot2 传递一个单独的匿名数据列表一样。只要该列表与您期望的数据框一致,一切就都很好。看起来facet_wrap()在使用时混淆了数据bats2$presence,可能是由于bats2按行会排序。使用普通旧的presence,它们会得到相同的结果。