【问题标题】:Stata margins/marginsplot into R?Stata边距/边距图进入R?
【发布时间】:2016-07-22 04:45:53
【问题描述】:

我正在尝试将 Stata 边距图复制到 R,但无法这样做,即使在浏览了 StackExchange 并尝试解决了几个星期之后也是如此。

您是否知道如何在R 中重新创建使用 marginsplot 创建的绘图?

首先,我使用以下R 代码生成了一个可重现的数据集:

set.seed(96)
sampleData <- data.frame(
    ID = 1:200,
    outcome = sample(1:7, 200, replace = T),
    scale = sample(1:7, 200, replace = T),
    dummy1 = sample(0:1, 200, replace = T),
    dummy2 = sample(0:1, 200, replace = T))
write.dta(dataframe, "sampledata.dta")

然后,我将数据读入Stata 并运行以下命令以获取附加图:

   reg outcome dummy1##c.scale dummy2##c.scale

   margins dummy1 dummy2, at(scale=(1(1)7))

   marginsplot, recast(line) name(outcome, replace)

基本上,当这段代码在 Stata 中运行时,我得到了我试图在 R 中复制的图表:

你有什么建议可以帮助我复制这个图表吗?

【问题讨论】:

  • 它看起来像是带有预测区间的线性拟合?我可能对此有所了解,但我不知道 stata 中的 reg outcome .... 行到底指的是什么。 ## 是什么意思?
  • @thelatemail 它适合 OLS 回归,以“结果”变量作为结果,解释变量是两个二元变量与两个连续变量的交互。
  • @thelatemail reg 结果 ... 行可以翻译成 R 如下: lm.out

标签: r statistics stata


【解决方案1】:
# your data
set.seed(96)
sampleData <- data.frame(
    ID = 1:200,
    outcome = sample(1:7, 200, replace = T),
    scale = sample(1:7, 200, replace = T),
    dummy1 = sample(0:1, 200, replace = T),
    dummy2 = sample(0:1, 200, replace = T))

# all possible combinations
newData <- data.frame(scale=rep(1:7, each=4),
    dummy1=rep(c(0, 0, 1, 1), 7),
    dummy2=rep(0:1, 2*7))
newData$dummy <- paste(newData$dummy1, newData$dummy2)

a <- lm(outcome ~ dummy1*scale + dummy2*scale, data=sampleData)

b <- predict(a, newdata=newData, interval="confidence")

c <- cbind(newData, b)

require(ggplot2)

# one pane
d <- ggplot(c, aes(scale, fit, color=dummy)) 
d <- d + geom_line() 
# d <- d + facet_grid(dummy1 ~ dummy2)
d <- d + geom_ribbon(aes(ymin=lwr, ymax=upr), alpha=0.25)
d

# using facets
e <- ggplot(c, aes(scale, fit)) 
e <- e + geom_line() 
e <- e + facet_grid(dummy1 ~ dummy2)
e <- e + geom_ribbon(aes(ymin=lwr, ymax=upr), alpha=0.25)
e

我应该包括情节。

【讨论】:

  • 这真的很有帮助,谢谢!我认为 ggplot2 是解决这个问题的方法。但是问题......为什么第三张图是 dummy1 和 dummy2 之间的交互?我对变量比例和每个假人之间的交互感兴趣......
  • @EmilyB -- 对不起!我回答了其他问题!这只是一个带有置信区间的预测图吗?我没有在 Stata 中使用margins 来获取绘图,只是为了获得不同组合的边际效应。但是你的情节是outcome。看看上面的方法是否有效。
  • Stata 代码只是一个预测,因此您的代码看起来是正确的。 Stata 的 margins 命令和 narginsplot 命令仅在与 , dydx() 选项一起使用时产生边际效应。
  • @RichardHerron 我还有一个与此相关的问题......是否可以在只有一个窗格的图中显示四个 CI 中的三个?我让这段代码在我的实际数据集上工作,但意识到我只希望 4 个 CI 中的 3 个显示在最终图表中......我不知道如何修改 geom_ribbon 命令以仅显示 3 个4 CI。提前致谢!
  • @EmilyB 我会subset 数据。这个问题/答案应该为您提供所需的一切。 stackoverflow.com/a/18165730/334755
猜你喜欢
  • 2016-08-04
  • 2018-01-07
  • 2018-01-07
  • 2021-04-25
  • 2011-08-10
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 2017-03-28
相关资源
最近更新 更多