library(readr)
## Warning: пакет 'readr' был собран под R версии 4.5.2
library(haven)
## Warning: пакет 'haven' был собран под R версии 4.5.2
Student = read_csv(file.choose())
## Rows: 10000 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Extracurricular_Activities
## dbl (5): Hours_Studied, Previous_Scores, Sleep_Hours, Sample_Question_Papers...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Student
## # A tibble: 10,000 × 6
## Hours_Studied Previous_Scores Extracurricular_Activities Sleep_Hours
## <dbl> <dbl> <chr> <dbl>
## 1 7 99 Yes 9
## 2 4 82 No 4
## 3 8 51 Yes 7
## 4 5 52 Yes 5
## 5 7 75 No 8
## 6 3 78 No 9
## 7 7 73 Yes 5
## 8 8 45 Yes 4
## 9 5 77 No 8
## 10 4 89 No 4
## # ℹ 9,990 more rows
## # ℹ 2 more variables: Sample_Question_Papers_Practiced <dbl>,
## # Performance_Index <dbl>
mod <- lm(Performance_Index ~ Hours_Studied + Previous_Scores +
Extracurricular_Activities + Sleep_Hours +
Sample_Question_Papers_Practiced,
data = Student)
summary(mod)
##
## Call:
## lm(formula = Performance_Index ~ Hours_Studied + Previous_Scores +
## Extracurricular_Activities + Sleep_Hours + Sample_Question_Papers_Practiced,
## data = Student)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.6333 -1.3684 -0.0311 1.3556 8.7932
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -34.075588 0.127143 -268.01 <2e-16 ***
## Hours_Studied 2.852982 0.007873 362.35 <2e-16 ***
## Previous_Scores 1.018434 0.001175 866.45 <2e-16 ***
## Extracurricular_ActivitiesYes 0.612898 0.040781 15.03 <2e-16 ***
## Sleep_Hours 0.480560 0.012022 39.97 <2e-16 ***
## Sample_Question_Papers_Practiced 0.193802 0.007110 27.26 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.038 on 9994 degrees of freedom
## Multiple R-squared: 0.9888, Adjusted R-squared: 0.9887
## F-statistic: 1.757e+05 on 5 and 9994 DF, p-value: < 2.2e-16
Модель объясняет 98,88% дисперсии (разброса) успеваемости студентов (Multiple R-squared = 0.9888)
Уравнение регрессии Performance_Index = -34.076 + 2.853 * Hours_Studied + 1.018 * Previous_Scores + 0.613 * Extracurricular_Activities_Yes + 0.481 * Sleep_Hours + 0.194 * Sample_Question_Papers_Practiced
Hours_Studied +2.853 Самый сильный положительный эффект. Каждый 1 дополнительный час занятий в неделю увеличивает Индекс Успеваемости на 2.85 балла (при прочих равных условиях).
Previous_Scores +1.018 Предыдущие оценки. Увеличение предыдущего среднего балла на 1 единицу повышает текущий индекс на 1.018 балла. Связь почти линейная.
Extracurricular_ActivitiesYes +0.613 Внеклассные занятия. Студенты, которые занимаются дополнительно (Yes), имеют в среднем на 0.613 балла выше, чем те, кто не занимается (No).
Sleep_Hours +0.481 Сон. Каждый дополнительный час сна в сутки связан с повышением успеваемости на 0.48 балла.
Sample_Question_Papers_Practiced +0.194 Решение пробных тестов. Каждый дополнительный 1 решенный пробный вариант повышает результат на 0.19 балла.
library(caret)
## Warning: пакет 'caret' был собран под R версии 4.5.3
## Загрузка требуемого пакета: ggplot2
## Warning: пакет 'ggplot2' был собран под R версии 4.5.2
## Загрузка требуемого пакета: lattice
x <- Student[, sapply(Student, is.numeric)]
y <- Student$`Performance_Index`
featurePlot(x = x, y = y)
Точки собраны в вертикальные «столбики» — значит, студенты имеют
ограниченное число уникальных значений часов сна (целые числа от 4 до
9). Нет явной тенденции: увеличение часов сна не гарантирует рост
успеваемости.
Sample_Question_Papers_Prac (практика с образцами тестов): Аналогично Sleep_Hours — дискретные значения (от 0 до 8). Слабая или отсутствующая корреляция с Performance_Index.
Performance_Index (само на себя). Диагональная линия показывает идеальную корреляцию — это контрольная визуализация, подтверждающая корректность построения графика
Hours_Studied (часы учёбы):
Значения от 2 до 10 часов. Слабая положительная тенденция: больше часов учёбы — чуть выше успеваемость
Previous_Scores (предыдущие оценки): Явная положительная линейная зависимость: чем выше предыдущие оценки, тем выше Performance_Index. Самая сильная корреляция среди всех признаков
library(caret)
featurePlot(x = Student[ , c("Hours_Studied", "Previous_Scores", "Sleep_Hours")], y = Student$Performance_Index)
mod <- lm(
Performance_Index ~ Hours_Studied +
Previous_Scores +
Extracurricular_Activities +
Sleep_Hours +
Sample_Question_Papers_Practiced,
data = Student
)
par(mfrow = c(2, 2))
plot(mod)
Residuals vs Fitted (Остатки vs Предсказанные значения) Остатки разбросаны вокруг нулевой линии (горизонтальная чёрная линия), без явного тренда. означает гомоскедастичность
Q-Q Residuals (QQ-график остатков) Точки лежат близко к диагональной линии — это признак нормального распределения остатков. Небольшое отклонение в хвостах (крайние точки)
Scale-Location (Масштаб-Расположение) Линия близка к горизонтальной, без роста или падения с увеличением предсказанных значений.
Residuals vs Leverage (Остатки vs Леверидж) есть наблюдения с высоким левериджем, которые могут искажать результаты
hist(resid(mod),
breaks = 30,
main = "Гистограмма остатков",
xlab = "Остатки")
Гистограмма имеет симметричную колоколообразную форму Пик (максимальная
частота) находится около нуля, что означает, что большинство остатков
близки к нулю
library(car)
## Warning: пакет 'car' был собран под R версии 4.5.2
## Загрузка требуемого пакета: carData
## Warning: пакет 'carData' был собран под R версии 4.5.2
vif(mod)
## Hours_Studied Previous_Scores
## 1.000478 1.000326
## Extracurricular_Activities Sleep_Hours
## 1.000802 1.000600
## Sample_Question_Papers_Practiced
## 1.000557
Все значения VIF практически равны 1.0
Обычно о проблемах с мультиколлинеарностью говорят, когда VIF > 5 или VIF > 10.
sjPlot::tab_model(mod)
| Performance_Index | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | -34.08 | -34.32 – -33.83 | <0.001 |
| Hours Studied | 2.85 | 2.84 – 2.87 | <0.001 |
| Previous Scores | 1.02 | 1.02 – 1.02 | <0.001 |
|
Extracurricular Activities [Yes] |
0.61 | 0.53 – 0.69 | <0.001 |
| Sleep Hours | 0.48 | 0.46 – 0.50 | <0.001 |
|
Sample Question Papers Practiced |
0.19 | 0.18 – 0.21 | <0.001 |
| Observations | 10000 | ||
| R2 / R2 adjusted | 0.989 / 0.989 | ||
Предыдущие оценки (Previous Scores): Оценка: 1.02 CI: 1.02 – 1.02
Внеклассные занятия (Extracurricular Activities [Yes]):
Оценка: 0.61
CI: 0.53 – 0.69
Sample Question Papers Practiced (Решено пробных вариантов) Оценка: 0.19
CI: 0.18 – 0.21
Sleep Hours (Часы сна) Оценка: 0.48
CI: 0.46 – 0.50
Hours Studied (Часы учебы) Оценка: 2.85
CI: 2.84 – 2.87
В результате регрессионного анализа (N = 10 000) было установлено, что все включенные предикторы статистически значимо (p < 0.001) влияют на индекс успеваемости.