glmval

Обобщенные значения линейной модели

Синтаксис

yhat = glmval(b,X,link)
[yhat,dylo,dyhi] = glmval(b,X,link,stats)
[...] = glmval(...,param1,val1,param2,val2,...)

Описание

yhat = glmval(b,X,link) вычисляет предсказанные значения для обобщенной линейной модели с функцией ссылки link и предикторы X. Отдельные переменные предиктора должны появиться в разных столбцах X. b является вектором оценок коэффициентов, возвращенных glmfit функция. link может быть любым из векторов символов, строковых скаляров или пользовательских функций ссылки, используемых в качестве значений для 'link' аргумент пары "имя-значение" в glmfit функция.

Примечание

По умолчанию glmval добавляет первый столбец 1s в X, соответствующий постоянному члену в модели. Не вводите столбец 1с непосредственно в X. Вы можете изменить поведение по умолчанию для glmval использование 'constant' параметр.

[yhat,dylo,dyhi] = glmval(b,X,link,stats) также вычисляет 95% доверительные границы для предсказанных значений. Когда stats структурный выход glmfit функция задана, dylo и dyhi также возвращаются. dylo и dyhi задайте нижнюю доверительную границу yhat-dyloи верхняя доверительная граница yhat+dyhi. Доверительные границы не являются симульными и применяются к подобранной кривой, а не к новому наблюдению.

[...] = glmval(...,param1,val1,param2,val2,...) задает необязательные пары имя/значение параметра, чтобы управлять предсказанными значениями. Приемлемые параметры перечислены в этой таблице:

ПараметрЗначение

'confidence' - доверительный уровень для доверительных границ

Скаляр между 0 и 1

'size' - параметр размера (N) для биномиальной модели

Скаляр или вектор с одним значением для каждой строки X

'offset' - используется в качестве дополнительной переменной предиктора, но со значением коэффициента, фиксированным на уровне 1,0

Вектор

'constant'
  • 'on' - Включает в себя постоянный член в модели. Коэффициент постоянного члена является первым элементом b.

  • 'off' - Опустить постоянный термин

'simultaneous' - Вычисление одновременных доверительных интервалов (true), или вычислить несимульсные доверительные интервалы (по умолчанию false)true или false

Примеры

свернуть все

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

Создайте выборочные данные набор.

x = [2100 2300 2500 2700 2900 3100 ...
     3300 3500 3700 3900 4100 4300]';
n = [48 42 31 34 31 21 23 23 21 16 17 21]';
y = [1 2 0 3 8 8 14 17 19 15 17 21]';

x содержит значения переменных предиктора. Каждый y значение - количество успехов в соответствующем количестве испытаний в n.

Подбор модели регрессии пробита для y на x.

b = glmfit(x,[y n],'binomial','Link','probit');

Вычислите предполагаемое количество успешных попыток.

yfit = glmval(b,x,'probit','Size',n);

Постройте график наблюдаемого процента успеха и предполагаемого процента успеха по сравнению с x значения.

plot(x,y./n,'o',x,yfit./n,'-')

Figure contains an axes. The axes contains 2 objects of type line.

Введите выборочные данные.

x = [2100 2300 2500 2700 2900 3100 ...
     3300 3500 3700 3900 4100 4300]';
n = [48 42 31 34 31 21 23 23 21 16 17 21]';
y = [1 2 0 3 8 8 14 17 19 15 17 21]';

Каждый y значение - количество успехов в соответствующем количестве испытаний в n, и x содержит значения переменных предиктора.

Задайте три указателя на функцию, созданные при помощи @, которые задают ссылку, производную ссылку и обратную ссылку для функции probit ссылки,. Храните указатели в массиве ячеек.

link = @(mu) norminv(mu);
derlink = @(mu) 1 ./ normpdf(norminv(mu));
invlink = @(resp) normcdf(resp);
F = {link, derlink, invlink};

Подбор обобщенной линейной модели для y на x при помощи заданной функции ссылки.

b = glmfit(x,[y n],'binomial','link',F);

Вычислите предполагаемое количество успешных попыток. Постройте график наблюдаемого и предполагаемого процента успеха по сравнению с x значения.

yfit = glmval(b,x,F,'size',n);
plot(x, y./n,'o',x,yfit./n,'-','LineWidth',2)

Figure contains an axes. The axes contains 2 objects of type line.

Обучите обобщенную линейную модель, а затем сгенерируйте код из функции, которая классифицирует новые наблюдения на основе модели. Этот пример основан на примере Use Custom-Defined Link Function.

Введите выборочные данные.

x = [2100 2300 2500 2700 2900 3100 ...
     3300 3500 3700 3900 4100 4300]';
n = [48 42 31 34 31 21 23 23 21 16 17 21]';
y = [1 2 0 3 8 8 14 17 19 15 17 21]';

Предположим, что обратный режим PDF является подходящей функцией ссылки для задачи.

Задайте функцию с именем myInvNorm.m который принимает значения$X\beta$ и возвращает соответствующие значения обратной переменной стандартного нормального cdf.

function in = myInvNorm(mu) %#codegen
%myInvNorm Inverse of standard normal cdf for code generation
%   myInvNorm is a GLM link function that accepts a numeric vector mu, and
%   returns in, which is a numeric vector of corresponding values of the
%   inverse of the standard normal cdf.
%   
in = norminv(mu);
end


Задайте другую функцию с именем myDInvNorm.m который принимает значения$X\beta$ и возвращает соответствующие значения производной функции ссылки.

function din = myDInvNorm(mu) %#codegen
%myDInvNorm Derivative of inverse of standard normal cdf for code
%generation
%   myDInvNorm corresponds to the derivative of the GLM link function
%   myInvNorm. myDInvNorm accepts a numeric vector mu, and returns din,
%   which is a numeric vector of corresponding derivatives of the inverse
%   of the standard normal cdf.
%   
din = 1./normpdf(norminv(mu));
end


Задайте другую функцию с именем myInvInvNorm.m который принимает значения$X\beta$ и возвращает соответствующие значения обратной функции ссылки.

function iin = myInvInvNorm(mu) %#codegen
%myInvInvNorm Standard normal cdf for code generation
%   myInvInvNorm is the inverse of the GLM link function myInvNorm.
%   myInvInvNorm accepts a numeric vector mu, and returns iin, which is a
%   numeric vector of corresponding values of the standard normal cdf.
% 
iin = normcdf(mu);
end


Создайте массив структур, который задает каждую из функций ссылки. В частности, массив структур содержит поля с именем 'Link', 'Derivative', и 'Inverse'. Соответствующими значениями являются имена функций.

link = struct('Link','myInvNorm','Derivative','myDInvNorm',...
    'Inverse','myInvInvNorm')
link = 

  struct with fields:

          Link: 'myInvNorm'
    Derivative: 'myDInvNorm'
       Inverse: 'myInvInvNorm'

Подбор GLM для y на x использование функции link link. Верните массив структур статистики.

[b,~,stats] = glmfit(x,[y n],'binomial','link',link);

b является вектором 2 на 1 коэффициентах регрессии.

В текущей рабочей папке задайте функцию, называемую classifyGLM.m что:

  • Принимает измерения с столбцами, соответствующими показателям в x, коэффициенты регрессии, размерности которых соответствуют b, функцию ссылки связи, структуру статистики GLM и любые действительные glmval аргумент пары "имя-значение"

  • Возвращает предсказания и доверительные интервальные поля ошибки

function [yhat,lo,hi] = classifyGLM(b,x,link,varargin) %#codegen
%CLASSIFYGLM Classify measurements using GLM model 
%   CLASSIFYGLM classifies the n observations in the n-by-1 vector x using
%   the GLM model with regression coefficients b and link function link,
%   and then returns the n-by-1 vector of predicted values in yhat.
%   CLASSIFYGLM also returns margins of error for the predictions using
%   additional information in the GLM statistics structure stats.
narginchk(3,Inf);
if(isstruct(varargin{1}))
    stats = varargin{1};
    [yhat,lo,hi] = glmval(b,x,link,stats,varargin{2:end});
else
    yhat = glmval(b,x,link,varargin{:});
end
end

Сгенерируйте MEX-функцию из classifyGLM.m. Поскольку на C используется статическое типирование, codegen необходимо определить свойства всех переменных в файлах MATLAB ® во время компиляции. Чтобы убедиться, что MEX-функция может использовать те же входы, используйте -args аргумент для задания следующего в заданном порядке:

  • Коэффициенты регрессии b как константа времени компиляции

  • Наблюдения в выборке x

  • Ссылка как константа времени компиляции

  • Результат статистики GLM как константа времени компиляции

  • Имя 'Confidence' как константа времени компиляции

  • Доверительный уровень 0.9

Чтобы обозначить аргументы как константы времени компиляции, используйте coder.Constant.

codegen -config:mex classifyGLM -args {coder.Constant(b),x,coder.Constant(link),coder.Constant(stats),coder.Constant('Confidence'),0.9}
Code generation successful.

codegen генерирует файл MEX classifyGLM_mex.mexw64 в текущей папке. Расширение файла зависит от вашей системной платформы.

Сравнение предсказаний при помощи glmval и classifyGLM_mex. Задайте аргументы пары "имя-значение" в том же порядке, что и в -args аргумент в вызове codegen.

[yhat1,melo1,mehi1] = glmval(b,x,link,stats,'Confidence',0.9);
[yhat2,melo2,mehi2] = classifyGLM_mex(b,x,link,stats,'Confidence',0.9);

comp1 = (yhat1 - yhat2)'*(yhat1 - yhat2);
agree1 = comp1 < eps
comp2 = (melo1 - melo2)'*(melo1 - melo2);
agree2 = comp2 < eps
comp3 = (mehi1 - mehi2)'*(mehi1 - mehi2);
agree3 = comp3 < eps
agree1 =

  logical

   1


agree2 =

  logical

   1


agree3 =

  logical

   1

Сгенерированная MEX-функция производит те же предсказания, что и predict.

Ссылки

[1] Добсон, А. Дж. Введение в обобщенные линейные модели. Нью-Йорк: Chapman & Hall, 1990.

[2] McCullagh, P., and J. A. Nelder. Обобщенные линейные модели. Нью-Йорк: Chapman & Hall, 1990.

[3] Collett, D. Modeling Binary Data. Нью-Йорк: Chapman & Hall, 2002.

Расширенные возможности

.
Представлено до R2006a