구간 선형 함수에서 데이터의 변경점 찾기


10

인사말,

관측 된 공간의 크기와 빅뱅 이후 경과 한 시간을 확인하는 데 도움이되는 연구를 수행하고 있습니다. 잘하면 당신이 도울 수 있습니다!

두 개의 선형 회귀를 수행하려는 부분 선형 함수를 따르는 데이터가 있습니다. 경사와 절편이 바뀌는 지점이 있으며이 지점을 찾으려면 프로그램을 작성해야합니다.

생각?


3
교차 게시에 대한 정책은 무엇입니까? 정확히 같은 질문이 math.stackexchange.com에 요청되었습니다 : math.stackexchange.com/questions/15214/…
mpiktas

이 경우 간단한 비선형 최소 제곱을 수행하는 데 어떤 문제가 있습니까? 나는 분명한 것을 놓치고 있습니까?
grg s

변경점 매개 변수와 관련하여 목표 함수의 파생어가 다소 부드럽다 고 말하고 싶습니다.
Andre Holzner

비선형 최소 제곱이 간결하고 정확하지 않도록 경사가 너무 많이 변합니다. 우리가 아는 것은 두 개 이상의 선형 모델이 있으므로 두 모델을 추출하기 위해 파업해야한다는 것입니다.
HelloWorld

답변:


1

mcp패키지는이 작업을 수행 할 수 있습니다. 데이터가

먼저 몇 가지 데이터를 시뮬레이션 해 보겠습니다.

df = data.frame(x = 1:100,
                y = c(rnorm(40, 10 + (1:40)*0.5),
                      rnorm(60, 10 + 40*0.5 -8 + (1:60)*0.2)))

이제 다음을 사용하여 변경점을 40 (및 매개 변수 값)으로 복구 할 수 있는지 살펴 보겠습니다 mcp.

model = list(
  y ~ 1 + x,  # linear segment
  ~ 1 + x  # another linear segment
)
library(mcp)
fit = mcp(model, df)

그것을 플로팅하십시오. 회색 선은 피팅에서 무작위로 그려져 추세를 포착 함을 나타냅니다. 파란색 곡선은 예상 변경점 위치입니다.

여기에 이미지 설명을 입력하십시오

개별 모수 추정값을 보자. int_절편, x_x의 기울기 및 cp_변경점입니다.

summary(fit)

Population-level parameters:
    name  mean lower upper Rhat n.eff
    cp_1 40.48 40.02 41.00    1  2888
   int_1 11.12  9.11 13.17    1   778
   int_2 21.72 20.09 23.49    1   717
 sigma_1  3.23  2.76  3.69    1  5343
     x_1  0.46  0.36  0.54    1   724
     x_2  0.21  0.16  0.26    1   754

면책 조항 : 나는 개발자입니다 mcp.


8

R 패키지 strucchange 가 도움이 될 수 있습니다. 비 네트를 보면 비슷한 문제를 해결하는 방법에 대한 훌륭한 개요가 있습니다.


6

포인트 수가 너무 많지 않으면 모든 가능성을 시도 할 수 있습니다. 요점이 있다고 가정 해 봅시다Xi=(xi,yi) 어디 i=1,..,N. 보다, 당신은 루프 할 수 있습니다j ...에서 2N2 두 줄을 둘 다 맞 춥니 다 {X1,...,Xj}{X(j+1),...,XN}. 마지막으로, 당신은 선택j 두 라인에 대한 제곱 잔차의 합의 합계는 최소입니다.


간단하지만 효과적인 제안을 바탕으로 답변을 게시했습니다.
HelloWorld

5

이것은 (오프라인) 변경점 감지 문제입니다. 우리의 이전 논의는 저널 기사 및 R 코드에 대한 참조를 제공합니다. Barry와 Hartigan의 "제품 파티션 모델"은 경사면의 변화를 처리하고 효율적으로 구현하기 때문에 먼저 살펴보십시오 .


3

또한 세그먼트 패키지는 과거에 비슷한 문제를 해결하는 데 도움이되었습니다.


불행히도, 패키지는 중단 점에 대한 시작 값이 필요합니다.
HelloWorld

또한 segmented세그먼트 간의 인터셉트 변경을 모델링 할 수 없으며 첫 번째 세그먼트에 대한 인터셉트 만 가능합니다.
Jonas Lindeløv

2

모든 가능성을 찾는 mbq의 답변을 기반으로했습니다. 또한, 나는 이것을한다 :

  • 계수가 유의한지 확인하기 위해 두 개의 부분 모델의 중요성을 확인하십시오.
  • 전체 모형의 잔차 제곱의 합과의 차이 확인
  • 내 모델을 시각적으로 확인하십시오 (논 센스가 아닌지 확인).

중요성을 확인하는 이유는 무엇입니까? 조각 별 모델 중 하나가 데이터에 매우 적합하지 않으면 최소 SSE가있는 점이 의미가 없기 때문입니다. 이것은 경사가 변하는 명확한 중단 점이없는 상관 관계가 높은 두 변수에 대해 발생할 수 있습니다.

간단한 테스트 사례로이 간단한 접근 방식을 확인하겠습니다.

x <- c(-50:50)
y <- abs(x)
plot(x,y,pch=19)

여기에 이미지 설명을 입력하십시오

중단 점은 분명히 0입니다. 다음 R 스크립트를 사용하십시오.

f <- function(x, y)
{
    d <- data.frame(x=x, y=y)
    d <- d[order(x),]
    r <- data.frame(k=rep(0,length(x)-4), sums=rep(0,length(x)-4))

    plm <- function(i)
    {
        d1 <- head(d,i)
        d2 <- tail(d,-i)

        # Make sure we've divided the region perfectly        
        stopifnot(nrow(d1)+nrow(d2) == nrow(d))

        m1 <- lm(y~x, data=d1)
        m2 <- lm(y~x, data=d2)

        r <- list(m1, m2)
        r
    }

    lapply(2:(nrow(d)-3), function(i)
    {
        r$k[i-2] <<- d[i,]$x

        # Fit two piecewise linear models
        m <- plm(i)

        # Add up the sum of squares for residuals
        r$sums[i-2] <<- sum((m[[1]]$residuals)^2) + sum((m[[2]]$residuals)^2)
    })

    b <- r[which.min(r$sums),]    
    b
}

가능한 모든 조합에 대해 조각 별 선형 모형을 적합합니다.

f(x,y)
   k sums
   0    0

최적의 두 모델에 대한 계수를 확인하면 매우 중요합니다. 그들의 R2도 매우 높습니다.

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