【问题标题】:Plot logistic regression using parameters in ggplot2使用 ggplot2 中的参数绘制逻辑回归
【发布时间】:2019-02-28 02:16:46
【问题描述】:

我想使用 ggplot2 直接从参数估计中绘制逻辑回归,但不太清楚该怎么做。

例如,如果我有 1500 次绘制 alpha 和 beta 参数估计值,我可以绘制每条线:

alpha_post = rnorm(n=1500,mean=1.1,sd = .15)
beta_post = rnorm(n=1500,mean=1.8,sd = .19)
X_lim = seq(from = -3,to = 2,by=.01)


for (i in 1:length(alpha_post)){
  print(i)
  y = exp(alpha_post[i] + beta_post[i]*X_lim)/(1+ exp(alpha_post[i] + beta_post[i]*X_lim) )

  if (i==1){plot(X_lim,y,type="l")}
  else {lines(X_lim,y,add=T)}
} 

我将如何在 ggplot2 中执行此操作?我知道如何使用 geom_smooth(),但这有点不同。

【问题讨论】:

  • 你可以给X_lim添加定义吗?我得到Error in X_lim : object 'X_lim' not found
  • 我刚做了。对此感到抱歉。

标签: r ggplot2


【解决方案1】:

在 ggplot 中,您希望创建一个包含所有需要绘制的数据的 data.frame:

d <- data.frame(
  alpha_post = alpha_post, 
  beta_post = beta_post,
  X_lim = rep(seq(from = -3,to = 2,by=.01), each = length(alpha_post))
)
d$y <- with(d, exp(alpha_post + beta_post * X_lim) / (1 + exp(alpha_post + beta_post * X_lim)))

那么绘图本身就变得很容易了:

ggplot(d, aes(X_lim, y, group = alpha_post)) + geom_line()

如果您想更花哨,请添加摘要行,例如平均值:

ggplot(d, aes(X_lim, y)) +
  geom_line(aes(group = alpha_post), alpha = 0.3) +
  geom_line(size = 1, color = 'firebrick', stat = 'summary', fun.y = 'mean')

【讨论】:

  • 谢谢。那么在改变其他线条的颜色后如何绘制平均线呢?
  • 好吧,我想我明白了。将其添加到您的答案中可能会更好。这是我想出的。首先,获取新数据帧的中位数 d.med = data.frame( alpha_post = median(d$alpha_post), beta_post = median(d$beta_post), X_lim = seq(from=-4,to=2,by= .01))。然后,像以前一样计算预测的 y。最后,只需添加一个不同颜色的新 geom_line() 即可。
  • @user44796 - 您可以计算X_lim 的每个值的平均值,然后绘制...这是使用 data.table 的解决方案:library(data.table); setDT(d); d_avg &lt;- d[, mean(y), by = X_lim]; ggplot(d, aes(X_lim, y, group = alpha_post)) + geom_line() + geom_line(data = d_avg, mapping = aes(X_lim, V1, group = 1), colour = "red")
  • @user44796,我已经编辑了答案。以后,请在开始时提出您的完整问题。
  • @Axeman,我同意。我应该包括在我最初的问题中,但我没有考虑它。我争论是否要问一个新问题,但我认为它属于这里。再次感谢。
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 2021-11-23
  • 1970-01-01
  • 2015-05-15
  • 2021-02-27
  • 1970-01-01
相关资源
最近更新 更多