使用 R 在 logit 尺度上创建单变量平滑散点图

机器算法验证 r 数据可视化 罗吉特 黄土 散点图
2022-04-11 07:30:39

我正在从Hosmer的Applied Logistic Regression一书中学习逻辑回归建模。

我需要创建一个名为“在 logit 尺度上创建单变量平滑散点图”的图,类似于这个(图 4.2 第 107 页): 在此处输入图像描述

任何人都可以帮忙吗?谢谢。

编辑 01

感谢所有的答案。我尝试创建绘图,并发现在创建 y 轴时smooth.spline使用百分比 ( nrow((df[df[,"dfree"]==1,]))/nrow(df)) 而不是 logit ( ) 创建了图形。log(nrow(df[df[,"dfree"]==1,])/nrow(df[df[,"dfree"]==0,]))是的,图表看起来很相似,但我想知道我们是否可以创建一个精确的副本?谢谢。

还有一件事,当使用 logit 时,data.frame 中的一些 logit 值是-Infand Inf,这是不允许的smooth.spline

编辑 02

我对我的编辑还有进一步的疑问:如果我手动删除所有Inf-Inf在我的 data.frame 中并smooth.spline在那个 data.frame 上执行?合适吗?

3个回答

您可以在网上找到 H&L ALR。我相信 L&H 所做的只是简单地将黄土拟合到 dfree ~ age 关系,然后将预期概率转换为 logits。见下文。

uis<-read.delim("http://www.umass.edu/statdata/statdata/data/uis.dat",                  
                skip=4, sep="", header=FALSE) 
names(uis)<-c("id","age","beck","ivhx","ndrugx","race","reat","site","dfree")  
lfit<-loess(uis$dfree~uis$age) 
lgpred<-log(predict(lfit)/(1-predict(lfit))) 
plot(lgpred~uis$age)

在此处输入图像描述

正如@Momo 所说,从那里您可以使用平滑参数来获得更好的再现。

在本例中没有发生这种情况,但您必须注意,黄土模型不会被冲昏头脑并产生位于 (0,1) 之外的“平滑”概率。以 Brett 为例

lprob <- predict(lfit)
lprob <- apply(cbind(lprob, 0.01), MARGIN=1, FUN=max)
lprob <- apply(cbind(lprob, 0.99), MARGIN=1, FUN=min)

作为一个通过 Hosmer 和 Lemeshow 工作的新手,我发现绘制黄土拟合(作为概率)与年龄的关系很有趣——你会很好地了解它是如何在不平滑的 0 和 1 之间随着年龄的增长而形成“加权平均值”的.

顺便说一下,要非常接近制作的 H+L 图表,请尝试

lfit <- loess(uis$dfree ~ uis$age, span=.6, degree=1)

这里的关键是 logit 绘制在 y 轴上。当您运行逻辑回归时,通常您的数据是一列 1 和 0。当值仅出现在有限数量的离散 x 值时,可以将它们“分组”或转换为百分比。让我们假设您的数据是百分比。logit 变换为:

l=ln(p1p)

其中是 logit,是百分比,(显然)是自然对数。给定这些值,可以在 R 中使用. lplnplot(lowess(logit~age))

如果您的数据没有分组(或分组),那么这将不起作用。(例如,的自然对数是,而是未定义的。在这种情况下,您可能会先将一个 lowess 拟合到未转换的上(这将产生预测概率),然后将 lowess 拟合分配给一个变量。然后变量可以如上所述进行转换和绘制。 0-Inf.1/0y