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

Этот пример показывает два способа подбирать нелинейную модель логистической регрессии. Первый метод использует наибольшее правдоподобие (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 близко к истинной нелинейной функции. Можно использовать подобный метод, чтобы подбирать другие нелинейные обобщенные линейные модели как нелинейная регрессия Пуассона.