Теперь давайте займемся анатомированием полученной модели, попробуем залезть в ее потаенные уголки. И в первую очередь, давайте посмотрим на результаты работы функции "summary" и мы видим, собственно, те коэффициенты, которые нам и нужно было подобрать. Intercept - это уже известный нам коэффициент b0. Вот этот коэффициент b1, вот он. Это угловой коэффициент для базового уровня, none Smoker. Но, мы в качестве коэффициента b2 должны рассматривать тот коэффициент, который будет изменять intercept для уровня, который не является базовым. Этот уровень вот здесь указан для переменной "Smoke" не базовом уровне будет "Smoker". И вот этот коэффициент, который стоит при нем, это и есть тот самый коэффициент b2, который мы искали. Вот этот коэффициент, который стоит на строчке, где не указано "age: smokeSmoker" - это тот самый коэффициент b3, который изменит угловой коэффициент при рассмотрении уровня Smoker, который не является базовым. И вот теперь давайте решим, можем ли мы избавиться от взаимодействия, которое как мы помним далеко не всегда хорошо в модели. Для этого надо сравнить полную модель, которая включает взаимодействие с вложенной моделью, в которой эти взаимодействия удалены. За нас это делает функцию "drop1", которой мы уже пользовались. Соответственно, сравнение полной модели и вложенной сокращенной модели здесь происходит с помощью частного F-критерия, которое показывает можно ли рассматривать различия между полной моделью и вложенной, как статистически значимые. И вот мы видим, что выброс из модели взаимодействия предикторов приводят к статистически значимому изменению нашей модели. Поэтому мы не можем себе позволить избавиться от взаимодействия. То есть в изучаемой нами системе предикторы взаимодействуют и это факт с которым придется мириться. И вот теперь давайте посмотрим на модельную матрицу лежащую в основе данной модели. Мы уже делали это. Поэтому давайте вспомним как это делается. Вытащить эту матрицу из объекта "Model" можно с помощью функции "model.matrix". Эта функция выдает нам матрицу, в которой многие элементы нам уже знакомы. В колонке "intercept" представлены как всегда единицы. В колонке age представлены возраста матерей, которые вошли в состав DataSet. И вот поскольку базовый уровень для переменной "smoke" у нас взят none Smoker, в колонке "smokeSmoker" будут стоять единицы в том случае, когда мать курящая, вот здесь и нули, если она не курящая. То есть нули будут идентифицировать базовый уровень, а единицы, как раз тот уровень, который не является базовым. И вот новая колонка, которая до этого у нас еще не было, это колонка взаимодействий. Она описывает взаимодействие между предикторами "age" и "smoke" и если мать курит, то есть она относится к группе Smoker, то в этой колонке стоит ее возраст, вот смотрите в тех случаях, когда здесь единица, здесь будут стоять ее возраст. Если мать не курит, то есть она имеет значение фактора non Smoker, то в данном случае будет стоять 0. Соответственно, вот здесь мы будем видеть нули. И вот сейчас, давайте еще раз пропустим через обсуждение те матричные операции, которые лежат в основе вычислений. Нам важно, чтобы в этих наших следующих курсах, которые пойдут дальше вы могли свободно пользоваться приемами матричной алгебры, так как при обсуждении, например, модели со смешанными эффектами, нам без этого будет не обойтись. И как мы помним, в общей линейной модели описываются вот такими матричными уравнениями, где Y с галочкой - это вектор предсказанных значений, X - это модельная матрица, а b - это вектор коэффициентов и, давайте теперь сравним результаты, которые получаются при ручном вычислении с результатами, которые дают стандартные функции. В R есть стандартная функция "fitted", которая вытаскивает из объекта соответствующую нашей модели предсказанное значение. Давайте извлечем этот вектор и посмотрим на его первое значение. Соответственно, первое значение в векторе предсказанных значений будет вот такое число. А теперь давайте возьмем вектор коэффициентов, которые мы можем получить с помощью функции F, мы это видели на предыдущем слайде и возьмем произведем вот такую матричную операцию, в которой модельную матрицу, которую мы тоже рассмотрели, мы умножим на вектор коэффициентов и вытащим из полученного результата первое значение. И мы видим, что оно в точности соответствует тому, что мы получили с помощью функции "fitted". Теперь давайте подробно посмотрим, как происходит матричное умножение при получении предсказанного значения для какого-нибудь наблюдения относящееся к базовому уровню. Вот, например, первая строка модельной матрицы. Мы ее можем вытащить с помощью вот такого не хитрого кода, с помощью операции оператор индексации. Это первая строка имеет следующие значения. Intercept как всегда 1, age 19. Поскольку этот объект относится к базовому уровню, то тогда здесь 0 и, соответственно, здесь тоже 0. Опять же вызываем вектор коэффициентов, вот они наши коэффициенты, нашей модели. И теперь давайте посмотрим, что будет происходить при матричном умножении. По правилам матричного умножения, мы должны умножать этот член вот на этот, этот на этот. Соответственно, мы увидим, что здесь у нас будет единица. Здесь у нас будет возраст матери умноженный на соответствующий коэффициент. А все остальные коэффициенты будут обнуляться, потому что этот объект относится к базовому уровню. Если мы этот код реализуем, мы увидим все те же предсказанные значения, которые мы видели. Общий вид предсказанного значения для базового уровню будет выглядеть таким образом. Нам для этого нужно знать возраст матери, если она относится к базовому уровню и мы берём значение intercept, берем значение углового коэффициента перемножаем на возраст матери и получаем, после суммирования получаем предсказанное значением. Теперь давайте посмотрим как формируются предсказанные значения при матричном умножении, если мы будем рассматривать и наблюдения не относящиеся к базовому уровню. В нашей модельной матрице такому случаю будет соответствовать третья строчка. Мы ее можем вытащить из модельной матрицы воспользовавшись таким нехитрым кодом. И поскольку этот объект относится к уровню Smoker по факту он smoke, то есть это не базовый уровень, то здесь будет стоять единица, а в графе колонке соответствующей взаимодействие будет стоять возраст этой матери. Мы помним это правило. Ну, а теперь давайте посмотрим, как будет происходить матричное умножение? Опять же мы берем вектор коэффициентов нашей модели и производим почленное умножение. Это умножаем на это, это умножаем на это, это умножаем на это. И в итоге у нас все члены представлены, поскольку никаких нулей здесь не получилось. Дальше произведя это умножение, мы получаем предсказанное значение. Если мы его сравним с тем значение, которое было получено в результате работы функция fitted мы увидим, что они в точности совпадают. Таким образом матричное действие, которое мы с вами разбирали в специальном нашем отдельном разговоре здесь в полной мере присутствует и они позволяют нам получать предсказанное значение. И вот в общем виде, если мы запишем формулы для предсказанных значений для объектов не относящихся к базовому уровню. Поначалу может показаться достаточно страшно выглядящим, но на самом деле все не так сложно смотрите, если бы все эти коэффициенты, которые мы использовали приведем в одном уравнении, мы увидим следующее. Это наш intercept, который соответствует базовому уровню, это угловой коэффициент, который соответствует опять же базовом уровне. Это поправочный коэффициент, который соответствует тому изменению, которое будет происходить при включении объекта не относящегося к базовому уровню. А это поправочный коэффициент, который будет изменять угловой коэффициент опять же, если мы рассматриваем объект не относящийся к базовому уровню. Давайте переведем все эти подобные члены, вот это будет, соответственно, объединение вот этих двух чисел, это будет объединение вот этих двух чисел и в итоге у нас получается такое простое уравнение. То есть объекты не относящиеся к базовому уровню, их предсказанные значения будут вычисляться вот по такой нехитрой формуле, которую мы получили опять же из результатов summary и, мы можем теперь предсказывать возраст матери для объектов, которые относятся уже не к базовому уровню тоже.