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は、因子変数(とないパラメータ)であるので、あなたのモデルは本当に意味がありません。私はあなたが実際にsitealphaを層別化したい疑う:

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はランダム項(αについても同じ)である。そのために、私は逸脱(ゼロからの和)コントラスト[例えば、コントラスト(サイト)= contr.sum(レベル(サイト))]。 scaling_funを使って、nlmeを以下のように実行します: fixed = list(alpha + beta〜site)、random = alpha + beta〜1 | spp。 それから、alpha(Intercept)をα_1、beta(Intercept)をβ_1と解釈します。同意しますか? –

+0

btw、私は実際にサイトごとの偏差の値に興味があるので、固定効果としてコード化しました。 –

+0

固定係数だけでなく、ランダムな効果も抽出できることはご存じですか? – Roland