我是学习 GLMM 和 R 的初学者,如果我没有意义或提出一些非常基本的问题,请原谅我。
我试图在我的 GLMM 模型中指定一个嵌套的固定因子,但我似乎没有找到方法。如果有人能回答这个问题,我将不胜感激。
我的实验由四种不同的物种(A、B、C、D)组成,并且我使用了这四种物种的所有可能组合作为不同的处理方法(组成Compo
,每个Compo
n = 4 ExpRun
)。Compo
因此嵌套在 内SPrich
,因为Compo
仅包含物种 A 只能在SPrich
1 之下,而不能在其他之下。因此,我的数据在 factor 下不平衡SPrich
。例如:
SPrich Compo(abbr.)
0 Control
1 A
1 B
1 C
1 D
2 AB
2 AC
2 AD
2 BC
2 BD
2 CD
3 ABC
...
4 ABCD
我很想知道物种丰富度SPrich
(5 个级别)和组成Compo
(16 个级别)是否对响应变量有影响,我在每个实验池中WaterChlA
测量的结果都不同。不是正态分布,而是更接近于对数正态分布,因此使用高斯链接对数。每个样本都是在 之间抽取的,因此它们不是独立的。我已经进行了 3 次实验,用 factor 表示。在所有三个中都以不同的方式表示,因此是嵌套的随机因子。Day
TankNo
WaterChlA
TankNo
Day
ExpRun
TankNo
ExpRun
这是我要演示的数据的一部分:
> str(Wetland)
'data.frame': 480 obs. of 31 variables:
$ TankNo : Factor w/ 150 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
$ ExpRun : Factor w/ 3 levels "1","2","3": 2 2 2 2 2 2 2 2 2 2 ...
$ Day : Factor w/ 4 levels "1","8","15","22": 1 1 1 1 1 1 1 1 1 1 ...
$ SPrich : Ord.factor w/ 5 levels "0"<"1"<"2"<"3"<..: 1 1 1 1 2 2 2 2 2 2 ...
$ FxRich : Ord.factor w/ 3 levels "0"<"1"<"2": 1 1 1 1 2 2 2 2 2 2 ...
$ Compo : Factor w/ 16 levels "1","2","3","4",..: 1 1 1 1 2 2 2 2 3 3 ...
$ MIFI : Factor w/ 2 levels "0","1": 1 1 1 1 2 2 2 2 1 1 ...
$ KAPU : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 2 2 ...
$ DUME : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ POME : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ WaterChlA : num 8.33 1.99 35.56 17.49 22.04 ...
问题来了,因为我的固定因子Compo
应该嵌套在SPrich
其中,但似乎在 glmm 中嵌套随机因子更常见,而且我还没有遇到过如何嵌套固定因子。我在 Bolker 教授的 Github 帖子中读到,A/B
在 R 中指定实际上等于1 + A + A:B
,但我想知道这样写是否足以指定和之间的嵌套SPrich
(Compo
如下所示)?如果不是,那么指定嵌套的正确方法应该是什么Compo
SPrich
?
我将以下内容输入到模型中以glmer
使用 package运行lme4
:
glmm1 <- glmer(WaterChlA ~ ExpRun + Day + SPrich/Compo + ExpRun*Day + ExpRun*SPrich +
ExpRun*SPrich/Compo + Day*SPrich + Day*SPrich/Compo + (1|ExpRun/TankNo), data = Wetland,
family = gaussian(link = "log"), na.action = na.exclude)
它说:
fixed-effect model matrix is rank deficient so dropping 404 columns / coefficients
这是可以理解的,因为我的固定因子不是满秩而是嵌套的,所以如果它必须删除不存在的系数组合,我不会太惊讶。但是,它有点表明上面指定的模型并没有真正考虑到嵌套性(?)。它也未能收敛:
Warning messages:
1: In (function (fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf, :
failure to converge in 10000 evaluations
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model failed to converge with max|grad| = 0.112084 (tol = 0.001, component 1)
我想知道我指定嵌套的方式Compo
是否SPrich
正确。我也想知道 GLMM 是否是分析这类数据最合适的方法,或者有没有其他更合适的工具,也许 GLM 足以分析我的数据?我选择 GLMM 是因为不同坦克之间存在相当大的差异,因此掩盖了感兴趣因素的影响,将TankNo
其视为随机因素应该有助于降低影响。
除了SPrich
,我也有兴趣看看功能丰富度FxRich
如何影响响应,但Compo
嵌套在内部FxRich
不同于内部SPrich
(比如Compo
A & B 是相同的功能组,C & D 是另一个,那么Compo
AB 将是SPrich
2 和FxRich
1,而Compo
AC 将是SPrich
2 和FxRich
2,因此嵌套非常不同且复杂),我认为稍后在另一个不包含SPrich
or的模型中解决这个问题更明智Compo
。我想知道这是否合理?也许这应该进入另一个问题线程并稍后讨论......
谢谢大家的关注!真的很感谢上面的任何想法!