2016-07-25 5 views
0

일부 신진 대사 모델에 지수 기수를 매개 변수화하려고합니다. 이미 문제없이 lmer에서이 작업을 수행했으며, 기록 된 종속 변수와 독립 변수를 사용했습니다. 그러나 이제는 반드시 종속 변수와 기하 급수적으로 관련이없는 다른 매개 변수를 통합하려고합니다. 따라서 nlme (lme4 :: nlmer는 고정 효과를 처리하지 못하는 것)로 바뀌었지만 많은 경험이 없습니다. 초보자 실수에 대해 미리 사과드립니다.nlme의 요인 : 백 솔류 오차의 특이점

아래 코드를 사용하면 다음 오류가 발생합니다. 내가 '사이트'를 포함하지 않는 단순한 기능에 맞게 할 때, 모델이 제대로 작동하는 것 같다

Error in nlme.formula(dep ~ scaling_fun(alpha, beta, ind, site), data = scale_df, : 
    Singularity in backsolve at level 0, block 1 

: 나는 그것이 '사이트'요인이 misspecified되고 함께 할 수있는 뭔가가 같은데요.

의견을 보내 주시면 대단히 감사하겠습니다.

감사합니다, 앨리

# dput for data 
# copy from http://pastebin.com/WNHhi2kZ (too large to include here) 

> head(scale_df) 
      dep  ind spp site 
2 0.28069471 -0.0322841 157 A 
3 -0.69719050 -1.2568901 183 A 
4 0.29252012 0.1592420 246 A 
5 0.72030740 -0.3282789 154 A 
6 -0.08601891 0.3623756 110 A 
7 0.30793594 0.2230840 154 A 


scaling_fun <- function(alpha, beta, ind, site) { 
    return(beta + ind^alpha + site*(ind^alpha)) 
} 

# results in singularity in backsolve error 

nlme(dep ~ trait_scaling_fun(alpha, beta, ind, site), 
    data = scale_df, 
    fixed = list(alpha + beta + site ~ 1), random = alpha ~ 1|spp, 
    start = list(fixed = c(0.7, 0, 1))) 


############################## 
# simpler function converges # 
############################## 

scaling_fun <- function(alpha, beta, ind) { 
    return(beta + ind^alpha) 
} 

nlme(dep ~ scaling_fun(alpha, beta, ind), 
    data = scale_df, 
    fixed = list(alpha + beta ~ 1), random = alpha ~ 1|spp, 
    start = list(fixed = c(0.7, 0))) 

답변

0

site는 요인 변수 (그리고 매개 변수)이기 때문에 모델이 정말 이해가되지 않습니다. 나는 당신이 실제로 site에 의해 alpha을 계층화 할 생각 :

library(nlme) 

scaling_fun <- function(alpha, beta, ind) { 
    return(beta + ind^alpha) 
} 

nlme(dep ~ scaling_fun(alpha, beta, ind), 
    data = scale_df, 
    fixed = list(alpha ~ site, beta ~ 1), random = alpha ~ 1|spp, 
    start = list(fixed = c(0.487, rep(0, 19), -0.3))) 
#Nonlinear mixed-effects model fit by maximum likelihood 
# Model: dep ~ scaling_fun(alpha, beta, ind) 
# Data: scale_df 
# Log-likelihood: -716.4634 
# Fixed: list(alpha ~ site, beta ~ 1) 
#alpha.(Intercept)  alpha.siteB  alpha.siteC  alpha.siteD  alpha.siteE 
#  0.57671912  -0.61258632  -0.59244337  -0.25793558  -0.24572998 
#  alpha.siteF  alpha.siteG  alpha.siteH  alpha.siteI  alpha.siteJ 
#  -0.23615274  -0.31015393  0.17970575  0.01286117  -0.12539377 
#  alpha.siteK  alpha.siteL  alpha.siteM  alpha.siteN  alpha.siteO 
#  3.72445972  -0.08560994  0.13636185  0.31877456  -0.25952204 
#  alpha.siteQ  alpha.siteR  alpha.siteS  alpha.siteT  alpha.siteU 
#  0.15663989  0.66511079  0.10785082  -0.21547379  -0.23656126 
#    beta 
#  -0.30280707 
# 
#Random effects: 
# Formula: alpha ~ 1 | spp 
#  alpha.(Intercept) Residual 
#StdDev:   0.6426563 0.4345844 
# 
#Number of Observations: 1031 
#Number of Groups: 279 

그러나 나는 또한 site가 임의의 효과를해야한다고 생각한다.

+0

감사합니다. Roland -이 점이 좋습니다. 나는 다음과 같은 수학 공식에 관심이 있습니다 : D = (β_1 + β_site + α_spp), 여기서 β_1은 거친 평균 β 항이고 β_site는 사이트 별 편차입니다 β_spp는 임의의 용어입니다 (α에 대해서도 마찬가지 임). 이를 위해, 나는 일탈 (합계 0) 대조를 가진 사이트를 코드화한다. 대조 (사이트) = contr.sum (수준 (사이트))]. scaling_fun을 사용하여 다음과 같이 nlme을 실행합니다. fixed = list (alpha + beta ~ site), random = alpha + beta ~ 1 | spp. 그런 다음 alpha. (가로 채기)를 α_1로, 베타. (가로 채기)를 β_1로 해석합니다. 동의하니? –

+0

btw, 실제로 사이트 별 편차 값에 관심이 있습니다. 따라서 고정 효과로 코딩했습니다. –

+0

고정 계수뿐만 아니라 무작위 효과도 추출 할 수 있다는 것을 알고 계십니까? – Roland