GLMM에서 고정 효과 계산 속도를 높이려면 어떻게해야합니까?


9

나는 일반화 선형 혼합 모델 (실제로는 고정 효과에 대한 두 가지 추정치, 하나는 GLMM과 다른 하나는 LMM)의 부트 스트랩 추정을 요구하는 시뮬레이션 연구를 수행하고 있습니다. 연구를 잘 수행하려면 매번 1000 또는 1500 부트 스트랩 복제로 약 1000 개의 시뮬레이션이 필요합니다. 컴퓨터에서 많은 시간이 걸립니다 (수일).

How can I speed up the computation of these fixed effects?

좀 더 구체적으로 말하면, 세 가지 방법으로 반복적으로 측정되는 대상이 있는데, 변수 X, M, Y가 발생합니다. 여기서 X와 M은 연속적이고 Y는 이진입니다. 우리는 두 개의 회귀 방정식이 Y가 위한 기본 잠상 연속 변수 및 오류 IID 아니다. 부트 스트랩하려는 통계는 입니다. 따라서 각 부트 스트랩 복제에는 LMM 및 GLMM을 장착해야합니다. 내 R 코드는 (lme4 사용)

M=α0+α1X+ϵ1
Y=β0+β1X+β2M+ϵ2
Y
α1β2
    stat=function(dat){
        a=fixef(lmer(M~X+(X|person),data=dat))["X"]
        b=fixef(glmer(Y~X+M+(X+M|person),data=dat,family="binomial"))["M"]
        return(a*b)
    }

선형 모델로 대해 동일한 추정치를 얻으 므로 시간이 절약되지만 대해서는 동일한 트릭이 작동하지 않습니다 .α1β2

더 빠른 컴퓨터를 구입해야합니까? :)


1
@BR 병목은 무엇입니까? 기본적으로에 시간이 걸리는 항목입니다 Rprof.
suncoolsu

1
한 가지 방법은 GLMM의 "혼합 된"부분을 무시하는 것입니다. 그냥 평범한 GLM에 맞게, 추정은 많이 변경되지 않습니다, 그러나 그들의 표준 오차는 아마 것이다
probabilityislogic

@probabilityislogic. 귀하의 의견 이외에도 답변이 크게 달라질 지 여부는 그룹 규모와 그룹의 개별 행동에 달려 있습니다. Gelman과 Hill이 말한 것처럼 혼합 효과 모델 결과는 풀링과 풀링 사이에 있습니다. (이것은 베이지안 계층 모델을위한 것이지만 혼합 모델은 고전적인 방법입니다.)
suncoolsu

@probabilityislogic : LMM에는 효과가 있지만 GLMM에는 실패하는 것 같습니다 (즉, 동일한 데이터에서 추가 M이 있거나없는 모델을 실행하고 결과가 크게 다릅니다). 물론, 글머 구현에 오류가없는 한.
BR

@suncoolsu : 병목 현상은 GLMM의 추정치이며 몇 초 (특히 몇 가지 임의의 효과가있는 경우) 일 수 있습니다. 그러나 1000 * 1000 번, 그리고 280 시간의 계산입니다. GLM을 장착하는 데 약 1/100 시간이 걸립니다.
BR

답변:


4

시작 값을 지정하는 데 도움이되지만 금액을 아는 것은 어렵습니다. 시뮬레이션 및 부트 스트랩을 수행 할 때 'true'값 또는 부트 스트랩되지 않은 추정치 또는 둘 다를 알아야합니다. 의 start =옵션을 사용하십시오 glmer.

수렴 선언에 대한 공차가 필요한 것보다 더 엄격한 지 여부를 고려할 수도 있습니다. lme4그래도 문서 에서 변경하는 방법을 모르겠습니다 .


4

새 컴퓨터를 구입하기 전에 고려해야 할 다른 두 가지 가능성도 있습니다.

  1. 병렬 컴퓨팅-부트 스트랩은 병렬로 쉽게 실행할 수 있습니다. 컴퓨터가 합리적으로 새로운 컴퓨터라면 아마도 4 개의 코어가있을 것입니다. R 의 멀티 코어 라이브러리를 살펴보십시오 .
  2. 클라우드 컴퓨팅도 가능성이 있고 합리적입니다. R 스크립트를 실행하기 위해 Amazon 클라우드를 사용한 동료가 있습니다. 그들은 그것이 매우 비용 효과적이라는 것을 알았습니다.

1
답변 해주셔서 감사합니다. 어쨌든, 나는 두 개의 코어가 있다는 사실을 간과했습니다 (컴퓨터는 그리 새로운 것이 아닙니다). 오래 전에 멀티 코어를 보았어야 했어요.
BR

2

더 빠른 컴퓨터 일 수 있습니다. 그러나 여기에 작동 할 수있는 트릭이 있습니다.

의 시뮬레이션을 생성 하지만 조건부 만 생성 한 다음 시뮬레이션 된 값 에 대해 OLS 또는 LMM을 수행하십시오 .YYY

링크 함수가 가정하십시오 . 이것은 확률 에서 값으로 얻는 방법을 말하며 , 로지스틱 함수 일 가능성이 높습니다 .g(.)Y=1Yg(z)=log(z1z)

따라서 대한 bernouli 샘플링 분포를 가정 하고 확률에 앞서 jeffreys를 사용하면 . 이것을 시뮬레이션하는 것은 조명과 같아야하며 그렇지 않은 경우 더 빠른 컴퓨터가 필요합니다. 또한 샘플은 독립적이므로 MCMC에서와 같이 "수렴"진단을 확인할 필요가 없으며 샘플이 필요하지 않을 수도 있습니다. 100은 귀하의 경우에 적합 할 수도 있습니다. 이항 있는 경우, 위 후부 의 을 각 에 대한 이항 시행 횟수 인 바꾸십시오 .YYBernoulli(p)pBeta(Yobs+12,1Yobs+12)Ys1niYi

따라서 시뮬레이션 된 값 집합 있습니다. 그런 다음 링크 함수를 이러한 각 값에 적용하여 을 얻습니다 . LMM을 에 맞추면 GLMM 프로그램보다 빠릅니다. 기본 이진 값을 무시하고 (삭제하지 마십시오!) "시뮬레이션 행렬"( , 여기서 은 샘플 크기이고 는 시뮬레이션 수)을 사용하여 작업 할 수 있습니다.psimYsim=g(psim)YsimN×SNS

그래서 프로그램에서, 나는 대체 할 과 기능을 기능, 단일 simultation으로, 그런 다음 적용 루프의 일종 만들 것 각 시뮬레이션 기능을하고 소요 의 추정치로서의 평균 . 같은 gmler()lmer()Ylmer()b

a=
b=0
do s=1,,S
best=lmer(Ys)
b=b+1s(bestb)
end
return(ab)

조금 더 명확한 설명이 필요하면 알려주세요


답변 주셔서 감사합니다, 그것을 소화하는 데 조금 걸릴 것입니다 (그리고 나는 이미 토요일 밤에 대한 계획이 있습니다). GLMM 접근 방식과 동일한 대답을 제공하는 경우 명확하지 않을 정도로 충분히 다르지만 더 생각해야합니다.
BR
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.