R에서 임의의 효과를 갖는 깨진 스틱 / 조각 별 선형 모델에서 중단 점 추정 [코드 및 출력 포함]


14

다른 랜덤 효과를 추정해야 할 때 R이 고정 선형 또는 랜덤 매개 변수로 조각 선형 모델에서 중단 점을 추정하는 방법을 알려주십시오.

아래에 임의의 기울기 분산과 4의 중단 점에 대한 임의의 y 절편 분산과 하키 스틱 / 깨진 스틱 회귀에 맞는 장난감 예제가 포함되어 있습니다. 브레이크 포인트를 지정하는 대신 추정하고 싶습니다. 임의 효과 (권장) 또는 고정 효과 일 수 있습니다.

library(lme4)
str(sleepstudy)

#Basis functions
bp = 4
b1 <- function(x, bp) ifelse(x < bp, bp - x, 0)
b2 <- function(x, bp) ifelse(x < bp, 0, x - bp)

#Mixed effects model with break point = 4
(mod <- lmer(Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject), data = sleepstudy))

#Plot with break point = 4
xyplot(
        Reaction ~ Days | Subject, sleepstudy, aspect = "xy",
        layout = c(6,3), type = c("g", "p", "r"),
        xlab = "Days of sleep deprivation",
        ylab = "Average reaction time (ms)",
        panel = function(x,y) {
        panel.points(x,y)
        panel.lmline(x,y)
        pred <- predict(lm(y ~ b1(x, bp) + b2(x, bp)), newdata = data.frame(x = 0:9))
            panel.lines(0:9, pred, lwd=1, lty=2, col="red")
        }
    )

산출:

Linear mixed model fit by REML 
Formula: Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject) 
   Data: sleepstudy 
  AIC  BIC logLik deviance REMLdev
 1751 1783 -865.6     1744    1731
Random effects:
 Groups   Name         Variance Std.Dev. Corr          
 Subject  (Intercept)  1709.489 41.3460                
          b1(Days, bp)   90.238  9.4994  -0.797        
          b2(Days, bp)   59.348  7.7038   0.118 -0.008 
 Residual               563.030 23.7283                
Number of obs: 180, groups: Subject, 18

Fixed effects:
             Estimate Std. Error t value
(Intercept)   289.725     10.350  27.994
b1(Days, bp)   -8.781      2.721  -3.227
b2(Days, bp)   11.710      2.184   5.362

Correlation of Fixed Effects:
            (Intr) b1(D,b
b1(Days,bp) -0.761       
b2(Days,bp) -0.054  0.181

각 개인에 맞는 부러진 스틱 회귀


1
bp를 임의의 효과로 만드는 방법은 무엇입니까?
djhocking 2019

답변:


20

또 다른 방법은 매개 변수로 중단 점을 전달하는 함수에서 lmer에 대한 호출을 래핑 한 다음 최적화를 사용하여 중단 점에 조건부로 적합 모델의 이탈을 최소화하는 것입니다. 이는 중단 점에 대한 프로파일 로그 가능성 을 최대화 하며, 일반적으로 랩퍼 내부의 함수 내부 (이 경우에는 lm)가 전달 된 매개 변수에 따라 조건에 따라 최대 가능성 추정치를 찾으면 전체적으로 (이 문제 만이 아니라) 프로시 저는 모든 모수에 대한 최대 결합 가능성 추정치를 찾습니다.

library(lme4)
str(sleepstudy)

#Basis functions
bp = 4
b1 <- function(x, bp) ifelse(x < bp, bp - x, 0)
b2 <- function(x, bp) ifelse(x < bp, 0, x - bp)

#Wrapper for Mixed effects model with variable break point
foo <- function(bp)
{
  mod <- lmer(Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject), data = sleepstudy)
  deviance(mod)
}

search.range <- c(min(sleepstudy$Days)+0.5,max(sleepstudy$Days)-0.5)
foo.opt <- optimize(foo, interval = search.range)
bp <- foo.opt$minimum
bp
[1] 6.071932
mod <- lmer(Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject), data = sleepstudy)

중단 점에 대한 신뢰 구간을 얻으려면 프로파일 우도를 사용할 수 있습니다 . 예를 들어, qchisq(0.95,1)최소 편차에 (95 % 신뢰 구간) 추가 한 다음 foo(x)계산 된 값과 동일한 포인트를 검색 하십시오.

foo.root <- function(bp, tgt)
{
  foo(bp) - tgt
}
tgt <- foo.opt$objective + qchisq(0.95,1)
lb95 <- uniroot(foo.root, lower=search.range[1], upper=bp, tgt=tgt)
ub95 <- uniroot(foo.root, lower=bp, upper=search.range[2], tgt=tgt)
lb95$root
[1] 5.754051
ub95$root
[1] 6.923529

이 장난감 문제에 대해 다소 비대칭이지만 나쁜 정밀도는 아닙니다. 부트 스트랩을 안정적으로 만들 수있는 충분한 데이터가있는 경우 추정 절차를 부트 스트랩 할 수도 있습니다.


감사합니다. 매우 도움이되었습니다. 이 기술을 2 단계 추정 절차라고합니까, 아니면 참조 / 조회 할 수있는 표준 이름이 있습니까?
잠금 해제

최대 가능성이거나 lmer이 가능성을 최대화 한 경우입니다 (기본값은 실제로 REML이라고 생각합니다 .ML 추정값을 얻으려면 매개 변수 REML = FALSE를 lmer에 전달해야합니다). 한 번에 모든 것이 아니라 중첩 된 방식으로 추정됩니다. 답변 앞에 설명을 추가했습니다.
jbowman

실제 데이터로 프로파일 가능성을 반전시킬 때 최적화 문제와 넓은 CI가 있었지만 구현시 부트 스트랩 CI가 좁아졌습니다. 피험자의 데이터 벡터를 대체하여 샘플링하여 비모수 적 부트 스트랩을 구상 했습니까? 즉, 수면 연구 데이터의 경우, 이는 대상의 데이터 벡터 내에서 리샘플링을 수행하지 않고 10 개의 데이터 포인트의 18 개 (피험자) 벡터를 대체하여 샘플링을 수반합니다.
잠금 해제 dec

예, 설명 할 때 비모수 적 부트 스트랩을 구상했지만 부분적으로는 적용 가능한 (또는 적용 할 수없는) 고급 부트 스트랩 기술에 대해 잘 모르기 때문입니다. 프로파일 우도 기반 CI 및 부트 스트랩은 모두 점진적으로 정확하지만 부트 스트랩이 샘플에 대해 훨씬 더 나을 수도 있습니다.
jbowman

5

jbowman이 제안한 솔루션은 매우 훌륭하며 몇 가지 이론적 언급 만 추가하면됩니다.

  • 사용 된 표시기 기능의 불연속성을 고려할 때 여러 지역 최소값으로 인해 프로파일 가능성이 매우 불규칙 할 수 있으므로 일반적인 옵티마이 저가 작동하지 않을 수 있습니다. 이러한 "임계 값 모델"에 대한 일반적인 해결책은 가능한 번거로운 그리드 검색을 사용하여 가능한 각 실현 중단 점 / 임계 값 일 (코드에서 수행 한 값 사이가 아님)의 편차를 평가하는 것입니다. 하단의 코드를 참조하십시오.

  • 중단 점이 추정되는이 비표준 모델에서 이탈은 일반적으로 표준 분포를 갖지 않습니다. 보다 복잡한 절차가 일반적으로 사용됩니다. 아래 Hansen (2000)에 대한 참조를 참조하십시오.

  • 부트 스트랩은 이와 관련하여 항상 일관성이있는 것은 아닙니다. 아래의 Yu (앞에 나오는)를 참조하십시오.

  • 마지막으로 왜 당신이 Days를 중심으로하여 데이터를 변환하고 있는지 명확하지 않습니다 (즉, x 대신 bp-x). 두 가지 문제가 있습니다.

    1. 이 절차를 사용하면 6.1 일, 4.1 등의 인공 날짜를 만들 수 있습니다. 예를 들어 6 일과 7 일의 값만 관찰했기 때문에 6.07의 결과를 해석하는 방법을 잘 모르겠습니다. (표준 중단 점 모델에서 6과 7 사이의 임계 값은 동일한 계수 / 편차를 제공해야합니다)
    2. b1과 b2는 b2 일 동안 감소하고 b2에서는 증가하기 때문에 반대 의미를 갖는가? 따라서 중단 점이없는 비공식 테스트는 b1! =-b2입니다.

이에 대한 표준 참조는 다음과 같습니다.

  • 표준 OLS : Hansen (2000) 샘플 분할 및 임계 값 추정, Econometrica, Vol. 68, No. 3. (2000 년 5 월), 575-603 쪽.
  • 보다 이색적인 모형 : 이서 신 (2011) 회귀 모형의 역치 효과 검정, 미국 통계 협회 저널 (이론 및 방법) (2011), 106, 220-231
  • Ping Yu (앞으로) 임계 값 회귀의 부트 스트랩 ", 계량 이론.

암호:

# Using grid search over existing values:
search.grid <- sort(unique(subset(sleepstudy, Days > search.range[1] &
Days<search.range[2], "Days", drop=TRUE)))

res <- unlist(lapply(as.list(search.grid), foo))

plot(search.grid, res, type="l")
bp_grid <- search.grid[which.min(res)]

0

MARS 모델을 사용해 볼 수 있습니다. 그러나 임의 효과를 지정하는 방법을 잘 모르겠습니다. earth(Reaction~Days+Subject, sleepstudy)


1
감사합니다-패키지 설명서를 살펴 보았지만 임의의 효과를 지원하지 않는 것 같습니다.
잠금 해제

0

논문은 혼합 효과 MARS를 제안하는 논문입니다. @lockedoff가 언급했듯이 어떤 패키지에서도 동일한 구현이 보이지 않습니다.

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