"lines()", действующий как "polygon()" R?

Я пытаюсь нарисовать две черные линии вокруг красной линии регрессии. Но lines() Команда рисует что-то более похожее на polygon() чем простая строка (см. рисунок ниже кода).

Мне интересно, есть ли способ просто нарисовать две линии вокруг линии регрессии (т.е. интервалы неопределенности), или я что-то упустил?

library(rstanarm) 
data(kidiq)
d <- kidiq  

fit <- stan_glm(kid_score ~ mom_iq,
           data = d,   
           prior = normal(0, 2.5),  
           prior_intercept = normal(0, 10),  
           prior_aux = cauchy(0, 100)) 

plot(kid_score ~ mom_iq, data = d, type = "n")
abline(fit, col = 2)

pred_lin <- posterior_linpred(fit)

loop <- length(d$mom_iq)
I <- matrix(NA, loop, 2)
for(i in 1:loop){
I[i,] = quantile(pred_lin[,i], c(.025, .975))
}
lines(d$mom_iq, I[,1], lty = 2)
lines(d$mom_iq, I[,2])

1 ответ

Решение

Попробуйте упорядочить data.frame как:

a <- cbind(d$mom_iq, I[,1])
a <- a[order(a[,1]),]
lines(a)

Так что вы также можете написать:

lines(sort(d$mom_iq), I[,2][order(d$mom_iq)])

или просто:

apply(I, 2, function(x) lines(sort(d$mom_iq), x[order(d$mom_iq)])) 

Другие вопросы по тегам