2017-01-20 1 views
0

을 사용하여 다중 수준 회귀 분석을위한 올바른 방법 10 개국 (레벨 ​​2)의 300 개 기업 (1 단계)에 대한 데이터가 있다고 가정 해 보겠습니다. 레벨 1 변수는 PQ 및 크기입니다. 2 단계 변수는 1 인당 GDP입니다. 나는이 프로그램을 실행할 때lmer [R]

library(lme4) 

set.seed(1) 
PQ <- runif(300,7,21) 
id <- (1:300) 
country <- sample(1:10,300,replace=T) 
size <- sample(1:25000,300,replace=T) 
GDP <- sample(800:40000,10,replace=T) 
Country1 <- 1:10 
L1data <- as.data.frame(cbind(id,country,PQ,size)) 
L2data <- as.data.frame(cbind(Country1,GDP)) 
MLdata <- merge(L1data,L2data, by.x = "country", by.y = "Country1") 
dummymodel <- lmer(PQ ~ size + GDP + (size|country), data = MLdata, REML = F) 

나는 경고 메시지를

경고 메시지를 얻을 : 1 : 일부 예측 변수는 매우 다른 저울 : 2를 스케일링 고려 : checkConv (ATTR (opt에 "derivs"), opt $ par, ctrl = control $ checkConv, 모델이 과 수렴하지 못함 max | grad | = 1.77081 (tol = 0.002, 구성 요소 1) 3 : 에서 checkConv (attr (opt, "derivs"), opt $ par, ctrl = control $ checkConv, :
모델은 거의 식별 할 수 없습니다 : 매우 큰 고유 값 - 변수 크기 재조정? 모델은 거의 식별 할 수 없습니다 : 큰 고유 값 비율 - 변수 크기 재 지정?

내가 추가 경고 메시지가 원본 데이터와 모델을 실행할 때 사실 :

모델은 수렴하지 못했습니다 퇴화 독일인 1 개 음의 고유

내가 추측과 이 문제를 해결하기 위해 독립 변수의 크기를 조정해야합니다. 이와 같이 다단계 회귀 분석에서 올바른 척도는 무엇입니까? 멀티 레벨 모델의 결과가 스케일링에 의존하기 때문에이 질문은 중요합니다. 아니면 내가 찾을 수없는 다른 문제가 있습니까?

+0

모든 변수'as.data.frame (scale (MLdata)) '을 스케일 한 후에 모델이 올바르게 맞춰졌습니다. –

+0

감사합니다. 멀티 레벨에서 이와 같이 데이터를 스케일링하는 것이 이론적으로 유효한가? 각 레벨별로 설명 된 결과와 분산은 스케일링으로 인해 상당한 변화가 있습니다. –

답변

2

tl; dr 모델의 적합성은 거의 같습니다. 크기 조정 된 모델은 약간 더 우수하고 안정적입니다. 고정 된 효과는 거의 동일합니다. 두 모델 모두 단수의 무작위 효과 분산 공분산 행렬을 계산하므로 비교가 훨씬 어려워지고 결과에 차이에 대한 결론을 내릴 때이 모델에 의존해서는 안됩니다.

모델의 의미는 다음과 같습니다. 센터링 및 재조정. 아래에서 설명 하겠지만 고정 효과는 본질적으로 동일합니다. 나는 분산 - 공분산 추정치가 동일하지만 어쨌든 (즉, 양의 - 확률 분산 - 공분산 행렬에 맞는 정보가 충분하지 않다는) 모델이 단수라는 것을 납득시키기가 어렵다는 것을 알고 있습니다.

귀하의 예제를 사용하고 스케일 매개 변수로 다시 실행 :

MLdata <- transform(MLdata, 
    size_cs=scale(size), 
    GDP_cs=scale(GDP)) 
m2 <- lmer(PQ ~ size_cs + GDP_cs + (size_cs|country), data = MLdata, 
        REML = FALSE) 

비교 로그 - 우도 :

logLik(dummymodel) ## -828.4349 
logLik(m2)   ## -828.4067 

이 모델은 꽤 가까운 것을 제안하지만, 축소 모델을 수행하고있다 약간 더 좋습니다 (0.03 대수 우도 단위의 개선은 매우 작음). 이 두 모델에 대한 coef(summary(.)) 보면

fixef(dummymodel) 
## (Intercept)   size   GDP 
## 1.345754e+01 3.706393e-05 -5.464550e-06 
##  fixef(m2) 
## (Intercept)  size_cs  GDP_cs 
## 13.86155940 0.27300688 -0.05914308 

(, 당신은 T- 것을 볼 수 있습니다 :

고정 효과 보기 다른,하지만 나는 그들이 동등 걸 보여 드리겠습니다 sizeGDP에 대한 통계는 거의 동일합니다.)

rescale.coefs <- function(beta,mu,sigma) { 
    beta2 <- beta ## inherit names etc. 
    ## parameters other than intercept: 
    beta2[-1] <- sigma[1]*beta[-1]/sigma[-1] 
    ## intercept: 
    beta2[1] <- sigma[1]*beta[1]+mu[1]-sum(beta2[-1]*mu[-1]) 
    return(beta2) 
}  
cm <- sapply(MLdata[c("size","GDP")],mean) 
csd <- sapply(MLdata[c("size","GDP")],sd) 

rescaled <- rescale.coefs(fixef(m2),mu=c(0,cm),sigma=c(1,csd)) 
all.equal(rescaled,fixef(m2)) 
cbind(fixef(dummymodel),rescaled) 
##        rescaled 
## (Intercept) 1.345754e+01 1.345833e+01 
## size   3.706393e-05 3.713062e-05 
## GDP   -5.464550e-06 -5.435151e-06 

매우 유사한 this question에서

. 분산 - 공분산 행렬에 대해서는

:

VarCorr(dummymodel) 
## Groups Name  Std.Dev. Corr 
## country (Intercept) 2.3420e-01  
##   size  1.5874e-05 -1.000 
## Residual    3.8267e+00 

VarCorr(m2) 
## Groups Name  Std.Dev. Corr 
## country (Intercept) 0.0000e+00  
##   size_cs  4.7463e-08 NaN 
## Residual    3.8283e+00  

어느 분산 공분산 행렬 긍정적 명확한이고; 첫 번째 국가는 국가 간의 기울기 변화와 완벽하게 상관되는 국가 들간의 절편 변화를 가지고 있으며, 두 번째 요소는 국가 간 절편에 대한 제로 분산을 할당한다. 또한 국가 간 편차는 두 경우 모두 잔차 편차에 비해 매우 작습니다. 두 행렬이 모두 양의 값을 가진다면 우리는 하나의 경우에서 다른 경우까지 확장 할 수있는 변형을 찾는 작업을 할 수 있습니다. (각 요소에 (s_i s_j)를 곱하면됩니다. 여기서 s_는 적용되는 배율 인수입니다. 주어진 예측 자). PD가 아니라면 까다로워집니다.

관련 문제