Как выполнить квантильную регрессию в R


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

Обычно, когда мы выполняем линейную регрессию, нас интересует оценка среднего значения переменной ответа.

Однако вместо этого мы могли бы использовать метод, известный как квантильная регрессия , для оценки любого значения квантиля или процентиля значения ответа, такого как 70-й процентиль, 90-й процентиль, 98-й процентиль и т. д.

Для выполнения квантильной регрессии в R мы можем использовать функцию rq() из пакета quantreg , которая использует следующий синтаксис:

library (quantreg)

model <- rq(y ~ x, data = dataset, tau = 0.5 )

куда:

  • y: переменная ответа
  • x: переменная (переменные) предиктора
  • данные: имя набора данных
  • тау: процентиль, чтобы найти. По умолчанию используется медиана (tau = 0,5), но вы можете увидеть это для любого числа от 0 до 1.

В этом руководстве представлен пошаговый пример использования этой функции для выполнения квантильной регрессии в R.

Шаг 1: введите данные

Для этого примера мы создадим набор данных, который содержит часы обучения и результаты экзаменов, полученные для 100 разных студентов в каком-то университете:

#make this example reproducible
set.seed(0)

#create data frame 
hours <- runif(100, 1, 10)
score <- 60 + 2\*hours + rnorm(100, mean=0, sd=.45\*hours)
df <- data.frame(hours, score)

#view first six rows
head(df)

 hours score
1 9.070275 79.22682
2 3.389578 66.20457
3 4.349115 73.47623
4 6.155680 70.10823
5 9.173870 78.12119
6 2.815137 65.94716

Шаг 2. Выполнение квантильной регрессии

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

Мы будем использовать модель для прогнозирования ожидаемого 90-го процентиля экзаменационных баллов на основе количества изученных часов:

library (quantreg)

#fit model
model <- rq(score ~ hours, data = df, tau = 0.9 )

#view summary of model
summary(model)

Call: rq(formula = score ~ hours, tau = 0.9, data = df)

tau: [1] 0.9

Coefficients:
 coefficients lower bd upper bd
(Intercept) 60.25185 59.27193 62.56459
hours 2.43746 1.98094 2.76989

На выходе мы можем увидеть оценочное уравнение регрессии:

90-й процентиль экзаменационного балла = 60,25 + 2,437 * (часы)

Например, ожидается, что 90-й процентиль баллов для всех студентов, изучающих 8 часов, будет равен 79,75:

90-й процентиль экзаменационного балла = 60,25 + 2,437*(8) = 79,75 .

Выходные данные также отображают верхний и нижний доверительные пределы для точки пересечения и часов переменной предиктора.

Шаг 3: Визуализируйте результаты

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

library (ggplot2)

#create scatterplot with quantile regression line
ggplot(df, aes(hours,score)) +
 geom_point() + 
 geom_abline(intercept= coef (model)[1], slope= coef (model)[2]) 

Обратите внимание, что в отличие от традиционной линии линейной регрессии эта подобранная линия не проходит через сердцевину данных. Вместо этого он проходит через предполагаемый 90-й процентиль на каждом уровне предикторной переменной.

Мы можем увидеть разницу между подобранным уравнением квантильной регрессии и простым уравнением линейной регрессии, добавив аргумент geom_smooth() :

library (ggplot2)

#create scatterplot with quantile regression line *and* simple linear regression line
ggplot(df, aes(hours,score)) +
 geom_point() + 
 geom_abline(intercept= coef (model)[1], slope= coef (model)[2]) +
 geom_smooth(method=" lm", se= F ) 

Черная линия отображает подобранную линию квантильной регрессии для 90-го процентиля, а синяя линия отображает линию простой линейной регрессии, которая оценивает среднее значение для переменной отклика.

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

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

Как выполнить простую линейную регрессию в R (шаг за шагом)
Как выполнить множественную линейную регрессию в R
Как выполнить квадратичную регрессию в R