exponenta event banner

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 добавляет первый столбец из 1 в 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 содержит значения переменных предиктора.

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

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.

Обучите обобщенную линейную модель, а затем создайте код из функции, которая классифицирует новые наблюдения на основе модели. Этот пример основан на примере «Использовать пользовательскую функцию связи».

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

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. Возвращает структурный массив статистики.

[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] Маккалла, П. и Дж. А. Нелдер. Обобщенные линейные модели. Нью-Йорк: Chapman & Hall, 1990.

[3] Коллетт, D. Моделирование двоичных данных. Нью-Йорк: Chapman & Hall, 2002.

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

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