如何使用base R和ggplot绘制逻辑回归模型的结果 **创建一个新的数据帧并添加一个名为surv24的二进制列** (数据=24,1,0) 白细胞抗原时间surv24 1230至651 2750至1561 34300目前1001 42600至1341 56000目前160 6 10500目前108 1 7 4000 17 0 **logistic回归模型** logistic.model
如果没有更多的样本数据,就不可能给出一个工作示例作为答案。因此,我将尝试对您的数据集进行反向工程:如何使用base R和ggplot绘制逻辑回归模型的结果 **创建一个新的数据帧并添加一个名为surv24的二进制列** (数据=24,1,0) 白细胞抗原时间surv24 1230至651 2750至1561 34300目前1001 42600至1341 56000目前160 6 10500目前108 1 7 4000 17 0 **logistic回归模型** logistic.model,r,ggplot2,R,Ggplot2,如果没有更多的样本数据,就不可能给出一个工作示例作为答案。因此,我将尝试对您的数据集进行反向工程: set.seed(123) 白细胞37 9550缺失104 0 这看起来相当接近。现在我们将创建您的模型。不清楚您为什么要记录白细胞计数:这会扭曲您的最终结果,并且没有必要,因此我们将仅使用白细胞计数运行模型: logistic.model #>电话: #>glm(公式=surv24~wbc+ag,family=“二项式”,data=leukemia.data) #> #>偏差残差: #>最小
set.seed(123)
白细胞37 9550缺失104 0
这看起来相当接近。现在我们将创建您的模型。不清楚您为什么要记录白细胞计数:这会扭曲您的最终结果,并且没有必要,因此我们将仅使用白细胞计数运行模型:
logistic.model
#>电话:
#>glm(公式=surv24~wbc+ag,family=“二项式”,data=leukemia.data)
#>
#>偏差残差:
#>最小1季度中值3季度最大值
#> -2.0564 -0.8820 0.4460 0.8258 1.9888
#>
#>系数:
#>估计标准误差z值Pr(>z)
#>(截距)5.7107385 2.4790234 2.304 0.02124*
#>wbc-0.0007356 0.0002790-2.636 0.00839**
#>agpresent 2.1593304 0.4922130 4.387 1.15e-05***
#> ---
#>签名。代码:0'***'0.001'***'0.01'*'0.05'.'0.1''1
#>
#>(二项式族的离散参数取为1)
#>
#>零偏差:在99个自由度上为138.47
#>剩余偏差:97自由度时为110.56
#>AIC:116.56
#>
#>Fisher评分迭代次数:4
为了生成漂亮的逻辑线,我们需要创建一个虚拟数据集,其中包含我们希望绘制的x值范围内的样本:
**creat a new data frame and add a binary column called surv24**
leukemia.data <- data.frame(wbc = leuk$wbc, ag = leuk$ag, time = leuk$time, surv24 =ifelse(leuk$time>=24, 1,0))
Wbc ag time surv24
1 2300 present 65 1
2 750 present 156 1
3 4300 present 100 1
4 2600 present 134 1
5 6000 present 16 0
6 10500 present 108 1
7 4000 absent 17 0
**logistic regression model**
logistic.model <- glm(surv24 ~ log.wbc + ag, family='binomial', data=leukemia.data)
summary(logistic.model)
fit <- predict(logistic.model, type='response')
leuki <- data.frame (cbind(leukemia.data, fit))
ag_present <- subset(leuki[leuki$ag=='present',])
ag_absent <- subset(leuki[leuki$ag=='absent',])
plot(surv24 ~ wbc, data = leukemia.data, main = "Survival Probablity vs Number of White blood cells", xlab = "Number of White blood cells", ylab = "Surviavla Probablity")
lines(ag_present$wbc, ag_present$fit, col='red')
lines(ag_absent$wbc, ag_absent$fit, col='green')
legend(0.8,85000, legend =c("Simple Linear Regression Model Predictions","Quadratic Regression Model Predictions"), col = c("green","red"), lty = 1:2, cex=0.7)
但是,要在base R图形中重新创建目标绘图,可以执行以下操作:
plot(虚拟测向$wbc[1:151]/1000,虚拟测向$surv24[1:151],
type=“l”,col=“green”,ylim=c(0,1),
ylab=“24周前死亡的概率”,
xlab=“WBC计数”,bty=“L”)
行(dummy_df$wbc[152:302]/1000,dummy_df$surv24[152:302],col=“黑色”)
使用(白血病数据,点数)(白细胞[ag==“存在”]/1000,
surv24[ag==“present”],col=“red”))
有(白血病)数据,分(白细胞[ag==“缺失”]/1000,
surv24[ag==“缺席”,col=“黑色”))
图例(“右上角”,图例=c(“缺席”,“在场”),title=“AG测试”,
lty=c(1,1),col=c(“黑色”、“绿色”),pch=c(1,2),bty=“L”)
现在主要的警告是:既然你已经有了原始生存时间,你可能应该把它作为生存分析,而不是逻辑回归,由于转换为二进制结果会损失大量统计能力。我同意对数转换部分,如果我的系数接近零,我应该在运行模型后应用它。数据来自包{MASS},包含完整数据集的表被称为(leuk)。您可以使用完整的数据集重做解决方案吗?非常感谢。
dummy_df <- data.frame(ag = rep(c("present", "absent"), each = 151),
wbc = rep(seq(0, 15000, 100), 2))
dummy_df$surv24 <- predict(logistic.model, newdata = dummy_df, type = "response")