에서 매우 간단한 선형 회귀를 수행하고 싶습니다 R
. 공식은 만큼 간단 합니다. 그러나 기울기 ( a )가 1.4와 1.6 사이의 간격 안에 있기를 원합니다 .
이것을 어떻게 할 수 있습니까?
에서 매우 간단한 선형 회귀를 수행하고 싶습니다 R
. 공식은 만큼 간단 합니다. 그러나 기울기 ( a )가 1.4와 1.6 사이의 간격 안에 있기를 원합니다 .
이것을 어떻게 할 수 있습니까?
답변:
R에서 선형 회귀를 수행하고 싶습니다. ... 경사가 1.4와 1.6 사이의 간격 내에 있기를 원합니다. 이것을 어떻게 할 수 있습니까?
(i) 간단한 방법 :
회귀에 적합합니다. 그것이 범위 안에 있다면 끝났습니다.
경계에 속하지 않으면 경사를 가장 가까운 경계로 설정하고
모든 관측치에 대한 평균 절편을 추정합니다 .
(ii) 더 복잡한 방법 : 경사면에 상자 구속 조건이있는 최소 제곱을 수행하십시오. 많은 최적화 루틴은 상자 제약을 구현합니다 nlminb
( 예 : R과 함께).
편집 : 실제로 (아래 예에서 언급했듯이) 바닐라 R에서 nls
상자 제약 조건을 수행 할 수 있습니다. 예제에서 볼 수 있듯이, 실제로 매우 쉽습니다.
제한된 회귀를보다 직접적으로 사용할 수 있습니다. pcls
"mgcv"패키지의 nnls
기능 과 "nnls"패키지 의 기능 이 모두 작동 한다고 생각합니다 .
-
후속 질문에 답변하도록 수정-
nlminb
R과 함께 nls
제공된 이후 로 사용하는 방법을 보여 주려고 하지만 이미 제한된 루틴을 구현하기 위해 동일한 루틴 (PORT 루틴)을 사용 한다는 것을 깨달았습니다 . 그래서 아래 예제는 그 경우를 수행합니다.
NB : 아래 예에서 는 절편이고 b 는 기울기입니다 (통계에서 더 일반적인 규칙). 나는 당신이 다른 방향으로 시작했다는 것을 여기에 넣은 후에 깨달았습니다. 그래도 귀하의 질문과 관련하여 '뒤로'예를 남겨 두겠습니다.
먼저, 범위 내에 '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- 값도 생성되지만 이것이 얼마나 의미 있고 해석 가능한지 잘 모르겠습니다.
b=1.4
c(a=mean(y-x*b),b=b)
a b
9.019376 1.400000
같은 추정치입니다 ...
아래 그림에서 파란색 선은 최소 제곱이고 빨간색 선은 제한된 최소 제곱입니다.
nls
.
상자 제약 조건으로 최소 제곱을 사용하는 Glen_b의 두 번째 방법은 능선 회귀를 통해보다 쉽게 구현할 수 있습니다. 능선 회귀에 대한 해는 가중치 벡터의 규범의 크기 (따라서 그 경사)에 대한 경계를 갖는 회귀에 대한 라그랑지안으로 볼 수 있습니다. 따라서 아래의 whuber의 제안에 따라 (1.6 + 1.4) / 2 = 1.5의 추세를 뺀 다음 릿지 회귀를 적용하고 기울기의 크기가 0.1 이하가 될 때까지 릿지 매개 변수를 점차적으로 늘리는 것이 접근법입니다.
이 접근 방식의 장점은 R (및 다른 많은 패키지)에서 이미 사용할 수있는 능선 회귀 분석과 같은 고급 최적화 도구가 필요하지 않다는 것입니다.
그러나 Glen_b의 간단한 해결책 (i)은 나에게 합리적인 것처럼 보입니다 (+1)
또 다른 접근법은 베이지안 방법을 사용하여 회귀에 적합하고 이전 분포를 선택하는 것입니다.
웹과 회귀 분석에 베이지안 방법을 사용하는 소프트웨어에는 많은 예제가 있습니다. 이러한 예제 중 하나를 따르고 이전 예제를 변경할 수 있습니다.
이 결과는 여전히 관심있는 매개 변수의 신뢰할 수있는 간격을 제공합니다 (물론 이러한 간격의 의미는 기울기에 대한 이전 정보의 합리성에 따라 결정됩니다).
또 다른 방법은 회귀를 최적화 문제로 재구성하고 최적화 프로그램을 사용하는 것입니다. 그것이 이런 식으로 재구성 될 수 있는지 확실하지 않지만 R 최적화 프로그램에 대한이 블로그 게시물을 읽을 때이 질문에 대해 생각했습니다.
http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html