1

我正在尝试对数据集进行逻辑回归。我已将年龄(分类变量)转换为二进制(0 =“成人”,1 =“未成熟”)。尾巴长度是一个连续的数值变量,我想预测尾巴长度大于 220 毫米的动物未成熟的概率。

两个年龄段的样本量存在很大差异,如下所示:

table(rt$Age)

#  Adult   Immature
120         448 

一些代码:

rt$bin_age <- rt$Age # Create a separate vector to convert Age to binary

rt$bin_age <- recode(rt$Age, "A" = 0, "I" = 1)

library(ggplot2)
ggplot(rt, aes(x = Tail,
                 y = bin_age)) +
  geom_jitter(color = "blue", 
              size = 3, 
              height = 0.04,
              width = 0.2,
              alpha = 0.5) +
  geom_smooth(method = "loess", size = 1, 
              col = "red", lty = 2, se = FALSE) +
  labs(x = "Tail Length (in mm)", y = "Sex") +
  theme_classic()

当我使用 ggplot 绘制数据时,我得到以下图像:

尾长 (x) 与性别 (y) 的关系图

它不是产生一个漂亮的直接 S 形曲线,而是产生更多的“横向 S”曲线。

我确定了三个小于 175 毫米的异常值,因此我将它们删除:

# Use 175mm as the cut-off = remove values <175mm

which(rt$Tail < 175) #  Rows 261, 317 and 361

# Remove rows 261, 317 and 361
rt <- rt[-c(261, 317, 361) ,]

并得到了这张图片:

尾长 (x) 与性别 (y) 的关系图

这是否是因为两个群体之间的样本量不同而发生的?有没有办法使样本量相等(例如通过循环子采样或其他方法),以便我可以更恰当地解释这一点?

我还运行了一个visreg()带有异常值的图表,我不确定它是否更适合使用?

age_glm <- glm(bin_age ~ Tail,
               family = binomial(link = "logit"),
               data = rt)

summary(age_glm)

visreg(age_glm, xvar = "Tail", scale = "response", rug = FALSE)
points(jitter(bin_age, 0.2) ~ Tail, ylim = c(-0.1, 1.1),
        data = rt, 
        pch = 20, col = "black", cex = 1, lwd = 1)

给我这张图:

    It still looks a bit funky...

请注意,我使用了 Kruskal-Wallis 测试来测试年龄之间在尾巴长度方面的差异,并且 P <0.001,所以我期待图表中有更显着的差异。

4

0 回答 0