2017-07-25 96 views
3

考慮這個簡單的例子ggplot2:如何獲得geom_smooth中預測的穩健置信區間?

dataframe <- data_frame(x = c(1,2,3,4,5,6), 
         y = c(12,24,24,34,12,15)) 
> dataframe 
# A tibble: 6 x 2 
     x  y 
    <dbl> <dbl> 
1  1 12 
2  2 24 
3  3 24 
4  4 34 
5  5 12 
6  6 15  

dataframe %>% ggplot(., aes(x = x, y = y)) + 
geom_point() + 
geom_smooth(method = 'lm', formula = y~x) 

這裏的標準誤差計算使用默認選項。不過,我想用現有的穩健方差 - 協方差矩陣在包sandwichlmtest

也就是說,使用vcovHC(mymodel, "HC3")

有沒有辦法讓一個簡單的方法使用geom_smooth()功能?

enter image description here

+1

您不能直接GGPLOT2做到這一點。您需要使用'sandwich'手動生成較高和較低的置信度帶,然後將這些帶給'geom_ribbon()'。確保在'geom_smooth()'中設置了'se = FALSE',這樣只顯示'geom_ribbon'。 – Noah

+0

@noah,有趣。你介意發佈一個解決方案嗎? –

回答

1

我很新的這整個健壯SE的事情,但我能產生以下:

zz = ' 
x y 
1  1 12 
2  2 24 
3  3 24 
4  4 34 
5  5 12 
6  6 15 
' 

df <- read.table(text = zz, header = TRUE) 
df 

library(sandwich) 
library(lmtest) 

lm.model<-lm(y ~ x, data = df) 
coef(lm.model) 
se = sqrt(diag(vcovHC(lm.model, type = "HC3"))) 
fit = predict(lm.model) 
predframe <- with(df,data.frame(x, 
           y = fit, 
           lwr = fit - 1.96 * se, 
           upr = fit + 1.96 * se)) 

library(ggplot2) 
ggplot(df, aes(x = x, y = y))+ 
    geom_point()+ 
    geom_line(data = predframe)+ 
    geom_ribbon(data = predframe, aes(ymin = lwr,ymax = upr), alpha = 0.3) 

enter image description here

+0

不幸的是,我不認爲你的計算是正確的 –

相關問題