Main Content

nlinfit

설명

예제

beta = nlinfit(X,Y,modelfun,beta0)modelfun으로 지정된 모델을 사용하여 X에 포함된 예측 변수에 대해 Y에 포함된 응답 변수의 비선형 회귀에 대한 추정된 계수로 구성된 벡터를 반환합니다. 계수는 beta0으로 지정된 초기값을 사용하여 반복 최소제곱 추정을 사용해 추정됩니다.

예제

beta = nlinfit(X,Y,modelfun,beta0,options)는 구조체 options의 알고리즘 제어 모수를 사용하여 비선형 회귀를 피팅합니다. 위에 열거된 구문에 포함된 모든 출력 인수를 반환할 수 있습니다.

예제

beta = nlinfit(___,Name,Value)는 하나 이상의 이름-값 쌍의 인수로 지정된 추가 옵션을 사용합니다. 예를 들어, 관측값 가중치를 지정하거나 상수가 아닌 오차 모델을 지정할 수 있습니다. 위에 열거된 구문의 모든 입력 인수와 사용할 수 있습니다.

예제

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(___)는 잔차 R, modelfun에 대한 야코비 행렬 J, 추정된 계수에 대한 추정된 분산-공분산 행렬 CovB, 오차항의 분산에 대한 추정값 MSE, 오차 모델에 대한 세부 정보를 포함하는 구조체 ErrorModelInfo를 추가로 반환합니다.

예제

모두 축소

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

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

beta0의 초기값을 사용하여 Hougen-Watson 모델을 반응 속도 데이터에 피팅합니다.

beta = nlinfit(X,y,@hougen,beta0)
beta = 5×1

    1.2526
    0.0628
    0.0400
    0.1124
    1.1914

비선형 회귀 모델 y=b1+b2exp{-b3x}+ϵ에서 표본 데이터를 생성합니다. 여기서 b1, b2b3은 계수이고, 오차항은 평균이 0이고 표준편차가 0.1인 정규분포를 가집니다.

modelfun = @(b,x)(b(1)+b(2)*exp(-b(3)*x));

rng('default') % for reproducibility
b = [1;3;2];
x = exprnd(2,100,1);
y = modelfun(b,x) + normrnd(0,0.1,100,1);

로버스트 피팅 옵션을 설정합니다.

opts = statset('nlinfit');
opts.RobustWgtFun = 'bisquare';

로버스트 피팅 옵션을 사용하여 비선형 모델을 피팅합니다.

beta0 = [2;2;2];
beta = nlinfit(x,y,modelfun,beta0,opts)
beta = 3×1

    1.0041
    3.0997
    2.1483

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

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

알려진 관측값 가중치로 구성된 벡터를 지정합니다.

W = [8 2 1 6 12 9 12 10 10 12 2 10 8]';

지정된 관측값 가중치를 사용하여 Hougen-Watson 모델을 반응 속도 데이터에 피팅합니다.

[beta,R,J,CovB] = nlinfit(X,y,@hougen,beta0,'Weights',W);
beta
beta = 5×1

    2.2068
    0.1077
    0.0766
    0.1818
    0.6516

계수 표준 오차를 표시합니다.

sqrt(diag(CovB))
ans = 5×1

    2.5721
    0.1251
    0.0950
    0.2043
    0.7735

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

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

관측값 가중치에 대한 함수 핸들을 지정합니다. 이 함수는 모델 피팅 값을 입력값으로 받고 가중치로 구성된 벡터를 반환합니다.

 a = 1; b = 1;
 weights = @(yhat) 1./((a + b*abs(yhat)).^2);

지정된 관측값 가중치 함수를 사용하여 Hougen-Watson 모델을 반응 속도 데이터에 피팅합니다.

[beta,R,J,CovB] = nlinfit(X,y,@hougen,beta0,'Weights',weights);
beta
beta = 5×1

    0.8308
    0.0409
    0.0251
    0.0801
    1.8261

계수 표준 오차를 표시합니다.

sqrt(diag(CovB))
ans = 5×1

    0.5822
    0.0297
    0.0197
    0.0578
    1.2810

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

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

결합된 오차 모델을 사용하여 Hougen-Watson 모델을 반응 속도 데이터에 피팅합니다.

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(X,y,@hougen,beta0,'ErrorModel','combined');
beta
beta = 5×1

    1.2526
    0.0628
    0.0400
    0.1124
    1.1914

오차 모델 정보를 표시합니다.

ErrorModelInfo
ErrorModelInfo = struct with fields:
              ErrorModel: 'combined'
         ErrorParameters: [0.1517 5.6783e-08]
           ErrorVariance: @(x)mse*(errorparam(1)+errorparam(2)*abs(model(beta,x))).^2
                     MSE: 1.6245
          ScheffeSimPred: 6
          WeightFunction: 0
            FixedWeights: 0
    RobustWeightFunction: 0

입력 인수

모두 축소

비선형 회귀 함수에 대한 예측 변수로, 행렬로 지정됩니다. 일반적으로, XY의 각 값에 대한 행을 하나씩 포함하고 각 예측 변수에 대한 열을 하나씩 포함하는 예측 변수(독립 변수) 값으로 구성된 설계 행렬입니다. 하지만, Xmodelfun이 받을 수 있는 배열이면 무엇이든 가능합니다.

데이터형: single | double

비선형 회귀 함수를 피팅하는 데 사용할 응답 변수 값(종속 변수)으로, X와 같은 개수의 행을 갖는 벡터로 지정됩니다.

데이터형: single | double

비선형 회귀 모델 함수로, 함수 핸들로 지정됩니다. modelfun은 두 개의 입력 인수, 하나의 계수 벡터, 그리고 하나의 배열 X를 이 순서대로 받은 후 피팅된 응답 변수 값으로 구성된 벡터를 반환해야 합니다.

예를 들어, hougen 비선형 회귀 함수를 지정하려면 함수 핸들 @hougen을 사용하십시오.

데이터형: function_handle

최소제곱 추정 알고리즘에 사용할 초기 계수 값으로, 벡터로 지정됩니다.

참고

시작 값을 잘못 선택하면 해의 잔차 오차가 커질 수 있습니다.

데이터형: single | double

추정 알고리즘 옵션으로, statset을 사용하여 생성하는 구조체로 지정됩니다. 다음 statset 모수는 nlinfit에 적용됩니다.

유한 차분 기울기 계산에 사용할 상대 오차로, 양의 스칼라 값 또는 beta와 같은 크기의 벡터로 지정됩니다. 각 계수마다 다른 상대 오차를 지정하려면 벡터를 사용하십시오.

추정하는 동안의 출력값 표시 수준으로, 'off', 'iter' 또는 'final' 중 하나로 지정됩니다. 'iter'을 지정하면 각 반복마다 출력값이 표시됩니다. 'final'을 지정하면 최종 반복 후 출력값이 표시됩니다.

목적 함수에서 NaN 또는 Inf와 같은 유효하지 않은 값을 검사할지 여부를 나타내는 표시자로, 'on' 또는 'off'로 지정됩니다.

추정 알고리즘에 사용할 최대 반복 횟수로, 양의 정수로 지정됩니다. 반복은 추정값이 수렴 허용오차 내에 들어가거나 MaxIter로 지정된 최대 반복 횟수에 도달할 때까지 계속됩니다.

로버스트 피팅에 사용할 가중치 함수로, 유효한 문자형 벡터, string형 스칼라 또는 함수 핸들로 지정됩니다.

참고

관측값 가중치 W를 사용하는 경우 RobustWgtFun은 값 []을 가져야 합니다.

다음 표에는 가능한 문자형 벡터 및 string형 스칼라가 설명되어 있습니다. r이 정규화된 잔차를 나타내고 w가 로버스트 가중치를 나타낸다고 하겠습니다. 표현식 x가 true이면 표시 함수 I[x]가 1과 같으며, 그렇지 않은 경우 0입니다.

가중치 함수수식디폴트 조율 상수
''(디폴트 값) 로버스트 피팅 없음
'andrews'

w=I[|r|<π]×sin(r)/r

1.339
'bisquare'

w=I[|r|<1]×(1r2)2

4.685
'cauchy'

w=1(1+r2)

2.385
'fair'

w=1(1+|r|)

1.400
'huber'

w=1max(1,|r|)

1.345
'logistic'

w=tanh(r)r

1.205
'talwar'

w=I[|r|<1]

2.795
'welsch'

w=exp{r2}

2.985

정규화된 잔차로 구성된 벡터를 입력값으로 받고 로버스트 가중치로 구성된 벡터를 출력값으로 반환하는 함수 핸들을 지정할 수도 있습니다. 함수 핸들을 사용하는 경우 Tune 상수를 제공해야 합니다.

로버스트 피팅에 사용할 조율 상수로, 양의 스칼라 값으로 지정됩니다. 조율 상수는 로버스트 가중치 함수를 적용하기 전에 잔차를 정규화하는 데 사용됩니다. 디폴트 조율 상수는 RobustWgtFun으로 지정된 함수에 따라 다릅니다.

함수 핸들을 사용하여 RobustWgtFun을 지정하는 경우 Tune에 대한 값을 지정해야 합니다.

잔차제곱합에 대한 종료 허용오차로, 양의 스칼라 값으로 지정됩니다. 반복은 추정값이 수렴 허용오차 내에 들어가거나 MaxIter로 지정된 최대 반복 횟수에 도달할 때까지 계속됩니다.

추정된 계수 beta에 대한 종료 허용오차로, 양의 스칼라 값으로 지정됩니다. 반복은 추정값이 수렴 허용오차 내에 들어가거나 MaxIter로 지정된 최대 반복 횟수에 도달할 때까지 계속됩니다.

이름-값 인수

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

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

예: 'ErrorModel','proportional','ErrorParameters',0.5는 오차 모수 추정에 대한 초기값으로 0.5를 갖는 비례 오차 모델을 지정합니다.

오차항 형식으로, 'ErrorModel'과 함께 오차 모델을 나타내는 'constant', 'proportional' 또는 'combined'가 쉼표로 구분되어 지정됩니다. 각 모델은 표준 평균 0과 단위 분산 변수 e를 독립적인 성분인 함수 값 f, 하나 또는 두 개의 모수 a 및 b와 함께 사용하여 오차를 정의합니다.

'constant'(디폴트 값)y=f+ae
'proportional'y=f+bfe
'combined'y=f+(a+b|f|)e

Weights를 사용하는 경우 유일하게 허용되는 오차 모델은 'constant'입니다.

참고

'constant'가 아닌 다른 오차 모델을 사용하는 경우 options.RobustWgtFun이 값 []을 가져야 합니다.

선택된 ErrorModel의 오차 모델 파라미터에 대한 초기 추정값으로, 'ErrorParameters'와 함께 스칼라 값 또는 요소를 2개 가진 벡터가 쉼표로 구분되어 지정됩니다.

오차 모델파라미터디폴트 값
'constant' a1
'proportional'b1
'combined'a, b[1,1]

예를 들어, 'ErrorModel'이 값 'combined'를 갖는 경우 다음과 같이 a에 대한 시작 값으로 1을 지정하고 b에 대한 시작 값으로 2를 지정할 수 있습니다.

예: 'ErrorParameters',[1,2]

Weights를 사용하는 경우 'constant' 오차 모델만 사용할 수 있습니다.

참고

'constant'가 아닌 다른 오차 모델을 사용하는 경우 options.RobustWgtFun이 값 []을 가져야 합니다.

데이터형: double | single

관측값 가중치로, 'Weights'와 함께 양의 실수 가중치로 구성된 벡터 또는 함수 핸들이 쉼표로 구분되어 지정됩니다. 관측값 가중치를 사용하여, 피팅된 모델에 더 적은 영향을 미치도록 하려는 관측값의 가중치를 줄일 수 있습니다.

  • W가 벡터이면 Y와 크기가 같아야 합니다.

  • W가 함수 핸들이면 예측된 응답 값으로 구성된 벡터를 입력값으로 받고 양의 실수 가중치로 구성된 벡터를 출력값으로 반환해야 합니다.

참고

관측값 가중치를 사용하는 경우 options.RobustWgtFun은 값 []을 가져야 합니다.

데이터형: double | single | function_handle

출력 인수

모두 축소

추정된 회귀 계수로, 벡터로 반환됩니다. beta에 포함된 요소 개수는 beta0에 포함된 요소 개수와 같습니다.

f(Xi,b)modelfun으로 지정된 비선형 함수를 나타낸다고 하겠습니다. 여기서 xi는 관측값 i(i = 1,...,N)에 대한 예측 변수이고, b는 회귀 계수입니다. beta로 반환되는 계수로 구성된 벡터는 다음과 같은 가중 최소제곱 식을 최소화합니다.

i=1Nwi[yif(xi,b)]2.

비가중 비선형 회귀의 경우 가중치 항은 모두 1입니다.

피팅된 모델에 대한 잔차로, 벡터로 반환됩니다.

  • 이름-값 쌍의 인수 Weights를 사용하여 관측값 가중치를 지정하는 경우 R가중 잔차를 포함합니다.

  • 이름-값 쌍의 인수 ErrorModel을 사용하여 'constant'가 아닌 다른 오차 모델을 지정하는 경우 R을 모델 피팅 잔차로 더 이상 해석할 수 없습니다.

비선형 회귀 모델 modelfun에 대한 야코비 행렬로, N×p 행렬로 반환됩니다. 여기서 N은 관측값 개수이고 p는 추정된 계수의 개수입니다.

  • 이름-값 쌍의 인수 Weights를 사용하여 관측값 가중치를 지정하는 경우 J가중 모델 함수 야코비 행렬입니다.

  • 이름-값 쌍의 인수 ErrorModel을 사용하여 'constant'가 아닌 다른 오차 모델을 지정하는 경우 J를 모델 함수 야코비 행렬로 더 이상 해석할 수 없습니다.

피팅된 계수 beta에 대한 추정된 분산-공분산 행렬로, p×p 행렬로 반환됩니다. 여기서 p는 추정된 계수의 개수입니다. 모델의 야코비 행렬 J가 완전 열 랭크를 갖는 경우 CovB = inv(J'*J)*MSE가 됩니다. 여기서 MSE는 평균제곱오차입니다.

피팅된 모델의 평균제곱오차(MSE)로, 스칼라 값으로 반환됩니다. MSE는 오차항의 분산에 대한 추정값입니다. 모델의 야코비 행렬 J가 완전 열 랭크를 갖는 경우 MSE = (R'*R)/(N-p)가 됩니다. 여기서 N은 관측값 개수이고 p는 추정된 계수의 개수입니다.

오차 모델 피팅에 대한 정보로, 다음 필드를 갖는 구조체로 반환됩니다.

ErrorModel선택된 오차 모델
ErrorParameters추정된 오차 모수
ErrorVarianceN×p 행렬 X를 받고 추정된 오차 모델을 사용하여 오차 분산으로 구성된 N×1 벡터를 반환하는 함수 핸들
MSE평균제곱오차
ScheffeSimPred추정된 오차 모델을 사용하는 경우 동시 예측 구간에 대한 사폐(Scheffé) 모수
WeightFunction이전에 nlinfit에서 사용자 지정 가중치 함수를 사용한 경우 값 true를 갖는 논리형
FixedWeights이전에 nlinfit에서 고정된 가중치를 사용한 경우 값 true를 갖는 논리형
RobustWeightFunction이전에 nlinfit에서 로버스트 피팅을 사용한 경우 값 true를 갖는 논리형

세부 정보

모두 축소

가중 잔차

가중 잔차는 대응되는 관측값 가중치에 대한 제곱근을 곱한 잔차입니다.

추정된 회귀 계수 b,가 주어진 경우 관측값 i의 잔차는 다음과 같습니다.

ri=yif(xi,b),

여기서 yi는 관측된 응답 변수이고 f(xi,b)는 예측 변수 xi.에서 피팅된 응답 변수입니다.

가중치 wi, i = 1,...,N을 사용하여 가중 비선형 회귀를 피팅하는 경우 nlinfit은 다음과 같은 가중 잔차를 반환합니다.

ri*=wi(yif(xi,b)).

가중 모델 함수 야코비 행렬

가중 모델 함수 야코비 행렬은 비선형 모델 야코비 행렬에 관측값 가중치 행렬의 제곱근을 곱한 것입니다.

추정된 회귀 계수 b,가 주어진 경우 비선형 함수 f(xi,b)에 대한 추정된 모델 야코비 행렬 J,는 다음과 같은 요소를 가집니다.

Jij=f(xi,b)bj,

여기서 bjb.의 j번째 요소입니다.

대각 가중치 행렬 W,를 사용하여 가중 비선형 회귀를 피팅하는 경우 nlinfit은 다음과 같은 가중 야코비 행렬을 반환합니다.

J*=W1/2J.

  • 예측 변수에 대한 오차 추정값을 생성하려면 선택적 출력 인수 R, J, CovB 또는 MSEnlpredci에 대한 입력값으로 사용하십시오.

  • 추정된 계수 beta에 대한 오차 추정값을 생성하려면 선택적 출력 인수 R, J, CovB 또는 MSEnlparci에 대한 입력값으로 사용하십시오.

  • 로버스트 피팅 옵션 RobustWgtFun을 사용하는 경우 CovB와 가능한 경우 MSEnlpredci 또는 nlparci에 대한 입력값으로 사용하여 신뢰구간이 로버스트 피팅을 고려하도록 해야 합니다.

알고리즘

  • nlinfitY 또는 modelfun(beta0,X)NaN 값을 누락된 데이터로 처리하고 이에 대응되는 관측값을 무시합니다.

  • 로버스트가 아닌 추정의 경우 nlinfit은 Levenberg-Marquardt 비선형 최소제곱 알고리즘 [1]을 사용합니다.

  • 로버스트 추정의 경우 nlinfitIteratively Reweighted Least Squares의 알고리즘([2], [3])을 사용합니다. 각 반복마다 이전 반복에서 얻은 각 관측값의 잔차를 기반으로 하여 로버스트 가중치가 재계산됩니다. 이러한 가중치를 사용해 이상값의 가중치를 낮추면 이상값이 피팅에 미치는 영향을 줄일 수 있습니다. 반복은 가중치가 수렴될 때까지 계속됩니다.

  • 관측값 가중치에 대한 함수 핸들을 지정하는 경우 가중치는 피팅된 모델에 따라 결정됩니다. 이 경우, nlinfit은 반복 일반화 최소제곱 알고리즘을 사용하여 비선형 회귀 모델을 피팅합니다.

참고 문헌

[1] Seber, G. A. F., and C. J. Wild. Nonlinear Regression. Hoboken, NJ: Wiley-Interscience, 2003.

[2] DuMouchel, W. H., and F. L. O'Brien. “Integrating a Robust Option into a Multiple Regression Computing Environment.” Computer Science and Statistics: Proceedings of the 21st Symposium on the Interface. Alexandria, VA: American Statistical Association, 1989.

[3] Holland, P. W., and R. E. Welsch. “Robust Regression Using Iteratively Reweighted Least-Squares.” Communications in Statistics: Theory and Methods, A6, 1977, pp. 813–827.

버전 내역

R2006a 이전에 개발됨

참고 항목

| | |

도움말 항목