R 指定不同组中具有相同级别的不同截取之间的相关性

R 指定不同组中具有相同级别的不同截取之间的相关性,r,lme4,random-effects,R,Lme4,Random Effects,假设我有两个因子变量foo和bar,它们都包含相同的级别“a”,“b”,和“c”。有没有办法在lme4(或任何其他包)中指定一个模型,该模型具有foo和bar的随机截获,且截获之间具有相同级别的相关性?换句话说,我认为foo中“a”的效果应该与条中的“a”相关(类似于“b”和“c”)。从形式上看,这可能类似于: 对于[“a”、“b”、“c”]中的每个级别k 下面是一些估算sigma^2_foo和sigma^2_bar的代码: library(lme4) levs <- c("a", "

假设我有两个因子变量
foo
bar
,它们都包含相同的级别
“a”
“b”
,和
“c”
。有没有办法在lme4(或任何其他包)中指定一个模型,该模型具有
foo
bar
的随机截获,且截获之间具有相同级别的相关性?换句话说,我认为
foo
“a”
的效果应该与
条中的
“a”
相关(类似于
“b”
“c”
)。从形式上看,这可能类似于:

对于
[“a”、“b”、“c”]
中的每个级别
k

下面是一些估算
sigma^2_foo
sigma^2_bar
的代码:

library(lme4)

levs <- c("a", "b", "c")
n <- 1000

df <- data.frame(y = rpois(n, 3.14),
                 foo = sample(levs, n, TRUE),
                 bar = sample(levs, n, TRUE))

mod <- glmer(y ~ (1 | foo) + (1 | bar), df, poisson)

> mod
Formula: y ~ (1 | foo) + (1 | bar)
Random effects:
 Groups Name        Std.Dev.
 foo    (Intercept) 0.009668
 bar    (Intercept) 0.006739


你的模型没有固定的效果,这就是为什么你没有得到相关矩阵。根据您的描述,您指的是
foo
bar
在某些级别上的交互。要添加此类交互,需要将
foo:bar
术语作为固定效果添加到模型中,如下所示:

mod <- glmer(y ~ (1 | foo) + (1 | bar) + foo:bar, df, poisson)
summary(mod)
df$foo_bar.inter[df$foo != df$bar] <- NA
你可以试试看,如果需要进一步的帮助,请告诉我


祝你好运。

非常感谢@TeeKea(+1)的回答,但我认为这不是我想要的。我不想添加任何固定的效果-只是一个超参数来关联随机截取与匹配级别。不确定它是否有用,但我添加了一些Stan代码,以展示如何在Stan中对其进行编码。您是否详细了解了
nlme
?我的理解是,你至少可以为线性随机效应模型编码你自己的协方差结构。您可能在可以使用的优化器方面受到限制,也无法使用
nlme
执行二项式glmm之类的操作,但它可能适合您的目的?e、 我对nlme不是很熟悉-我会看一看,谢谢!
Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) [glmerMod]
 Family: poisson  ( log )
Formula: y ~ (1 | foo) + (1 | bar) + foo:bar
   Data: df

     AIC      BIC   logLik deviance df.resid 
  3962.1   4016.1  -1970.1   3940.1      989 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.8572 -0.6665 -0.0947  0.5406  3.8695 

Random effects:
 Groups Name        Variance Std.Dev.
 foo    (Intercept) 0        0       
 bar    (Intercept) 0        0       
Number of obs: 1000, groups:  foo, 3; bar, 3

Fixed effects:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  1.07131    0.05882  18.212   <2e-16 ***
fooa:bara    0.16682    0.07692   2.169   0.0301 *  
foob:bara    0.04549    0.08039   0.566   0.5715    
fooc:bara   -0.08801    0.08464  -1.040   0.2984    
fooa:barb    0.08196    0.08370   0.979   0.3275    
foob:barb    0.05421    0.08006   0.677   0.4983    
fooc:barb    0.08886    0.07712   1.152   0.2492    
fooa:barc   -0.02109    0.07884  -0.268   0.7891    
foob:barc    0.12437    0.07720   1.611   0.1072    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
          (Intr) foo:br fob:br foc:br fo:brb fb:brb fc:brb fo:brc
fooa:bara -0.765                                                 
foob:bara -0.732  0.560                                          
fooc:bara -0.695  0.531  0.509                                   
fooa:barb -0.703  0.537  0.514  0.488                            
foob:barb -0.735  0.562  0.538  0.511  0.516                     
fooc:barb -0.763  0.583  0.558  0.530  0.536  0.560              
fooa:barc -0.746  0.571  0.546  0.519  0.524  0.548  0.569       
foob:barc -0.762  0.583  0.558  0.530  0.535  0.560  0.581  0.569
df <- transform(df,foo_bar.inter=interaction(foo,bar, sep = ":"))
df$foo_bar.inter[df$foo != df$bar] <- NA