Main Content

glmfit

일반화 선형 회귀 모델 피팅

    설명

    b = glmfit(X,y,distr)은 분포 distr을 사용하여, X의 예측 변수에 대한 y의 응답 변수의 일반화 선형 회귀 모델에 대한 계수 추정값으로 구성된 벡터 b를 반환합니다.

    예제

    b = glmfit(X,y,distr,Name,Value)는 하나 이상의 이름-값 인수를 사용하여 옵션을 추가로 지정합니다. 예를 들어, 모델에서 상수항을 생략하려면 'Constant','off'를 지정할 수 있습니다.

    예제

    [b,dev] = glmfit(___)은 피팅의 이탈도를 나타내는 값 dev도 반환합니다.

    [b,dev,stats] = glmfit(___)은 모델 통계량 stats도 반환합니다.

    예제

    모두 축소

    일반화 선형 회귀 모델을 피팅하고, 피팅된 모델을 사용하여 예측 변수 데이터에 대한 예측(추정)값을 계산합니다.

    표본 데이터 세트를 만듭니다.

    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의 대응되는 시행 횟수에 대한 성공 횟수입니다.

    x에서 y에 대한 프로빗 회귀 모델을 피팅합니다.

    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 object. The axes object contains 2 objects of type line.

    사용자 지정 연결 함수를 정의하고 이 함수를 사용하여 일반화 선형 회귀 모델을 피팅합니다.

    표본 데이터를 불러옵니다.

    load fisheriris

    열 벡터 species는 세 가지 붓꽃 종인 setosa, versicolor, virginica를 포함합니다. 행렬 meas는 꽃에 대한 네 가지 측정값 유형인 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비(단위: 센티미터)를 포함합니다.

    예측 변수와 응답 변수를 정의합니다.

    X = meas(51:end,:);
    y = strcmp('versicolor',species(51:end));

    로짓 연결 함수에 대해 사용자 지정 연결 함수를 정의합니다. 연결 함수, 연결 함수의 도함수, 역연결 함수를 정의하는 세 개의 함수 핸들을 만듭니다. 함수 핸들을 셀형 배열로 저장합니다.

    link = @(mu) log(mu./(1-mu));
    derlink = @(mu) 1./(mu.*(1-mu));
    invlink = @(resp) 1./(1+exp(-resp));
    F = {link,derlink,invlink};

    사용자 지정 연결 함수와 glmfit을 사용하여 로지스틱 회귀 모델을 피팅합니다.

    b = glmfit(X,y,'binomial','link',F)
    b = 5×1
    
       42.6378
        2.4652
        6.6809
       -9.4294
      -18.2861
    
    

    내장 logit 연결 함수를 사용하여 일반화 선형 모델을 피팅하고 결과를 비교합니다.

    b = glmfit(X,y,'binomial','link','logit')
    b = 5×1
    
       42.6378
        2.4652
        6.6809
       -9.4294
      -18.2861
    
    

    각 예측 변수에 대해 하나의 절편 항과 일차항을 포함하는 일반화 선형 회귀 모델을 피팅합니다. 모델이 상수 모델보다 현저히 잘 피팅되는지 여부를 확인하는 이탈도 검정을 수행합니다.

    두 개의 기본 예측 변수 X(:,1)X(:,2)를 갖는 푸아송 난수를 사용하여 표본 데이터를 생성합니다.

    rng('default') % For reproducibility
    rndvars = randn(100,2);
    X = [2 + rndvars(:,1),rndvars(:,2)];
    mu = exp(1 + X*[1;2]);
    y = poissrnd(mu);

    각 예측 변수에 대해 하나의 절편 항과 일차항을 포함하는 일반화 선형 회귀 모델을 피팅합니다.

    [b,dev] = glmfit(X,y,'poisson');

    두 번째 출력 인수 dev는 피팅의 이탈도입니다.

    절편만 포함하는 일반화 선형 회귀 모델을 피팅합니다. 예측 변수를 1로 구성된 열로 지정하고, glmfit이 모델에 상수항을 포함시키지 않도록 'Constant''off'로 지정합니다.

    [~,dev_noconstant] = glmfit(ones(100,1),y,'poisson','Constant','off');

    dev_constantdev의 차를 계산합니다.

    D = dev_noconstant - dev
    D = 2.9533e+05
    

    D는 자유도가 2인 카이제곱 분포를 갖습니다. 자유도는 dev에 대응되는 이 모델의 추정 모수의 개수와 상수 모델의 추정 모수의 개수 사이의 차와 같습니다. 이탈도 검정에 대한 p-값을 구합니다.

    p = 1 - chi2cdf(D,2)
    p = 0
    

    p-값이 작으면 모델이 상수에 비해 크게 다름을 나타냅니다.

    또는, fitglm 함수를 사용하여 푸아송 데이터로 구성된 일반화 선형 회귀 모델을 만들 수도 있습니다. 모델 표시 화면에 통계량 (Chi^2-statistic vs. constant model)과 p-값이 포함됩니다.

    mdl = fitglm(X,y,'y ~ x1 + x2','Distribution','poisson')
    mdl = 
    Generalized linear regression model:
        log(y) ~ 1 + x1 + x2
        Distribution = Poisson
    
    Estimated Coefficients:
                       Estimate       SE        tStat     pValue
                       ________    _________    ______    ______
    
        (Intercept)     1.0405      0.022122    47.034      0   
        x1              0.9968      0.003362    296.49      0   
        x2               1.987     0.0063433    313.24      0   
    
    
    100 observations, 97 error degrees of freedom
    Dispersion: 1
    Chi^2-statistic vs. constant model: 2.95e+05, p-value = 0
    

    피팅된 모델 객체에 devianceTest 함수를 사용할 수도 있습니다.

    devianceTest(mdl)
    ans=2×4 table
                                 Deviance     DFE     chi2Stat     pValue
                                __________    ___    __________    ______
    
        log(y) ~ 1              2.9544e+05    99                         
        log(y) ~ 1 + x1 + x2         107.4    97     2.9533e+05       0  
    
    

    입력 인수

    모두 축소

    예측 변수로, n×p 숫자형 행렬로 지정됩니다. 여기서 n은 관측값 개수이고 p는 예측 변수 개수입니다. X의 각 열은 하나의 변수를 나타내고, 각 행은 하나의 관측값을 나타냅니다.

    기본적으로 glmfit은 모델에 상수항을 포함시킵니다. X에 1로 구성된 열을 직접 추가하지 마십시오. 'Constant' 이름-값 인수를 지정하여 glmfit의 디폴트 동작을 변경할 수 있습니다.

    데이터형: single | double

    응답 변수로, 벡터 또는 행렬로 지정됩니다.

    • distr'binomial'이 아니면 y는 n×1 벡터여야 합니다. 여기서 n은 관측값 개수입니다. y의 각 요소는 X의 대응 행에 대한 응답 변수입니다. 데이터형은 single형 또는 double형이어야 합니다.

    • distr'binomial'이면 y는 각 관측값에서의 성공 또는 실패를 나타내는 n×1 벡터이거나 첫 번째 열이 각 관측값에 대한 성공 횟수를 나타내고 두 번째 열이 각 관측값에 대한 시행 횟수를 나타내는 n×2 행렬입니다.

    데이터형: single | double | logical | categorical

    응답 변수의 분포로, 다음 표에 있는 값 중 하나로 지정됩니다.

    설명
    'normal'정규분포(디폴트 값)
    'binomial'이항분포
    'poisson'푸아송 분포
    'gamma'감마 분포
    'inverse gaussian'역가우스 분포

    이름-값 인수

    선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

    R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

    예: b = glmfit(X,y,'normal','link','probit')은 응답 변수의 분포가 정규분포임을 지정하고 glmfit에 프로빗 연결 함수를 사용하도록 지시합니다.

    계수 추정값의 초기값으로, 숫자형 벡터로 지정됩니다. 디폴트 값은 입력 데이터에서 파생된 초기 피팅 값입니다.

    데이터형: single | double

    피팅에 포함된 상수항(절편)에 대한 표시자로, 'on'(상수항 포함) 또는 'off'(모델에서 상수항 제외)로 지정됩니다.

    • 'on'(디폴트 값) — glmfit은 모델에 상수항을 포함시키고 계수 추정값 b로 구성된 (p + 1)×1 벡터를 반환합니다. 여기서 p는 X의 예측 변수 개수입니다. 상수항의 계수는 b의 첫 번째 요소입니다.

    • 'off'glmfit은 상수항을 생략하고 계수 추정값 b로 구성된 a p×1 벡터를 반환합니다.

    예: 'Constant','off'

    'binomial' 분포와 'poisson' 분포의 산포 모수를 계산하기 위한 표시자로, 'on' 또는 'off'로 지정됩니다.

    설명
    'on'표준 오차를 계산할 때 산포 모수를 추정합니다. 추정된 산포 모수 값은 피어슨 잔차의 제곱합을 오차에 대한 자유도(DFE)로 나눈 값입니다.
    'off'표준 오차를 계산할 때 이론적 값인 1을 사용합니다(디폴트 값).

    피팅 함수는 다른 분포에 대해서는 항상 산포를 추정합니다.

    예: 'EstDisp','on'

    정준 연결 함수 대신 사용할 연결 함수로, 다음 표에 나와 있는 내장 연결 함수 중 하나로 지정되거나 사용자 지정 연결 함수로 지정됩니다.

    연결 함수 이름연결 함수평균 함수(역함수)
    'identity'('normal' 분포의 디폴트 값)f(μ) = μμ = Xb
    'log'('poisson' 분포의 디폴트 값)f(μ) = log(μ)μ = exp(Xb)
    'logit'('binomial' 분포의 디폴트 값)f(μ) = log(μ/(1 – μ))μ = exp(Xb) / (1 + exp(Xb))
    'probit'f(μ) = Φ–1(μ), 여기서 Φ는 표준 정규분포에 대한 누적 분포 함수임μ = Φ(Xb)

    'loglog'

    f(μ) = log(–log(μ))μ = exp(–exp(Xb))
    'comploglog'f(μ) = log(–log(1 – μ))μ = 1 – exp(–exp(Xb))
    'reciprocal'('gamma' 분포의 디폴트 값)f(μ) = 1/μμ = 1/(Xb)
    p(숫자, p = –2인 'inverse gaussian' 분포의 디폴트 값)f(μ) = μpμ = Xb1/p

    디폴트 'Link' 값은 정준 연결 함수로, distr 인수로 지정되는 응답 변수의 분포에 따라 달라집니다.

    구조체 또는 셀형 배열을 사용하여 사용자 지정 연결 함수를 지정할 수 있습니다.

    • 세 개의 필드를 갖는 구조체. 구조체(예: S)의 각 필드는 입력값으로 구성된 벡터를 받고 동일한 크기의 벡터를 반환하는 함수 핸들을 포함합니다.

      • S.Link — 연결 함수, f(μ) = S.Link(μ)

      • S.Derivative — 연결 함수의 도함수

      • S.Inverse — 역연결 함수, μ = S.Inverse(Xb)

    • 연결 함수(FL(mu)), 연결 함수의 도함수(FD = dFL(mu)/dmu), 역연결 함수(FI = FL^(–1))를 정의하는 {FL FD FI} 형식의 셀형 배열. 각 요소는 입력값으로 구성된 벡터를 받고 동일한 크기의 벡터를 반환하는 함수 핸들을 포함합니다.

    연결 함수는 평균 응답 변수 μ와 예측 변수의 일차 결합 X*b 간의 관계 f(μ) = X*b를 정의합니다.

    예: 'Link','probit'

    데이터형: single | double | char | string | struct | cell

    피팅의 오프셋 변수로, 응답 변수 y와 길이가 같은 숫자형 벡터로 지정됩니다.

    glmfit 함수는 Offset을 계수 값이 1로 고정된 추가 예측 변수로 사용합니다. 즉, 피팅 수식은 다음과 같습니다.

    f(μ) = Offset + X*b,

    여기서 f는 연결 함수이고, μ는 평균 응답 변수이고, X*b는 예측 변수 X의 일차 결합입니다. Offset 예측 변수의 계수는 1입니다.

    예를 들어, 푸아송 회귀 모델이 있다고 가정하겠습니다. 이론상으로는 횟수의 개수가 예측 변수 A에 비례한다고 가정하겠습니다. 로그 연결 함수를 사용하고 log(A)를 오프셋으로 지정하면 모델이 이론상의 제약 조건을 만족하도록 강제할 수 있습니다.

    데이터형: single | double

    최적화 옵션으로, 구조체로 지정됩니다. 이 인수는 glmfit 함수가 사용하는 반복 알고리즘에 대한 제어 파라미터를 지정합니다.

    함수 statset을 사용하거나 다음 표에서 설명하는 필드 및 값을 포함하는 구조체형 배열을 만들어서 'Options' 값을 만듭니다.

    필드 이름디폴트 값
    Display

    알고리즘이 표시하는 정보의 양

    • 'off' — 표시되는 정보가 없음

    • 'final' — 최종 출력값을 표시함

    'off'
    MaxIter

    허용되는 최대 반복 횟수로, 양의 정수로 지정됩니다.

    100
    TolX

    모수에 대한 종료 허용오차로, 양의 스칼라로 지정됩니다.

    1e-6

    명령 창에 statset('glmfit')을 입력하여 glmfit 함수가 'Options' 이름-값 인수로 받는 필드의 이름과 디폴트 값을 확인할 수도 있습니다.

    예: 'Options',statset('Display','final','MaxIter',1000)은 반복 알고리즘 결과의 최종 정보를 표시하고 허용되는 최대 반복 횟수를 1000으로 변경하도록 지정합니다.

    데이터형: struct

    관측값 가중치로, 음이 아닌 스칼라 값으로 구성된 n×1 벡터로 지정됩니다. 여기서 n은 관측값 개수입니다.

    데이터형: single | double

    출력 인수

    모두 축소

    계수 추정값으로, 숫자형 벡터로 반환됩니다.

    • 'Constant''on'(디폴트 값)이면 glmfit은 모델에 상수항을 포함시키고 계수 추정값 b로 구성된 (p + 1)×1 벡터를 반환합니다. 여기서 p는 X의 예측 변수 개수입니다. 상수항의 계수는 b의 첫 번째 요소입니다.

    • 'Constant''off'이면 glmfit은 상수항을 생략하고 계수 추정값 b로 구성된 p×1 벡터를 반환합니다.

    피팅의 이탈도로, 숫자형 값으로 반환됩니다. 이탈도는 한 모델이 다른 모델의 특수 케이스인 경우 두 모델을 비교하는 데 유용합니다. 두 모델의 이탈도 차이는 자유도가 두 모델의 추정 모수의 차와 동일한 카이제곱 분포를 갖습니다.

    자세한 내용은 이탈도 항목을 참조하십시오.

    모델 통계량으로, 다음 필드를 갖는 구조체로 반환됩니다.

    • beta — 계수 추정값 b

    • dfe — 오차에 대한 자유도

    • sfit — 추정된 산포 모수

    • s — 이론적 또는 추정된 산포 모수

    • estdisp'EstDisp''off'이면 0, 'EstDisp''on'이면 1

    • covbb에 대해 추정된 공분산 행렬

    • se — 계수 추정값 b에 대한 표준 오차로 구성된 벡터

    • coeffcorrb에 대한 상관 행렬

    • tb에 대한 t 통계량

    • pb에 대한 p-값

    • resid — 잔차로 구성된 벡터

    • residp — 피어슨(Pearson) 잔차로 구성된 벡터

    • residd — 이탈도 잔차로 구성된 벡터

    • resida — 앤스콤(Anscombe) 잔차로 구성된 벡터

    이항분포 또는 푸아송 분포에 대한 산포 모수를 추정하는 경우 stats.sstats.sfit와 동일합니다. 또한, stats.se의 요소는 해당 이론적 값에서 인자 stats.s만큼 다릅니다.

    세부 정보

    모두 축소

    이탈도

    이탈도는 잔차 제곱합을 일반화한 것입니다. 이탈도는 포화된 모델에 비해 피팅의 적합도를 측정합니다.

    모델 M1의 이탈도는 모델 M1과 포화된 모델 Ms의 로그 가능도의 차의 두 배입니다. 포화된 모델이란 추정할 수 있는 최대 모수 개수를 갖는 모델입니다.

    예를 들어, n개의 관측값 (yi, i = 1, 2, ..., n)이 있고 XiTβ의 값이 서로 다른 여러 개의 값일 수 있다면 n개의 모수를 갖는 포화된 모델을 정의할 수 있습니다. L(b,y)가 모수 b를 갖는 모델에 대한 가능도 함수의 최댓값을 나타낸다고 하겠습니다. 이 경우 모델 M1의 이탈도는 다음과 같습니다.

    2(logL(b1,y)logL(bS,y)),

    여기서 b1과 bs는 각각 모델 M1과 포화된 모델에 대한 추정된 모수를 포함합니다. 이탈도는 자유도가 n – p인 카이제곱 분포를 갖습니다. 여기서 n은 포화된 모델의 모수 개수이고 p는 모델 M1의 모수 개수입니다.

    두 개의 서로 다른 일반화 선형 회귀 모델 M1과 M2가 있고 M1이 M2 항의 서브셋을 갖는다고 가정하겠습니다. 두 모델의 이탈도 D1과 D2를 비교하여 모델의 피팅을 평가할 수 있습니다. 이탈도의 차이는 다음과 같습니다.

    D=D2D1=2(logL(b2,y)logL(bS,y))+2(logL(b1,y)logL(bS,y))=2(logL(b2,y)logL(b1,y)).

    차이 D는 점근적으로 자유도 v가 M1과 M2에서 추정된 모수 개수의 차이인 카이제곱 분포를 갖습니다. 1 – chi2cdf(D,v)를 사용하여 이 검정의 p-값을 얻을 수 있습니다.

    일반적으로, 상수항이 하나이고 예측 변수가 없는 모델 M2를 사용하여 D를 조사합니다. 따라서 D는 자유도가 p – 1인 카이제곱 분포를 갖습니다. 산포가 추정된 경우, 차이를 추정된 산포로 나눈 값은 분자 자유도가 p – 1이고 분모 자유도가 n – p인 F 분포를 갖습니다.

    • glmfitX 또는 y에서 NaN을 누락값으로 처리하여 무시합니다.

    대체 기능

    glmfit은 단순히 함수의 출력 인수가 필요하거나 루프에서 모델을 여러 차례 반복 피팅하려는 경우에 유용합니다. 피팅된 모델을 추가로 조사하려면 fitglm 또는 stepwiseglm을 사용하여 일반화 선형 회귀 모델 객체 GeneralizedLinearModel을 생성하십시오. GeneralizedLinearModel 객체는 glmfit보다 더 많은 기능을 제공합니다.

    • GeneralizedLinearModel의 속성을 사용하여 피팅된 모델을 조사하십시오. 객체 속성에는 계수 추정값, 요약 통계량, 피팅 방법 및 입력 데이터에 대한 정보가 포함됩니다.

    • GeneralizedLinearModel의 객체 함수를 사용하여 응답 변수를 예측하고 일반화 선형 회귀 모델을 수정, 평가 및 시각화하십시오.

    • GeneralizedLinearModel의 속성 및 객체 함수를 사용하여 glmfit의 출력값에 있는 정보를 확인할 수 있습니다.

      glmfit의 출력값GeneralizedLinearModel의 상응하는 값
      bCoefficients 속성의 Estimate 열을 참조하십시오.
      devDeviance 속성을 참조하십시오.
      stats

      명령 창에서 모델 표시 화면을 참조하십시오. 모델 속성(CoefficientCovariance, Coefficients, Dispersion, DispersionEstimatedResiduals)에서 통계량을 확인할 수 있습니다.

      glmfitstats.s에 있는 산포 모수는 계수의 표준 오차에 대한 스케일링 인자이고, 일반화 선형 모델의 Dispersion 속성에 있는 산포 모수는 응답 변수의 분산에 대한 스케일링 인자입니다. 따라서 stats.sDispersion 값의 제곱근입니다.

    참고 문헌

    [1] Dobson, A. J. An Introduction to Generalized Linear Models. New York: Chapman & Hall, 1990.

    [2] McCullagh, P., and J. A. Nelder. Generalized Linear Models. New York: Chapman & Hall, 1990.

    [3] Collett, D. Modeling Binary Data. New York: Chapman & Hall, 2002.

    확장 기능

    버전 내역

    R2006a 이전에 개발됨