R'de lmer ile özel kontrastlar nasıl ayarlanır


9

Koşul ( cond) bazı sonuç üzerindeki etkisini kontrol etmek için R içinde lmer kullanıyorum . İşte bazı oluşur ler konu tanıtıcı verileri ve vardır a, bve ckoşullardır.

library("tidyr")
library("dplyr")
set.seed(123)
temp <- data.frame(s = paste0("S", 1:30), 
                   a = rnorm(30, -2, 1), 
                   b = rnorm(30, -3, 1), 
                   c = rnorm(30, -4, 1)) 

Karşılaştırmak istiyorum

  1. seviye adüzeylerinin ortalama etmek bve cve
  2. seviyeden bseviyeye c.

Benim sorum, bunu yapmak için karşıtlıkları, kesişim üç koşulun ortalamasını yansıtacak ve hesaplanan iki tahmin 1 ve 2'de tanımlanan farkları doğrudan yansıtacak şekilde nasıl ayarlayabilirim?

İle denedim

c1 <- cbind(c(-0.5, 0.25, 0.25), c(0, -0.5, 0.5))
gather(temp, cond, result, a, b, c) %>%
  lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c1))

nerede cond2gibi görünüyor, ama cond1değil.

Aşağıdaki Bu özel kontrastlar nasıl yorumlanır? , Bunun yerine genelleştirilmiş tersi kullanmayı denedim, ancak bu tahminler de mantıklı değil.

c2 <- t(ginv(c1))
gather(temp, cond, result, a, b, c) %>%
  lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c2))

Ben de Helmert kontrastlarını denedim, ama araçlar hala uyuşmuyor.

gather(temp, cond, result, a, b, c) %>%
  mutate(cond = factor(cond, levels = c("c", "b", "a"))) %>%
  lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = contr.helmert))

Bunu yapmanın doğru yolu nedir?


Bu bir Helmert kontrastı gibi görünür (c ilk düzeydir, sonra b, sonra a).
Michael M

Ben de Helmert'i denedim, ama rakamlar aradığım araç değil. Soruyu Helmert kontrastlarını içerecek şekilde düzenledim, teşekkürler.
M4RT1NK4

Yanıtlar:


13

Aşağıdaki adımlar için, veri formatının uzun formatta olması gerekir. Veri çerçevesi datbağımlı değişkeni içeren result, kategorik belirleyicisi cond(düzeyleri: a, bve c) ve rasgele bir faktör s.

library(tidyr)
dat <- gather(temp, cond, result, a, b, c)

Aşağıda, karşılaştırmak istediğiniz koşullara karşılık gelen bir kontrast matrisi oluşturmak için iki yaklaşımı göstereceğim:

  1. bir-b+c2
  2. b-c

Özel kontrastlar

Matris matseviye farklılıklarına karşılık gelir.

mat <- rbind(c(1, -0.5, -0.5),     # a vs. (b + c) / 2
             c(0, 1, -1))          # b vs. c

Gerçek kontrast matrisini oluşturmak için genelleştirilmiş tersi ginv(ile MASS) hesaplıyoruz .

library(MASS)
cMat <- ginv(mat)
#            [,1]          [,2]
# [1,]  0.6666667 -7.130169e-17
# [2,] -0.3333333  5.000000e-01
# [3,] -0.3333333 -5.000000e-01

Bu kontrast matris cMatkullanılabilir lmer.

library(lme4)
res <- lmer(result ~ cond + (1|s), data = dat, 
            contrasts = list(cond = cMat))
coef(summary(res))    
#              Estimate Std. Error    t value
# (Intercept) -2.948115  0.0946025 -31.163182
# cond1        1.351517  0.2006822   6.734612
# cond2        1.153918  0.2317279   4.979625

Gördüğünüz gibi, sabit etki tahminleri yukarıda belirtilen farklılıklara karşılık gelmektedir. Ayrıca, kesme noktası genel ortalamayı temsil eder.

Helmert kontrastı contr.helmert

contr.helmertKontrast matrisini oluşturmak için yerleşik işlevi de kullanabilirsiniz .

cHelmert <- contr.helmert(3)
#   [,1] [,2]
# 1   -1   -1
# 2    1   -1
# 3    0    2

Ancak sipariş, soruda belirttiğiniz siparişe karşılık gelmiyor. Bu nedenle, sütunların ve satırların sırasını tersine çevirmeliyiz. İlk sütun karşılık bvs ave ikinci bir karşılık cortalama genel bve a.

cHelmert2 <- cHelmert[c(3:1), 2:1]
#   [,1] [,2]
# 3    2    0
# 2   -1    1
# 1   -1   -1

Kontrast matrisi cHelmert2ile karşılaştırın cMat. Sütunların diğer matrisin ölçekli versiyonları olduğunu göreceksiniz.

Sonuç lmer:

library(lme4)
res2 <- lmer(result ~ cond + (1|s), data = dat, 
             contrasts = list(cond = cHelmert2))
coef(summary(res2))    
#               Estimate Std. Error    t value
# (Intercept) -2.9481150 0.09460250 -31.163182
# cond1        0.4505056 0.06689407   6.734612
# cond2        0.5769590 0.11586393   4.979625

Bu kontrast matrisi, özel kontrast matrisi ile aynı karşılaştırmalara izin verir. Bununla birlikte, matristeki değerler farklı olduğu için, sabit etki katsayıları da farklıdır. Şaşırtıcı olmayan bir şekilde,t- değerler aynı.


Çok teşekkürler! Sadece bunu şimdi anladığımdan emin olmak için - ilk seviyeyi 4 seviyeli bir değişkenin geri kalanıyla karşılaştırmak istersem, matolur c(1, -1/3, -1/3, -1/3)mu? Bu yüzden sayıları her zaman formülde olduğu gibi ayarladım (a + (b + c + d) / 3) ve sonra ginvkatsayıları doğrudan farkı yansıtacak şekilde ölçeklendiririm. Ve Helmert örneğindeki sıralamayı değiştirdiğinizde, bu sadece soruyla eşleşecekti? Aksi takdirde, zıtlık sırasına bakılmaksızın sonuçlar aynı olmalıdır, değil mi?
M4RT1NK4

@ M4RT1NK4 Formülünüz ve karşılık gelen kontrast doğrudur. Sütunların sırası, sorudaki sütunların sırasına uyacak şekilde değiştirildi. Bununla birlikte, satırların sırası önemlidir, çünkü ilk seviye referans seviyesidir. Örneğin, referans seviyesi üçüncü seviyedir.
Sven Hohenstein

@SvenHohenstein Bu cevaba dayanarak ilgili bir sorum vardı, zihin bir göz atmak? stats.stackexchange.com/questions/357781/…
mat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.