В этом примере показано, как выполнить регрессию с категориальными ковариантами с помощью категориальных массивов и fitlm.
load carsmallПеременная MPG содержит измерения на милях на галлон 100 демонстрационных автомобилей. Модельный год каждого автомобиля находится в переменной Model_Year, и Weight содержит вес каждого автомобиля.
Чертите график рассеивания MPG против Weight, сгруппированный модельным годом.
figure() gscatter(Weight,MPG,Model_Year,'bgr','x.o') title('MPG vs. Weight, Grouped by Model Year')

Сгруппированная переменная, Model_Year, имеет три уникальных значения, 70, 76, и 82, соответствие модельным годам 1970, 1976, и 1982.
Составьте таблицу, которая содержит переменные MPG, Weight, и Model_Year. Преобразуйте переменную Model_Year к категориальному массиву.
cars = table(MPG,Weight,Model_Year); cars.Model_Year = categorical(cars.Model_Year);
Подбирайте модель регрессии использование fitlm с MPG как зависимая переменная и Weight и Model_Year как независимые переменные. Поскольку Model_Year категориальный ковариант с тремя уровнями, он должен ввести модель как две переменные индикатора.
График рассеивания предполагает что наклон MPG против Weight может отличаться в течение каждого модельного года. Чтобы оценить это, включайте периоды взаимодействия года веса.
Предложенная модель
где I [1976] и I [1982] является фиктивными переменными, указывающими на модельные годы 1976 и 1982, соответственно. I [1976] принимает значение 1, если модельный год 1976 и принимает значение 0, если это не. I [1982] принимает значение 1, если модельный год 1982 и принимает значение 0, если это не. В этой модели, 1970 ссылочный год.
fit = fitlm(cars,'MPG~Weight*Model_Year')fit =
Linear regression model:
MPG ~ 1 + Weight*Model_Year
Estimated Coefficients:
Estimate SE
___________ __________
(Intercept) 37.399 2.1466
Weight -0.0058437 0.00061765
Model_Year_76 4.6903 2.8538
Model_Year_82 21.051 4.157
Weight:Model_Year_76 -0.00082009 0.00085468
Weight:Model_Year_82 -0.0050551 0.0015636
tStat pValue
________ __________
(Intercept) 17.423 2.8607e-30
Weight -9.4612 4.6077e-15
Model_Year_76 1.6435 0.10384
Model_Year_82 5.0641 2.2364e-06
Weight:Model_Year_76 -0.95953 0.33992
Weight:Model_Year_82 -3.2329 0.0017256
Number of observations: 94, Error degrees of freedom: 88
Root Mean Squared Error: 2.79
R-squared: 0.886, Adjusted R-Squared: 0.88
F-statistic vs. constant model: 137, p-value = 5.79e-40Регрессия выход показывает:
fitlm распознает Model_Year как категориальная переменная и построения необходимый индикатор (макет) переменные. По умолчанию, первый уровень, 70, ссылочная группа (используйте reordercats изменить ссылочную группу).
Спецификация модели, MPG~Weight*Model_Year, задает условия первого порядка для Weight и Model_Year, и все взаимодействия.
Модель R2 = 0.886, означая изменение миль на галлон уменьшается на 88,6%, когда вы рассматриваете вес, модельный год и их взаимодействия.
Подобранная модель
Таким образом предполагаемые уравнения регрессии в течение модельных лет следующие.
| Модельный год | Предсказанный MPG против веса |
|---|---|
| 1970 |
|
| 1976 |
|
| 1982 |
|
Отношение между MPG и Weight имеет все больше отрицательный наклон, когда модельный год увеличивается.
Отобразите на графике данные и адаптированные линии регрессии.
w = linspace(min(Weight),max(Weight)); figure() gscatter(Weight,MPG,Model_Year,'bgr','x.o') line(w,feval(fit,w,'70'),'Color','b','LineWidth',2) line(w,feval(fit,w,'76'),'Color','g','LineWidth',2) line(w,feval(fit,w,'82'),'Color','r','LineWidth',2) title('Fitted Regression Lines by Model Year')

Протестируйте на существенные различия между наклонами. Это эквивалентно тестированию гипотезы
anova(fit)
ans =
SumSq DF MeanSq F pValue
Weight 2050.2 1 2050.2 263.87 3.2055e-28
Model_Year 807.69 2 403.84 51.976 1.2494e-15
Weight:Model_Year 81.219 2 40.609 5.2266 0.0071637
Error 683.74 88 7.7698 0.0072 (из строки взаимодействия, Weight:Model_Year), таким образом, нулевая гипотеза отклоняется на 0,05 уровнях значения. Значением тестовой статистической величины является 5.2266. Степенями свободы числителя для теста является 2, который является количеством коэффициентов в нулевой гипотезе.Существуют достаточные доказательства, что наклоны не равны в течение всех трех модельных лет.
anova | categorical | fitlm | reordercats