2016-07-22 41 views
3

我試圖複製一個Stata marginsplot到R,但一直沒有能夠這樣做,即使瀏覽了StackExchange並試圖找出它幾個星期。Stata邊際/邊際成R?

您碰巧知道如何重新創建使用邊距圖創建的情節R

首先,我使用以下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中複製的圖形:

enter image description here

你有沒有能幫我複製這個圖的指針?

+1

它看起來像一個線性擬合與也許一個預測間隔?我可能有一個裂縫,但我不知道'reg reg .... ....'在stata中的意思是指什麼。 '##'是什麼意思? – thelatemail

+1

@thelatemail它適合OLS迴歸和'結果'變量作爲結果和解釋變量是兩個二元變量與兩個連續變量的相互作用。 – radek

+0

@thelatemail reg結果...行可以被翻譯爲R,如下所示:lm.out <-lm(結果〜dummy1 * scale + dummy2 * scale,data = sampleData) – rowbust

回答

3
# 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 

我應該包括情節。

color

facet

+1

這真的很有幫助,謝謝!我認爲ggplot2是解決這個問題的方法。但問題......爲什麼第三張圖是dummy1和dummy2之間的交互?我對可變比例和每個假人之間的互動感興趣...... – rowbust

+0

@EmilyB - 對不起!我回答了其他一些問題!這僅僅是一個置信區間的預測情節嗎?我沒有在Stata中使用「margin」來獲取地塊,只是爲了獲得不同組合的邊際效應。但你的情節是「結局」的水平。看看上面的工作。 –

+0

Stata代碼只是一個預測,所以你的代碼看起來是正確的。與',dydx()'選項一起使用時,Stata的margin命令和narginsplot命令只會產生邊際效應。 – Thomas