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. Отличные переменные предикторы должны появиться в различных столбцах XB вектор содействующих оценок, как возвращено 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]';

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

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

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

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

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

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

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)

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

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

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}

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] Добсон, A. J. Введение в обобщенные линейные модели. Нью-Йорк: Chapman & Hall, 1990.

[2] Маккуллаг, P. и Дж. А. Нелдер. Обобщенные линейные модели. Нью-Йорк: Chapman & Hall, 1990.

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

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

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