2016-11-09 11 views
2

mgcv 패키지에서 x (나이)과 gamm 인 성별 0-1 변수 간의 상호 작용을 모델링하려고합니다. 각 성별에 대해 매끄러운 용어로 기본 모델 (M0)을 지정하고 나면 성별 간의 차이가 선형 (임의로 매끄럽지 않음)이라는 간단한 가설을 테스트하고 싶습니다. 나는 다음과 같은 두 가지 질문이 있습니다mgcv : GAMM의 평활화 매개 변수 및 모델 중첩의 유효성을 수정합니다.

  1. 모델이 제대로 나는 M0에서 0 성 부드러운위한 스무딩 매개 변수를 얻고, 간단한 모델 사양에서 사용하고 싶은 둥지를 시도. 하지만 다음과 같은 오류 메시지가 얻을 : gamm.setup (GP에서

오류, pterms =의 pTerms, 데이터 = MF를, parametric.only = FALSE = 매듭을 매듭 :

GAMM 수 없어 링크 된 스무딩 매개 변수를 처리 (아마도 'ID'또는 적응 부드럽게의 사용으로)

  • 두 번째 질문은 더 어리석은 일
      가. 나는 부드러운에서 갈 때 모델도 중첩 된 각 성별은 0 성별로 매끄 럽고 1 성별과의 선형차는?

    다음은 예입니다. 임의의 데이터를 시뮬레이션했기 때문에 데이터에 실제 데이터의 동작이 표시되지 않지만 문제는 동일하게 유지됩니다. gamm.setup (GP, pterms에서

    library(mgcv) 
    
    ### Simulate random data 
    x <- rnorm(100, mean = 10, sd = 1.5) 
    y <- rnorm(100, mean = 1, sd = 0.025) 
    
    id <- sample(1:10, size = 100, replace = T) 
    id <- as.factor(id) 
    
    gender <- sample(c(0,1), size = 100, replace = T) 
    
    
    ### Specify main model, M0 
    ctrl <- list(niterEM=0,optimMethod="L-BFGS-B", msMaxIter = 100) 
    M0 <- gamm(y~s(x, by = as.factor(gender)) + gender, 
          random=list(id=~1+x), control=ctrl) 
    
    ### Specify model with linear difference between gender0 and gender1 
    M1 <- gamm(y~s(x) + gender:x + gender, 
          random=list(id=~1+x), control=ctrl) 
    
    ### Testing 
    anova(M0$lme, M1$lme) 
    
    ### Problems: 
    sp0 <- M0$gam$sp[1] 
    M1 <- gamm(y~s(x, sp = sp0) + gender:x + gender, 
          random=list(id=~1+x), control=ctrl) 
    

    오류 =의 pTerms, 데이터 = MF는 parametric.only = FALSE = 매듭, 매듭 :

    GAMM은에서 아마 (매개 변수를 부드럽게 연결 처리 할 수 ​​

    어떤 생각? 미리 감사드립니다 'ID'또는 적응 부드럽게)의 사용.

  • +0

    sp는 gamm에서만 작동하지 않으며 gam에서만 작동합니까? – ErrantBard

    답변

    3

    gamm 오류

    012에 대해서

    이것은 매우 흥미로운 것입니다. 글쎄, 먼저 논리를 설명해야합니다. (당신이 가우시안 데이터를 가지고) gamm 임의 효과로 매끄러운의 위글 구성 요소를 취급하기 때문에

    원칙적 으로는, gamm에서 스무딩 매개 변수를 수정하는 것은 불법이다,의 분산은 lme 추정된다. 평활화 매개 변수를 수정하려고하면 기본적으로 임의 효과의 분산을 수정한다고 말합니다. 음, lme이 작업을 수행 할 수 없으며 이러한 시도가 혼합 모델링에서도 유효한지 의심 스럽습니다.)

    따라서 gamm 포함 평활화 파라미터 가능한 제한을 해제 할 :

    min.sp 통해 평활화 파라미터의 하한
    1. ;
    2. 부드러운 평행 공유 매개 변수는 id을 통해 s();
    3. sp을 통해 s()을 통해 직접 지정된 평활화 매개 변수.

    처음 두 개가 완전히 검사됩니다. gamm에는 gam과 같은 min.sp 인수가 없습니다. ...을 통해 지정하더라도 나중에 사용하게 될 가능성은 없습니다. (NULL은 으로 gamm.setup 동안 전달되므로 지정된 min.sp은 무시됩니다). id의 사양은 이전에 본 오류 메시지에서도 감지되지만 물론 id을 지정하지 않았으므로 위의 오류가 여기에 올바른 문제를보고하지 않으므로 버그가 발생합니다.

    세 번째 것은 실제로 gamm을 통해 직접 확인되지 않았습니다. 이상적으로는 gamm/gam 수식을 해석 한 후 (interpret.gam) 즉시 -1으로 변경해야 -1으로 재설정해야하며 이에 대한 경고 메시지를 발행해야합니다. 그러나이 부분이 없습니다. 따라서 현재로서는 최선의 방법은 sp을 지정하지 않는 것입니다.


    유효한 중첩 모델이 있습니까?

    이제 중첩에 관심을 돌리십시오. 중첩은 평활화 매개 변수를 선택하는 대신 기본 설정과 관련됩니다. 동일한 기준 집합 (동일한 기초 유형, 동일한 수 및/또는 "매듭"의 위치)을 가지고있는 한 모델 행렬은 동일합니다. 예를 들어 모델 M0M1에서 s()의 구성은 mgcv이고 기본값은 bs = 'tp', k = 10입니다. 따라서 s()의 디자인 매트릭스는 두 모델에서 동일합니다. by = factor(gender)s()을 기본 모델 M0의 모든 레벨 gender에 복제합니다. 아마도 쉽게 볼 수 없지만 실제로 M1M0에 중첩되어 있습니다.

    이것을 검증하는 간단한 예를 생각해 봅시다. 단순화를 위해 s(x)mgcv에서 사용하지 않지만 poly(x, degree = 2)을 사용하십시오 (s(x)이라고 상상해주세요). 의 처음 몇 가지 장난감 데이터를 생성하자 : f 이후

    x <- 1:10 
    f <- gl(2, 5, labels = c("M", "F")) 
    

    는, 순서 요소가 아닙니다 s(x, by = factor(f))f의 모든 수준에 대한 s(x)를 복제하여 설계 행렬을 생성

    ## original design matrix for `s(x)` 
    X0 <- poly(x, 2) 
    ## design matrix for `f`, without contrasting 
    Xf <- model.matrix(~ f + 0) 
    ## design matrix for level `M` 
    X1 <- X0 * Xf[, 1] 
    ## design matrix for level `F` 
    X2 <- X0 * Xf[, 2] 
    ## design matrix for `s(x, by = f)` "please, imagine it as `poly`" 
    X <- cbind(X1, X2) 
    
    #    1   2   1   2 
    # [1,] -0.49543369 0.52223297 0.00000000 0.00000000 
    # [2,] -0.38533732 0.17407766 0.00000000 0.00000000 
    # [3,] -0.27524094 -0.08703883 0.00000000 0.00000000 
    # [4,] -0.16514456 -0.26111648 0.00000000 0.00000000 
    # [5,] -0.05504819 -0.34815531 0.00000000 0.00000000 
    # [6,] 0.00000000 0.00000000 0.05504819 -0.34815531 
    # [7,] 0.00000000 0.00000000 0.16514456 -0.26111648 
    # [8,] 0.00000000 0.00000000 0.27524094 -0.08703883 
    # [9,] 0.00000000 0.00000000 0.38533732 0.17407766 
    #[10,] 0.00000000 0.00000000 0.49543369 0.52223297 
    

    두 번째 모델 M1 만있다 부드러운 용어 s(x), 디자인 행렬은 X0입니다.여기

    는 우리가 당신의 M1M0에 중첩되어 있음을 볼 수있는 방법입니다 : 따라서 s(x)s(x, by = f)에 중첩되어,

    1. X1 + X2 = X0, s(x)의 디자인 매트릭스 s(x, by = f)으로 동일한 열 범위를 가지고,
    2. xs(x)에 중첩되어 있으므로 x:fs(x, by = f)에 중첩됩니다. 당신이 모델이 이미 잘 중첩 비록, 당신의 M1와 비교 해석이없는 M0 주요 모델을

      을 어떻게 할 것인지


    . 귀하의 메인 모델 M0은 각 레벨마다 독립적 인 부드러움으로 끝나고, M1은 두 그룹 간의 차이에 초점을 맞 춥니 다.

    M0이 "참조 부드럽고 차이가 부드럽다"라는 형식을 제어 할 수 있다면 좋을 것입니다. 차이가 부드러워지면 실제로는 M1을 맞추지 않고도 그룹간에 비선형 차이가 없다는 것을 알 수 있습니다.

    mgcv에서 요인을 주문한 경우 차이가 원활 해집니다. 그래서 난 당신이에 의해 메인 모델에 맞게 제안 : 추정 결과는 라인 원활 차이 s(x, by = gender1)가 표시되면

    gender1 <- ordered(gender) ## create an ordered factor 
    s(x) + s(x, by = gender1) + gender 
    

    , 당신은 당신이 대신도 F-test를 사용하지 않고 간단한 모델

    s(x) + gender:x + gender 
    

    에 맞게 수있어.

    "차이"를 부드럽게 구성하려면 주문한 계수 by을 갖는 것이 매우 중요합니다. 당신이 경우에

    s(x) + s(x, by = gender) + gender ## note, it is "gender" in "by" 
    

    s(x)s(x, by = gender) 완전히 선형 적으로 의존한다. 결과 모델 행렬은 등급 결함이됩니다.


    일부 후속

    내가 처음 AIC에 의해 s(x, by = as.factor(gender))s(x) + s(x, by = gender)으로 매개 변수화 같은 모델을 비교하여 나의 예에 포함 깜빡

    (gender 0-1 수치 변수로 기억). 이러한 모델은 통계적으로는 동일하지만 경우에 따라 다듬기 매개 변수가 다르게 계산되므로 AIC가 약간 다릅니다.

    아, 네. gender은 이진이므로 by 숫자는 원활한 차이를 만드는 데 좋은 아이디어입니다. 그러나주의해서 이것을하십시오. 숫자 by은 중심이 부드럽지 않습니다. 따라서 s(x) + s(x, by = gender)은 암시 적으로 모델 절편과 혼동 된 절편 열을 갖습니다.s(x) + s(x, by = gender) - 1으로 가야합니다.

    +0

    알았어 - 분명히 나는 ​​그것이 무작위 효과로 취급된다는 사실을 놓쳤다. 나는 그것을 명시 적으로 명시하지 못하게 할 것이다. 고맙습니다. 의견에이 질문을하기로했는데, 예제에서 제시 한 간단한 모델이 복잡한 모델뿐만 아니라 데이터를 설명하는지 어떻게 평가할 수 있습니까? 모델이 중첩되어 있지 않으면 anova 호출의 내 결론은 매우 근사합니다. Mads –

    +0

    필자는 예제에서's (x, by = as.factor (gender))'와's (x) + s (x, by = gender)로 매개 변수화 된 동일한 모델을 비교하는 것을 잊어 버렸다. AIC (리콜 성별은 0-1 숫자 변수). 이러한 모델은 통계적으로는 동일하지만 경우에 따라 다듬기 매개 변수가 다르게 계산되므로 AIC가 약간 다릅니다. 내 데이터를 보니 첫 번째 사례가 나왔습니다. 그러므로 이것을 기본 모델로 삼는 이유. 젠더의 차이가 선형인지 테스트하는 것이 제 관심사이므로 s (x) + s (x, by = gender)를 기본으로 선택 하시겠습니까? –

    +1

    큰 반응을 보내 주셔서 감사합니다. 내 자신도 부드럽게 매개 변수를 수정하려고 시도하지 마십시오. 설명했듯이, 내가 처음 두 데이터를 모델링하는 이유는 AIC의 (아주 작은) 차이 때문이었습니다. 그러나 두 가지 방법으로 매개 변수화 된 'gam'객체를 살펴 보았습니다. '차이점이 매끄러운'접근 방식에서는 실제로 차이가 선형으로 보였습니다. 따라서 테스트에 관심이있는 이유입니다. 좋은 하루 되세요. 고맙습니다. Mads –