Нелинейная логистическая регрессия

Этот пример показывает два способа соответствовать нелинейной модели логистической регрессии. Первый метод использует наибольшее правдоподобие (ML), и второй метод использует обобщенные наименьшие квадраты (GLS) через функциональный fitnlm от Statistics and Machine Learning Toolbox(TM).

Описание проблемы

Логистическая регрессия является специальным типом регрессии, в которой цель состоит в том, чтобы смоделировать вероятность чего-то как функция других переменных. Рассмотрите набор векторов предиктора, где количество наблюдений и вектор-столбца, содержит значения предикторов для th наблюдения. Переменная отклика для - то, где представляет Биномиальную случайную переменную с параметрами, количеством испытаний, и, вероятность успеха для испытания. Нормированная переменная отклика - пропорция успехов в испытаниях за наблюдение. Примите, что ответы независимы для. Для каждого:

.

Рассмотрите моделирование как функцию переменных прогноза.

В линейной логистической регрессии можно использовать функциональный fitglm для модели как функция можно следующим образом:

с представлением набора коэффициентов, умножающих предикторы в. Однако предположите, что вам нужна нелинейная функция на правой стороне:

Существуют функции в Statistics and Machine Learning Toolbox(TM) для подбора кривой нелинейным моделям регрессии, но не для подбора кривой нелинейным моделям логистической регрессии. Этот пример показывает, как можно использовать функции тулбокса, чтобы соответствовать тем моделям.

Прямое наибольшее правдоподобие (ML)

Подход ML максимизирует логарифмическую вероятность наблюдаемых данных. Вероятность легко вычисляется с помощью Биномиальной вероятности (или плотность) функция, как вычислено функцией binopdf.

Обобщенные наименьшие квадраты (GLS)

Можно оценить нелинейную модель логистической регрессии использование функционального fitnlm. Эта сила кажется удивительной сначала, поскольку fitnlm не размещает Биномиальное распределение или любые функции ссылки. Однако fitnlm может использовать Обобщенные наименьшие квадраты (GLS) для образцовой оценки, если вы задаете среднее значение и отклонение ответа. Если GLS сходится, то он решает тот же набор нелинейных уравнений для оценки, как решено ML. Можно также использовать GLS для оценки квазивероятности обобщенных линейных моделей. Другими словами, мы должны получить те же или эквивалентные решения от GLS и ML. Чтобы реализовать оценку GLS, обеспечьте нелинейную функцию, чтобы соответствовать, и функция отклонения для Биномиального распределения.

Средняя или образцовая функция

Образцовая функция описывает как изменения с. Для fitnlm образцовая функция:

Функция веса

fitnlm принимает веса наблюдения как указатель на функцию с помощью аргумента пары "имя-значение" 'Weights'. При использовании этой опции fitnlm принимает следующую модель:

где ответы приняты, чтобы быть независимыми, и пользовательский указатель на функцию, который принимает и возвращает вес наблюдения. Другими словами, веса обратно пропорциональны отклонению ответа. Для Биномиального распределения, используемого в модели логистической регрессии, создайте функцию веса можно следующим образом:

fitnlm моделирует отклонение ответа как, где дополнительный параметр, который присутствует по оценке GLS, но отсутствующий в модели логистической регрессии. Однако это обычно не влияет на оценку, и она обеспечивает "дисперсионный параметр", чтобы проверять при условии, что значения имеют Биномиальное распределение.

Преимущество использования fitnlm по прямому ML состоит в том, что можно выполнить тесты гипотезы и вычислить доверительные интервалы на коэффициентах модели.

Сгенерируйте данные в качестве примера

Чтобы проиллюстрировать различия между ML и подбором кривой GLS, сгенерируйте некоторые данные в качестве примера. Примите, что это является одномерным, и предположите, что истинная функция в нелинейной модели логистической регрессии является моделью Michaelis-Menten, параметризованной вектором:

    myf = @(beta,x) beta(1)*x./(beta(2) + x);

Создайте образцовую функцию, которая задает отношение между и.

    mymodelfun = @(beta,x) 1./(1 + exp(-myf(beta,x)));

Создайте вектор одномерных предикторов и истинного вектора коэффициентов.

    rng(300,'twister');
    x    = linspace(-1,1,200)';
    beta = [10;2];

Вычислите вектор значений для каждого предиктора.

    mu = mymodelfun(beta,x);

Сгенерируйте ответы от Биномиального распределения с вероятностями успеха и количеством испытаний.

    n = 50;
    z = binornd(n,mu);

Нормируйте ответы.

    y = z./n;

Подход ML

Подход ML задает отрицательную логарифмическую вероятность как функцию вектора, и затем минимизирует его с функцией оптимизации, такой как fminsearch. Задайте beta0 как начальное значение для.

    mynegloglik = @(beta) -sum(log(binopdf(z,n,mymodelfun(beta,x))));
    beta0 = [3;3];
    opts = optimset('fminsearch');
    opts.MaxFunEvals = Inf;
    opts.MaxIter = 10000;
    betaHatML = fminsearch(mynegloglik,beta0,opts)
betaHatML =

    9.9259
    1.9720

Предполагаемые коэффициенты в betaHatML близко к истинным значениям [10;2].

Подход GLS

Подход GLS создает функцию веса для fitnlm, ранее описанного.

    wfun = @(xx) n./(xx.*(1-xx));

Вызовите fitnlm с пользовательским средним значением и функциями веса. Задайте beta0 как начальное значение для.

    nlm = fitnlm(x,y,mymodelfun,beta0,'Weights',wfun)
nlm = 


Nonlinear regression model:
    y ~ F(beta,x)

Estimated Coefficients:
          Estimate      SE       tStat       pValue  
          ________    _______    ______    __________

    b1     9.926      0.83135     11.94     4.193e-25
    b2     1.972      0.16438    11.996    2.8182e-25


Number of observations: 200, Error degrees of freedom: 198
Root Mean Squared Error: 1.16
R-Squared: 0.995,  Adjusted R-Squared 0.995
F-statistic vs. zero model: 1.88e+04, p-value = 2.04e-226

Получите оценку от подходящего объекта NonLinearModel nlm.

    betaHatGLS = nlm.Coefficients.Estimate
betaHatGLS =

    9.9260
    1.9720

Как в методе ML, предполагаемые коэффициенты в betaHatGLS близко к истинным значениям [10;2]. Маленькие p-значения для обоих и указывают, что оба коэффициента существенно отличаются от.

Сравните подходы GLS и ML

Сравните оценки.

    max(abs(betaHatML - betaHatGLS))
ans =

   1.1460e-05

Сравните адаптированные значения с помощью ML и GLS

    yHatML  = mymodelfun(betaHatML ,x);
    yHatGLS = mymodelfun(betaHatGLS,x);
    max(abs(yHatML - yHatGLS))
ans =

   1.2746e-07

ML и подходы GLS производят аналогичные решения.

Постройте адаптированные значения с помощью ML и GLS

    h = figure;
    plot(x,y,'g','LineWidth',1);
    hold on;
    plot(x,yHatML ,'b'  ,'LineWidth',1);
    plot(x,yHatGLS,'m--','LineWidth',1);
    legend('Data','ML','GLS','Location','Best');
    xlabel('x');
    ylabel('y and fitted values');
    title('Data y along with ML and GLS fits.');
    snapnow;
    close(h);

ML и GLS производят подобные подходящие значения.

Постройте оцененную нелинейную функцию с помощью ML и GLS

Постройте истинную модель для. Добавьте график для первоначальной оценки использования и графики для ML, и GLS основывал оценки.

    h = figure;
    plot(x,myf(beta,x),'r','LineWidth',1);
    hold on;
    plot(x,myf(beta0,x)     ,'k'  ,'LineWidth',1);
    plot(x,myf(betaHatML ,x),'c--','LineWidth',1);
    plot(x,myf(betaHatGLS,x),'b-.','LineWidth',1);
    legend('True f','Initial f','Estimated f with ML','Estimated f with GLS','Location','Best');
    xlabel('x');
    ylabel('True and estimated f');
    title('Comparison of true f with estimated f using ML and GLS.');
    snapnow;
    close(h);

Предполагаемая нелинейная функция с помощью и ML и методов GLS близко к истинной нелинейной функции. Можно использовать подобный метод, чтобы соответствовать другим нелинейным обобщенным линейным моделям как нелинейная регрессия Пуассона.