Как построить доверительный интервал в R


Доверительный интервал — это диапазон значений, который может содержать параметр генеральной совокупности с определенным уровнем достоверности.

В этом руководстве объясняется, как построить доверительный интервал для набора данных в R.

Пример: построение доверительного интервала в R

Предположим, у нас есть следующий набор данных в R со 100 строками и 2 столбцами:

#make this example reproducible
set.seed(0)

#create dataset
x <- rnorm(100)
y <- x\*2 + rnorm(100)
df <- data.frame(x = x, y = y)

#view first six rows of dataset
head(df)

 x y
1 1.2629543 3.3077678
2 -0.3262334 -1.4292433
3 1.3297993 2.0436086
4 1.2724293 2.5914389
5 0.4146414 -0.3011029
6 -1.5399500 -2.5031813

Чтобы построить график взаимосвязи между x и y, мы можем сначала подобрать модель линейной регрессии:

model <- lm(y ~ x, data = df)

Затем мы можем создать график оценочной линии линейной регрессии, используя функцию abline() и функцию lines() для создания фактических доверительных интервалов:

#get predicted y values using regression equation
newx <- seq(min(df$x), max(df$x), length.out=100)
preds <- predict(model, newdata = data.frame(x=newx), interval = 'confidence')

#create plot of x vs. y, but don't display individual points (type='n') 
plot(y ~ x, data = df, type = 'n')

#add fitted regression line
abline(model)

#add dashed lines for confidence bands
lines(newx, preds[ ,3], lty = 'dashed', col = 'blue')
lines(newx, preds[ ,2], lty = 'dashed', col = 'blue') 

Черная линия отображает подобранную линию линейной регрессии, а две пунктирные синие линии отображают доверительные интервалы.

При желании вы также можете заполнить область между линиями доверительного интервала и оценочной линией линейной регрессии, используя следующий код:

#create plot of x vs. y
plot(y ~ x, data = df, type = 'n')

#fill in area between regression line and confidence interval
polygon(c(rev(newx), newx), c(rev(preds[ ,3]), preds[ ,2]), col = 'grey', border = NA)

#add fitted regression line
abline(model)

#add dashed lines for confidence bands
lines(newx, preds[ ,3], lty = 'dashed', col = 'blue')
lines(newx, preds[ ,2], lty = 'dashed', col = 'blue') 

Вот полный код от начала до конца:

#make this example reproducible
set.seed(0)

#create dataset
x <- rnorm(100)
y <- x\*2 + rnorm(100)
df <- data.frame(x = x, y = y)

#fit linear regression model
model <- lm(y ~ x, data = df) 

#get predicted y values using regression equation
newx <- seq(min(df$x), max(df$x), length.out=100)
preds <- predict(model, newdata = data.frame(x=newx), interval = 'confidence')

#create plot of x vs. y
plot(y ~ x, data = df, type = 'n')

#fill in area between regression line and confidence interval
polygon(c(rev(newx), newx), c(rev(preds[ ,3]), preds[ ,2]), col = 'grey', border = NA)

#add fitted regression line
abline(model)

#add dashed lines for confidence bands
lines(newx, preds[ ,3], lty = 'dashed', col = 'blue')
lines(newx, preds[ ,2], lty = 'dashed', col = 'blue')

Дополнительные ресурсы

Что такое доверительные интервалы?
Как использовать функцию abline() в R для добавления прямых линий на графики