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

Хотя лекция была посвящена подходу LASSO, в приведенном примере кода мы используем LAR — регрессионный анализ с наименьшим углом. Я нашел хорошее объяснение здесь

  • Наша модель начинается с µ0^
  • Невязка (зеленая линия) составляет меньший угол с x1, чем с x2, поэтому мы начинаем двигаться в направлении x1.
  • В точке µ1^ невязка теперь образует равные углы с x1 и x2, и поэтому мы начинаем двигаться в новом направлении, которое сохраняет эту равноугольность/эквикорреляцию.
  • Если бы было больше переменных, мы бы снова изменили направление, как только новая переменная образует равные углы с нашей невязкой, и так далее.

Был использован тот же набор данных UCI по учащимся средних школ, но на этот раз для прогнозирования количества пропусков занятий (числовое, от 0 до 93). Код прилагается ниже, после вывода программы. Как было рекомендовано, я заменил категориальные переменные да и нет на двоичные 1–0. Однако для оценок G1 G2 G3 — я сохраняю исходные значения и помечаю их КЛАСС в процедуре glmselect. В наборе данных нет пропущенных значений, поэтому мне не нужно было ничего с ними делать. Опрос выбирает случайно разделенный набор данных на 70–30% данных обучения и тестирования.

В методе LASSO параметр лямбда устанавливается как верхний предел суммы всех коэффициентов, заставляя некоторые из них равняться нулю. Параметр CVMETHOD=RANDOM(10) в операторе MODEL запрашивает 10-кратную перекрестную проверку, при которой обучающие данные разделены на пять случайных подмножеств, например наблюдения {1,6,11,. . . }, {2,7,12,. . . }, и так далее. На каждом этапе выбора одна из этих частей выставляется для проверки, а текущая выбранная модель помещается на оставшиеся 9 частей. Эта подогнанная модель используется для вычисления прогнозируемой остаточной суммы квадратов для пропущенной части, и этот процесс повторяется для каждой из пяти частей. Полученная таким образом сумма пяти предсказанных остаточных сумм квадратов является оценкой ошибки предсказания, которая обозначается CVPRESS. Опция STOP=CV указывает, что эта статистика CVPRESS используется в качестве критерия остановки. Шаг 6 (internet1) был помечен как точка остановки, так как параметр CV PRESS достиг своего минимума.

Процесс добавления переменных, пресс CV и шаг отсечения визуализированы на графике ниже.

Интересно, что при начальном значении = 123 средний квадрат ошибки для набора данных TEST намного ниже, чем для набора данных TRAINING! Я изменил начальное число и результаты, когда набор тестовых данных был оснащен большим ASE, как и ожидалось. Если у вас есть идеи, почему данные TEST могут быть подобраны с меньшей ошибкой, чем обучающий набор, оставьте комментарий.

В заключение были выбраны 6 переменных: родительский статус (родители живут вместе или раздельно), интернет (доступ к интернету дома), имеющий отрицательную корреляцию, т. е. родители вместе приводят к меньшему количеству пропусков занятий. Установлено, что наличие романтических отношений, возраст и образование матери имеют положительную корреляцию с количеством пропусков.

PROC IMPORT DATAFILE=’student-mat.csv’ OUT = importstudents REPLACE;
DATA new; установить импортированных студентов;
если пол = «М», то мужской = 1;
если пол = «Ж», тогда мужской = 0;
если адрес = «Р», то сельский = 1;
/> если адрес = «U», то сельский = 0;
если размер семьи = «LE3», то smallfam = 1;
если размер семьи = «GT3», тогда smallfam = 0;
если Pstatus = «T», то parentstog = 1;
если Pstatus = «A», то parentstog = 0;
еслиschoolsup = «да», то schoolup1 = 1;
если schoolup = «нет», то schoolup1 = 0;
если famsup = «да», то famsup1 = 1;
если famsup = «нет», то famsup1 = 0;
если оплачено = «да», то оплачено1 = 1;
/> если оплата = «нет», то оплата1 = 0;
если деятельность = «да», то деятельность1 = 1;
если деятельность = «нет», то деятельность1 = 0;
если питомник = «да», тогда питомник1 = 1;
если питомник = «нет», то питомник 1 = 0;
если выше = «да», то высший1 = 1;
если высший = «нет», то высший1 = 0;
если интернет = «да», то интернет1 = 1;
если интернет = «нет», то интернет1 = 0;
если романтик = «да», тогда романтик1 = 1;
/> если романтик ic = «нет», тогда романтик1 = 0;

бегать;

включена графика ods;

* Произвольное разделение данных на тестовые и тренировочные данные;

* Множественная регрессия лассо с алгоритмом Ларса k=10-кратная проверка;
proc glmselect data=traintest plots=all seed=123;
partition ROLE=selected(train='1' test='0');
класс G1 G2 G3;
модель отсутствия = мужчина сельский малая семья родителитог неудачи школыup1 семьяup1 платная1 деятельность1 детский сад1 высшее1 интернет1 романтика1
возраст Medu Fedu время в пути учебавремя семья свободное время подагра Dalc walc здоровье/выбор=lar(выберите =cv stop=none) cvmethod=random(10);
run;