기울기 구속 조건이있는 선형 회귀


18

에서 매우 간단한 선형 회귀를 수행하고 싶습니다 R. 공식은 만큼 간단 합니다. 그러나 기울기 ( a )가 1.4와 1.6 사이의 간격 안에 있기를 원합니다 .y=ax+b

이것을 어떻게 할 수 있습니까?

답변:


24

R에서 선형 회귀를 수행하고 싶습니다. ... 경사가 1.4와 1.6 사이의 간격 내에 있기를 원합니다. 이것을 어떻게 할 수 있습니까?

(i) 간단한 방법 :

  • 회귀에 적합합니다. 그것이 범위 안에 있다면 끝났습니다.

  • 경계에 속하지 않으면 경사를 가장 가까운 경계로 설정하고

  • 모든 관측치에 대한 평균 절편을 추정합니다 .(yax)

(ii) 더 복잡한 방법 : 경사면에 상자 구속 조건이있는 최소 제곱을 수행하십시오. 많은 최적화 루틴은 상자 제약을 구현합니다 nlminb( 예 : R과 함께).

편집 : 실제로 (아래 예에서 언급했듯이) 바닐라 R에서 nls상자 제약 조건을 수행 할 수 있습니다. 예제에서 볼 수 있듯이, 실제로 매우 쉽습니다.

제한된 회귀를보다 직접적으로 사용할 수 있습니다. pcls"mgcv"패키지의 nnls기능 과 "nnls"패키지 의 기능 이 모두 작동 한다고 생각합니다 .

-

후속 질문에 답변하도록 수정-

nlminbR과 함께 nls제공된 이후 로 사용하는 방법을 보여 주려고 하지만 이미 제한된 루틴을 구현하기 위해 동일한 루틴 (PORT 루틴)을 사용 한다는 것을 깨달았습니다 . 그래서 아래 예제는 그 경우를 수행합니다.

NB : 아래 예에서 는 절편이고 b 는 기울기입니다 (통계에서 더 일반적인 규칙). 나는 당신이 다른 방향으로 시작했다는 것을 여기에 넣은 후에 깨달았습니다. 그래도 귀하의 질문과 관련하여 '뒤로'예를 남겨 두겠습니다.ab

먼저, 범위 내에 'true'기울기가있는 데이터를 설정하십시오.

 set.seed(seed=439812L)
 x=runif(35,10,30)
 y = 5.8 + 1.53*x + rnorm(35,s=5)  # population slope is in range
 plot(x,y)
 lm(y~x)

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
     12.681        1.217  

...하지만 LS 추정치는 랜덤 변동으로 인해 외부에 있습니다. 따라서 제한된 회귀를 nls다음 에서 사용하십시오 .

 nls(y~a+b*x,algorithm="port",
   start=c(a=0,b=1.5),lower=c(a=-Inf,b=1.4),upper=c(a=Inf,b=1.6))

Nonlinear regression model
  model: y ~ a + b * x
   data: parent.frame()
    a     b 
9.019 1.400 
 residual sum-of-squares: 706.2

Algorithm "port", convergence message: both X-convergence and relative convergence (5)

보시다시피 경계에 경사가 있습니다. 적합 모델을 전달하면 summary표준 오류와 t- 값도 생성되지만 이것이 얼마나 의미 있고 해석 가능한지 잘 모르겠습니다.

ybx

 b=1.4
 c(a=mean(y-x*b),b=b)
       a        b 
9.019376 1.400000

같은 추정치입니다 ...

아래 그림에서 파란색 선은 최소 제곱이고 빨간색 선은 제한된 최소 제곱입니다.

제한 및 LS 라인


이 답변에 감사하지만 ...이 기능 중 하나를 사용하여 예를 들어 줄 수 있습니까?
Iñigo Hernáez Corres 2016

1
+1 모수 추정치에서 신뢰 구간을 찾는 것은 어떤 상황에서도 어려운 일이 될 것입니다.
whuber

@ IñigoHernáezCorres는 내 대답에 대한 업데이트를 보았습니다 nls.
Glen_b-복지 주 모니카

두 가지 방법으로 연결하여 +1 큰 답변!
Haitao Du

15

상자 제약 조건으로 최소 제곱을 사용하는 Glen_b의 두 번째 방법은 능선 회귀를 통해보다 쉽게 ​​구현할 수 있습니다. 능선 회귀에 대한 해는 가중치 벡터의 규범의 크기 (따라서 그 경사)에 대한 경계를 갖는 회귀에 대한 라그랑지안으로 볼 수 있습니다. 따라서 아래의 whuber의 제안에 따라 (1.6 + 1.4) / 2 = 1.5의 추세를 뺀 다음 릿지 회귀를 적용하고 기울기의 크기가 0.1 이하가 될 때까지 릿지 매개 변수를 점차적으로 늘리는 것이 접근법입니다.

이 접근 방식의 장점은 R (및 다른 많은 패키지)에서 이미 사용할 수있는 능선 회귀 분석과 같은 고급 최적화 도구가 필요하지 않다는 것입니다.

그러나 Glen_b의 간단한 해결책 (i)은 나에게 합리적인 것처럼 보입니다 (+1)


5
이것은 영리하지만 설명대로 작동합니까? 적절한 접근법은 (1.6 + 1.4) / 2 = 1.5의 추세를 제거한 다음 기울기 의 절대 값 이 0.1 이하가 될 때까지 릿지 매개 변수를 제어하는 것 같습니다.
whuber

1
그렇습니다, 그것은 실제로 더 나은 제안입니다. 릿지 회귀 접근법은 제한이 기울기의 크기에 있다면 훨씬 더 적합합니다. 내 대답은 원래 상자 제약 조건에 대한 Glen_b의 의견에서 영감을 얻었으며, 능선 회귀는 기본적으로 상자 제약 조건을 구현하는 가장 쉬운 방법입니다.
Dikran Marsupial 2018

귀하의 의견에 대한 귀하의 인정에 감사하지만, 귀하의 답변 내용에 방해가되지 않습니다. 우리는 가능한 한 어디에서나 업무를 개선하기 위해이 모든 일을 함께하고 있으므로 귀하가 제 제안에 따라 행동 한 것으로 충분히 인정됩니다. 이를 위해 당신 은 평판의 증가 가치가 있습니다. 추가 편집을 위해 이사 한 경우 해당 불필요한 자료를 제거하여 텍스트를 간소화하는 것을 고려하십시오.
whuber

불필요한 자료를 편집했지만 공동 작업을 즐기며 항상 공동 작업자에게 가치있는 크레딧을 제공하려고 노력하지만 여전히 도덕적으로 반 투표를받을 자격이 있다고 생각합니다. ; o)
Dikran Marsupial 2016

10

또 다른 접근법은 베이지안 방법을 사용하여 회귀에 적합하고 이전 분포를 선택하는 것입니다. a

웹과 회귀 분석에 베이지안 방법을 사용하는 소프트웨어에는 많은 예제가 있습니다. 이러한 예제 중 하나를 따르고 이전 예제를 변경할 수 있습니다. a

이 결과는 여전히 관심있는 매개 변수의 신뢰할 수있는 간격을 제공합니다 (물론 이러한 간격의 의미는 기울기에 대한 이전 정보의 합리성에 따라 결정됩니다).


+1, 이것은 나의 첫 생각이기도했다. 나는 다른 제안을 좋아하지만 이것이 나에게 가장 좋은 것 같습니다.
gung-모니 티 복원

0

또 다른 방법은 회귀를 최적화 문제로 재구성하고 최적화 프로그램을 사용하는 것입니다. 그것이 이런 식으로 재구성 될 수 있는지 확실하지 않지만 R 최적화 프로그램에 대한이 블로그 게시물을 읽을 때이 질문에 대해 생각했습니다.

http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.