В этом примере показано, как выполнить регрессию с категориальными ковариатами, используя категориальные массивы и 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')
The сгруппированной переменной, 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