В этом примере сравниваются результаты среди методов регрессии, которые являются и не являются устойчивыми к влиятельным отклонениям.
Влиятельными отклонениями являются экстремальные ответные или предикторные наблюдения, которые влияют на оценки параметров и выводы регрессионного анализа. Ответы, которые являются влиятельными отклонениями, обычно происходят в крайностях домена. Например, у вас может быть прибор, который плохо или нерегулярно измеряет реакцию при экстремальных уровнях температуры.
Имея достаточно доказательств, вы можете удалить влиятельные отклонения из данных. Если удаление невозможно, можно использовать методы регрессии, устойчивые к отклонениям.
Создание случайной выборки из 100 откликов из линейной модели
2xt + αt
где:
- вектор равномерно разнесенных значений от 0 до 2.
).
rng('default');
n = 100;
x = linspace(0,2,n)';
b0 = 1;
b1 = 2;
sigma = 0.5;
e = randn(n,1);
y = b0 + b1*x + sigma*e;Создание влиятельных отклонений путем раздувания всех ответов, соответствующих 0,25, в 3 раза.
y(x < 0.25) = y(x < 0.25)*3;
Постройте график данных. Сохраните график для дальнейших графиков.
figure; plot(x,y,'o'); h = gca; xlim = h.XLim'; hl = legend('Data'); xlabel('x'); ylabel('y'); title('Regression Techniques Comparison') hold on;

Оцените коэффициенты и дисперсию ошибок, используя простую линейную регрессию. Постройте график линии регрессии.
LSMdl = fitlm(x,y)
LSMdl =
Linear regression model:
y ~ 1 + x1
Estimated Coefficients:
Estimate SE tStat pValue
________ _______ ______ __________
(Intercept) 2.6814 0.28433 9.4304 2.0859e-15
x1 0.78974 0.24562 3.2153 0.0017653
Number of observations: 100, Error degrees of freedom: 98
Root Mean Squared Error: 1.43
R-squared: 0.0954, Adjusted R-Squared: 0.0862
F-statistic vs. constant model: 10.3, p-value = 0.00177
plot(xlim,[ones(2,1) xlim]*LSMdl.Coefficients.Estimate,'LineWidth',2); hl.String{2} = 'Least Squares';

LSMdl является встроенным LinearModel объект модели. Пересечение и наклон, по-видимому, соответственно выше и ниже, чем они должны быть. Линия регрессии может сделать плохие прогнозы для любых 1 1.6.
Создайте байесовскую модель линейной регрессии с диффузным соединением до коэффициентов регрессии и дисперсии ошибок. Укажите один предиктор для модели.
PriorDiffuseMdl = bayeslm(1);
PriorDiffuseMdl является diffuseblm объект модели, характеризующий совместное предварительное распределение.
Оцените заднюю часть байесовской модели линейной регрессии. Постройте график линии регрессии.
PosteriorDiffuseMdl = estimate(PriorDiffuseMdl,x,y);
Method: Analytic posterior distributions
Number of observations: 100
Number of predictors: 2
| Mean Std CI95 Positive Distribution
------------------------------------------------------------------------------
Intercept | 2.6814 0.2873 [ 2.117, 3.246] 1.000 t (2.68, 0.28^2, 98)
Beta | 0.7897 0.2482 [ 0.302, 1.277] 0.999 t (0.79, 0.25^2, 98)
Sigma2 | 2.0943 0.3055 [ 1.580, 2.773] 1.000 IG(49.00, 0.0099)
plot(xlim,[ones(2,1) xlim]*PosteriorDiffuseMdl.Mu,'--','LineWidth',2); hl.String{3} = 'Bayesian Diffuse';

PosteriorDiffuseMdl является conjugateblm объект модели, характеризующий совместное апостериорное распределение параметров линейной модели. Оценки байесовской модели линейной регрессии с диффузным предшествующим уровнем почти равны оценкам простой модели линейной регрессии. Обе модели представляют наивный подход к влиятельным отклонениям, то есть методы относятся к отклонениям, как и любое другое наблюдение.
Создание регрессионной модели с ошибками ARIMA. Укажите, что ошибки следуют за распределением t с 3 степенями свободы, но без запаздывающих членов. Эта спецификация фактически является регрессионной моделью с t распределенными ошибками.
regMdl = regARIMA(0,0,0); regMdl.Distribution = struct('Name','t','DoF',3);
regMdl является regARIMA объект модели. Это шаблон для оценки.
Оценка регрессионной модели с ошибками ARIMA. Постройте график линии регрессии.
estRegMdl = estimate(regMdl,y,'X',x);
Regression with ARMA(0,0) Error Model (t Distribution):
Value StandardError TStatistic PValue
_______ _____________ __________ __________
Intercept 1.4613 0.154 9.4892 2.328e-21
Beta(1) 1.6531 0.12939 12.776 2.2246e-37
Variance 0.93116 0.1716 5.4263 5.7546e-08
DoF 3 0 Inf 0
plot(xlim,[ones(2,1) xlim]*[estRegMdl.Intercept; estRegMdl.Beta],... 'LineWidth',2); hl.String{4} = 'regARIMA';

estRegMdl является regARIMA объект модели, содержащий результаты оценки. Поскольку распределение t является более диффузным, линия регрессии приписывает больше изменчивости влиятельным отклонениям, чем другим наблюдениям. Следовательно, линия регрессии, по-видимому, является лучшей прогностической моделью, чем другие модели.
Вырастите мешок из 100 регрессионных деревьев. Укажите 20 для минимального размера листа.
QRMdl = TreeBagger(100,x,y,'Method','regression','MinLeafSize',20);
QRMdl является встроенным TreeBagger объект модели.
Предсказать медианные отклики для всех наблюдаемых значений x, то есть реализовать квантильную регрессию. Постройте график предсказаний.
qrPred = quantilePredict(QRMdl,x); plot(x,qrPred,'LineWidth',2); hl.String{5} = 'Quantile'; hold off;

Линия регрессии, по-видимому, слегка зависит от отклонений в начале выборки, но затем быстро следует regARIMA линия модели.
Можно настроить поведение линии, указав различные значения для MinLeafSize когда вы тренируете мешок регрессионных деревьев. Ниже MinLeafSize значения имеют тенденцию более точно следовать данным на графике.
Рассмотрим байесовскую модель линейной регрессии, содержащую один предиктор, t распределенную дисперсию возмущений с профилированным параметром степеней свободы Давайте:
).
λ jstart2)
∝1σ2
Эти допущения подразумевают:
,
(
- вектор параметров скрытого масштаба, который приписывает низкую точность наблюдениям, которые находятся далеко от линии регрессии. - гиперпараметр, контролирующий влияние на наблюдения.
Укажите сетку значений для
1 соответствует распределению Коши.
2.1 означает, что среднее хорошо определено.
4.1 означает, что отклонение четко определено.
100 означает, что распределение приблизительно нормальное.
nu = [0.01 0.1 1 2.1 5 10 100]; numNu = numel(nu);
Для этой задачи семплер Гиббса хорошо подходит для оценки коэффициентов, поскольку можно смоделировать параметры байесовской модели линейной регрессии, обусловленной , а затем смоделировать из её условного распределения.
Реализовать этот образец Гиббса.
Нарисуйте параметры из заднего распределения x, λ. Сдуйте на λ, создайте диффузную предыдущую модель с двумя коэффициентами регрессии и нарисуйте набор параметров из заднего. Первый коэффициент регрессии соответствует перехвату, поэтому укажите, чтоbayeslm не включать один.
Вычислить остатки.
Вычертите значения из условного задника .
Для каждого значения , запустить Гиббс пробоотборник для 20000 итераций и применить период горения 5000. Предварительно распределить для задних розыгрышей и инициализировать к вектору единиц.
rng(1); m = 20000; burnin = 5000; lambda = ones(n,m + 1,numNu); % Preallocation estBeta = zeros(2,m + 1,numNu); estSigma2 = zeros(1,m + 1,numNu); % Create diffuse prior model. PriorMdl = bayeslm(2,'Model','diffuse','Intercept',false); for p = 1:numNu for j = 1:m % Scale observations. yDef = y./sqrt(lambda(:,j,p)); xDef = [ones(n,1) x]./sqrt(lambda(:,j,p)); % Simulate observations from conditional posterior of beta and % sigma2 given lambda and the data. [estBeta(:,j + 1,p),estSigma2(1,j + 1,p)] = simulate(PriorMdl,xDef,yDef); % Estimate residuals. ep = y - [ones(n,1) x]*estBeta(:,j + 1,p); % Specify shape and scale using conditional posterior of lambda % given beta, sigma2, and the data sp = (nu(p) + 1)/2; sc = 2./(nu(p) + ep.^2/estSigma2(1,j + 1,p)); % Draw from conditional posterior of lambda given beta, sigma2, % and the data lambda(:,j + 1,p) = 1./gamrnd(sp,sc); end end
Оцените задние средства для , и .
postEstBeta = squeeze(mean(estBeta(:,(burnin+1):end,:),2)); postLambda = squeeze(mean(lambda(:,(burnin+1):end,:),2));
Постройте график данных и регрессионных линий для каждого,
figure; plot(x,y,'o'); h = gca; xlim = h.XLim'; ylim = h.YLim; hl = legend('Data'); hold on; for p = 1:numNu; plotY = [ones(2,1) xlim]*postEstBeta(:,p); plot(xlim,plotY,'LineWidth',2); hl.String{p+1} = sprintf('nu = %f',nu(p)); end xlabel('x'); ylabel('y'); title('Robust Bayesian Linear Regression')

Низкие значения тенденцию приписывать влиятельным отклонениям высокую изменчивость. Следовательно, линия регрессии напоминает regARIMA линия. По мере увеличения, линия ведет себя больше, как наивный подход.
estimate | fitlm | simulate | TreeBagger