我正在尝试对数据集进行逻辑回归。我已将年龄(分类变量)转换为二进制(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 绘制数据时,我得到以下图像:
它不是产生一个漂亮的直接 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) ,]
并得到了这张图片:
这是否是因为两个群体之间的样本量不同而发生的?有没有办法使样本量相等(例如通过循环子采样或其他方法),以便我可以更恰当地解释这一点?
我还运行了一个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,所以我期待图表中有更显着的差异。