Что такое эквивалент lme4 :: lmer трехсторонних повторяющихся мер ANOVA?


11

Мой вопрос основан на этом ответе, который показал, какая lme4::lmerмодель соответствует двусторонним повторным измерениям ANOVA:

require(lme4)
set.seed(1234)
d <- data.frame(
    y = rnorm(96),
    subject = factor(rep(1:12, 4)),
    a = factor(rep(1:2, each=24)),
    b = factor(rep(rep(1:2, each=12))),
    c = factor(rep(rep(1:2, each=48))))

# standard two-way repeated measures ANOVA:
summary(aov(y~a*b+Error(subject/(a*b)), d[d$c == "1",]))

# corresponding lmer call:
anova(lmer(y ~ a*b+(1|subject) + (1|a:subject) + (1|b:subject), d[d$c == "1",]))

Теперь мой вопрос о том, как распространить это на случай трехстороннего ANOVA:

summary(aov(y~a*b*c+Error(subject/(a*b*c)), d))
## [...]
## Error: subject:a:b:c
##           Df Sum Sq Mean Sq F value Pr(>F)
## a:b:c      1  0.101  0.1014   0.115  0.741
## Residuals 11  9.705  0.8822 

Естественное расширение, а также его версии не соответствуют результатам ANOVA:

anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject), d))
## [...]
## a:b:c  1 0.1014  0.1014  0.1500

anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject) + 
               (1|a:b:subject) + (1|a:c:subject) + (1|b:c:subject), d))
## [...]
## a:b:c  1 0.1014  0.1014  0.1539

Обратите внимание, что очень похожий вопрос был задан ранее . Тем не менее, отсутствовал пример данных (которые приведены здесь).


Вы уверены, что не хотите, чтобы ваша модель была двухуровневой y ~ a*b + (1 + a*b|subject), d[d$c == "1",]? Или, может быть, я что-то упустил?
Расмус Бат,

@ RasmusBååth Идите вперед и попытайтесь подогнать его, lmerбудете жаловаться, так как случайные эффекты больше не выявляются. Изначально я тоже думал, что это именно та модель, которую я хочу, но это не так. Если вы сравните модель lmer, которую я предлагаю для двустороннего случая, со стандартным ANOVA, вы увидите, что значения F в точности совпадают. Как сказано в ответе я связан.
Хенрик

3
Для трехсторонней задачи первая lmerнаписанная вами модель (исключающая случайные двусторонние взаимодействия), как ожидается, не будет эквивалентна трехсторонней RM-ANOVA, а вторая написанная вами (которая включает случайную двусторонние взаимодействия) должно быть. Что касается того, почему существует несоответствие даже с этой моделью, у меня есть догадка о том, в чем проблема, собираюсь поужинать, а затем еще раз взгляну на набор игрушечных данных.
Джейк Уэстфолл,

Ответы:


18

Прямой ответ на ваш вопрос заключается в том, что последняя модель, которую вы написали,

anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject) + 
           (1|a:b:subject) + (1|a:c:subject) + (1|b:c:subject), d))

Я считаю, что это «в принципе» правильно, хотя это странная параметризация, которая не всегда хорошо работает в реальной практике.

Что касается того, почему вывод, который вы получаете из этой модели, не совпадает с aov()выводом, я думаю, что есть две причины.

  1. Ваш простой смоделированный набор данных является патологическим в том смысле, что наиболее подходящая модель - это модель, которая подразумевает компоненты с отрицательной дисперсией, которые lmer()не позволят использовать смешанные модели (и большинство других программ смешанных моделей).
  2. Даже с непатологическим набором данных способ настройки модели, как упоминалось выше, не всегда хорошо работает на практике, хотя я должен признать, что не совсем понимаю, почему. Это также просто странно, на мой взгляд, но это другая история.

Позвольте мне сначала продемонстрировать параметризацию, которую я предпочитаю на вашем первоначальном двухстороннем примере ANOVA. Предположим, что ваш набор данных dзагружен. Ваша модель (обратите внимание, что я изменил с фиктивных на контрастные коды):

options(contrasts=c("contr.sum","contr.poly"))
mod1 <- lmer(y ~ a*b+(1|subject) + (1|a:subject) + (1|b:subject),
         data = d[d$c == "1",])
anova(mod1)
# Analysis of Variance Table
#     Df  Sum Sq Mean Sq F value
# a    1 2.20496 2.20496  3.9592
# b    1 0.13979 0.13979  0.2510
# a:b  1 1.23501 1.23501  2.2176

который работал хорошо здесь в том, что он соответствовал aov()выводу. Модель, которую я предпочитаю, включает в себя два изменения: ручное контрастное кодирование факторов, чтобы мы не работали с объектами R-факторов (что я рекомендую делать в 100% случаев), и определение случайных эффектов по-другому:

d <- within(d, {
  A <- 2*as.numeric(paste(a)) - 3
  B <- 2*as.numeric(paste(b)) - 3
  C <- 2*as.numeric(paste(c)) - 3
})
mod2 <- lmer(y ~ A*B + (1|subject)+(0+A|subject)+(0+B|subject),
             data = d[d$c == "1",])
anova(mod2)
# Analysis of Variance Table
# Df  Sum Sq Mean Sq F value
# A    1 2.20496 2.20496  3.9592
# B    1 0.13979 0.13979  0.2510
# A:B  1 1.23501 1.23501  2.2176

logLik(mod1)
# 'log Lik.' -63.53034 (df=8)
logLik(mod2)
# 'log Lik.' -63.53034 (df=8)

Два подхода полностью эквивалентны в простой двусторонней задаче. Теперь перейдем к трехсторонней проблеме. Ранее я упоминал, что приведенный вами пример данных является патологическим. Итак, что я хочу сделать перед рассмотрением вашего примера набора данных, это сначала сгенерировать набор данных из фактической модели компонентов дисперсии (т. Е. Где ненулевые компоненты дисперсии встроены в истинную модель). Сначала я покажу, как моя предпочтительная параметризация работает лучше, чем предложенная вами. Тогда я покажу еще один способ оценки компонентов дисперсии , которые никак не налагать , что они должны быть неотрицательными. Тогда мы сможем увидеть проблему с исходным примером набора данных.

Новый набор данных будет идентичным по структуре, за исключением того, что у нас будет 50 предметов:

set.seed(9852903)
d2 <- expand.grid(A=c(-1,1), B=c(-1,1), C=c(-1,1), sub=seq(50))
d2 <- merge(d2, data.frame(sub=seq(50), int=rnorm(50), Ab=rnorm(50),
  Bb=rnorm(50), Cb=rnorm(50), ABb=rnorm(50), ACb=rnorm(50), BCb=rnorm(50)))
d2 <- within(d2, {
  y <- int + (1+Ab)*A + (1+Bb)*B + (1+Cb)*C + (1+ABb)*A*B +
    (1+ACb)*A*C + (1+BCb)*B*C + A*B*C + rnorm(50*2^3)
  a <- factor(A)
  b <- factor(B)
  c <- factor(C)
})

Соотношения F, которые мы хотим соответствовать:

aovMod1 <- aov(y ~ a*b*c + Error(factor(sub)/(a*b*c)), data = d2)
tab <- lapply(summary(aovMod1), function(x) x[[1]][1,2:4])
do.call(rbind, tab)
#                          Sum Sq Mean Sq F value
# Error: factor(sub)       439.48    8.97        
# Error: factor(sub):a     429.64  429.64  32.975
# Error: factor(sub):b     329.48  329.48  27.653
# Error: factor(sub):c     165.44  165.44  17.924
# Error: factor(sub):a:b   491.33  491.33  49.694
# Error: factor(sub):a:c   305.46  305.46  41.703
# Error: factor(sub):b:c   466.09  466.09  40.655
# Error: factor(sub):a:b:c 392.76  392.76 448.101

Вот наши две модели:

mod3 <- lmer(y ~ a*b*c + (1|sub)+(1|a:sub)+(1|b:sub)+(1|c:sub)+
  (1|a:b:sub)+(1|a:c:sub)+(1|b:c:sub), data = d2)
anova(mod3)
# Analysis of Variance Table
#       Df Sum Sq Mean Sq F value
# a      1  32.73   32.73  34.278
# b      1  21.68   21.68  22.704
# c      1  12.53   12.53  13.128
# a:b    1  60.93   60.93  63.814
# a:c    1  50.38   50.38  52.762
# b:c    1  57.30   57.30  60.009
# a:b:c  1 392.76  392.76 411.365

mod4 <- lmer(y ~ A*B*C + (1|sub)+(0+A|sub)+(0+B|sub)+(0+C|sub)+
  (0+A:B|sub)+(0+A:C|sub)+(0+B:C|sub), data = d2)
anova(mod4)
# Analysis of Variance Table
#       Df Sum Sq Mean Sq F value
# A      1  28.90   28.90  32.975
# B      1  24.24   24.24  27.653
# C      1  15.71   15.71  17.924
# A:B    1  43.56   43.56  49.694
# A:C    1  36.55   36.55  41.703
# B:C    1  35.63   35.63  40.655
# A:B:C  1 392.76  392.76 448.101

logLik(mod3)
# 'log Lik.' -984.4531 (df=16)
logLik(mod4)
# 'log Lik.' -973.4428 (df=16)

Как мы видим, только второй метод совпадает с выходом из aov(), хотя первый метод, по крайней мере, в приблизительном. Второй метод также обеспечивает более высокую логарифмическую вероятность. Я не уверен, почему эти два метода дают разные результаты, так как я снова думаю, что они «в принципе» эквивалентны, но, возможно, это по каким-то численным / вычислительным причинам. Или, может быть, я ошибаюсь, и они не эквивалентны даже в принципе.

Теперь я покажу другой способ оценки компонентов дисперсии на основе традиционных идей ANOVA. В основном мы возьмем ожидаемые среднеквадратичные уравнения для вашего проекта, подставим наблюдаемые значения средних квадратов и найдем компоненты дисперсии. Чтобы получить ожидаемые средние квадраты, мы будем использовать функцию R, которую я написал несколько лет назад EMS()и которая называется ЗДЕСЬ . Ниже я предполагаю, что функция уже загружена.

# prepare coefficient matrix
r <- 1 # number of replicates
s <- 50 # number of subjects
a <- 2 # number of levels of A
b <- 2 # number of levels of B
c <- 2 # number of levels of C
CT <- EMS(r ~ a*b*c*s, random="s")
expr <- strsplit(CT[CT != ""], split="")
expr <- unlist(lapply(expr, paste, collapse="*"))
expr <- sapply(expr, function(x) eval(parse(text=x)))
CT[CT != ""] <- expr
CT[CT == ""] <- 0
mode(CT) <- "numeric"
# residual variance and A*B*C*S variance are confounded in
# this design, so remove the A*B*C*S variance component
CT <- CT[-15,-2]
CT
#        VarianceComponent
# Effect  e b:c:s a:c:s a:b:s a:b:c c:s b:s a:s b:c a:c a:b s   c   b   a
#   a     1     0     0     0     0   0   0   4   0   0   0 0   0   0 200
#   b     1     0     0     0     0   0   4   0   0   0   0 0   0 200   0
#   c     1     0     0     0     0   4   0   0   0   0   0 0 200   0   0
#   s     1     0     0     0     0   0   0   0   0   0   0 8   0   0   0
#   a:b   1     0     0     2     0   0   0   0   0   0 100 0   0   0   0
#   a:c   1     0     2     0     0   0   0   0   0 100   0 0   0   0   0
#   b:c   1     2     0     0     0   0   0   0 100   0   0 0   0   0   0
#   a:s   1     0     0     0     0   0   0   4   0   0   0 0   0   0   0
#   b:s   1     0     0     0     0   0   4   0   0   0   0 0   0   0   0
#   c:s   1     0     0     0     0   4   0   0   0   0   0 0   0   0   0
#   a:b:c 1     0     0     0    50   0   0   0   0   0   0 0   0   0   0
#   a:b:s 1     0     0     2     0   0   0   0   0   0   0 0   0   0   0
#   a:c:s 1     0     2     0     0   0   0   0   0   0   0 0   0   0   0
#   b:c:s 1     2     0     0     0   0   0   0   0   0   0 0   0   0   0
#   e     1     0     0     0     0   0   0   0   0   0   0 0   0   0   0

# get mean squares
(MSmod <- summary(aov(y ~ a*b*c*factor(sub), data=d2)))
#                   Df Sum Sq Mean Sq
# a                  1  429.6   429.6
# b                  1  329.5   329.5
# c                  1  165.4   165.4
# factor(sub)       49  439.5     9.0
# a:b                1  491.3   491.3
# a:c                1  305.5   305.5
# b:c                1  466.1   466.1
# a:factor(sub)     49  638.4    13.0
# b:factor(sub)     49  583.8    11.9
# c:factor(sub)     49  452.2     9.2
# a:b:c              1  392.8   392.8
# a:b:factor(sub)   49  484.5     9.9
# a:c:factor(sub)   49  358.9     7.3
# b:c:factor(sub)   49  561.8    11.5
# a:b:c:factor(sub) 49   42.9     0.9
MS <- MSmod[[1]][,"Mean Sq"]

# solve
ans <- solve(CT, MS)
cbind(rev(ans[c(grep("e",names(ans)),grep("s",names(ans)))])/
        c(1,2,2,2,4,4,4,1))
# s     1.0115549
# a:s   1.5191114
# b:s   1.3797937
# c:s   1.0441351
# a:b:s 1.1263331
# a:c:s 0.8060402
# b:c:s 1.3235126
# e     0.8765093
summary(mod4)
# Random effects:
#  Groups   Name        Variance Std.Dev.
#  sub      (Intercept) 1.0116   1.0058  
#  sub.1    A           1.5191   1.2325  
#  sub.2    B           1.3798   1.1746  
#  sub.3    C           1.0441   1.0218  
#  sub.4    A:B         1.1263   1.0613  
#  sub.5    A:C         0.8060   0.8978  
#  sub.6    B:C         1.3235   1.1504  
#  Residual             0.8765   0.9362  
# Number of obs: 400, groups:  sub, 50

Хорошо, теперь мы вернемся к исходному примеру. Соотношения F, к которым мы стремимся соответствовать:

aovMod2 <- aov(y~a*b*c+Error(subject/(a*b*c)), data = d)
tab <- lapply(summary(aovMod2), function(x) x[[1]][1,2:4])
do.call(rbind, tab)
#                       Sum Sq Mean Sq F value
# Error: subject       13.4747  1.2250        
# Error: subject:a      1.4085  1.4085  1.2218
# Error: subject:b      3.1180  3.1180  5.5487
# Error: subject:c      6.3809  6.3809  5.2430
# Error: subject:a:b    1.5706  1.5706  2.6638
# Error: subject:a:c    1.0907  1.0907  1.5687
# Error: subject:b:c    1.4128  1.4128  2.3504
# Error: subject:a:b:c  0.1014  0.1014  0.1149

Вот наши две модели:

mod5 <- lmer(y ~ a*b*c + (1|subject)+(1|a:subject)+(1|b:subject)+
  (1|c:subject)+(1|a:b:subject)+(1|a:c:subject)+(1|b:c:subject),
  data = d)
anova(mod5)
# Analysis of Variance Table
#       Df Sum Sq Mean Sq F value
# a      1 0.8830  0.8830  1.3405
# b      1 3.1180  3.1180  4.7334
# c      1 3.8062  3.8062  5.7781
# a:b    1 1.5706  1.5706  2.3844
# a:c    1 0.9620  0.9620  1.4604
# b:c    1 1.4128  1.4128  2.1447
# a:b:c  1 0.1014  0.1014  0.1539

mod6 <- lmer(y ~ A*B*C + (1|subject)+(0+A|subject)+(0+B|subject)+
  (0+C|subject)+(0+A:B|subject)+(0+A:C|subject)+
  (0+B:C|subject), data = d)
anova(mod6)
# Analysis of Variance Table
#       Df Sum Sq Mean Sq F value
# a      1 0.8830  0.8830  1.3405
# b      1 3.1180  3.1180  4.7334
# c      1 3.8062  3.8062  5.7781
# a:b    1 1.5706  1.5706  2.3844
# a:c    1 0.9620  0.9620  1.4604
# b:c    1 1.4128  1.4128  2.1447
# a:b:c  1 0.1014  0.1014  0.1539

logLik(mod5)
# 'log Lik.' -135.0351 (df=16)
logLik(mod6)
# 'log Lik.' -134.9191 (df=16)

В этом случае две модели дают в основном одинаковые результаты, хотя второй метод имеет чуть более высокую логарифмическую вероятность. Ни один из методов не соответствует aov(). Но давайте посмотрим на то, что мы получаем, когда решаем для компонентов дисперсии, как мы делали выше, используя процедуру ANOVA, которая не ограничивает компоненты дисперсии неотрицательными (но которые могут использоваться только в сбалансированных схемах без непрерывных предикторов и без недостающие данные; классические предположения ANOVA).

# prepare coefficient matrix
r <- 1 # number of replicates
s <- 12 # number of subjects
a <- 2 # number of levels of A
b <- 2 # number of levels of B
c <- 2 # number of levels of C
CT <- EMS(r ~ a*b*c*s, random="s")
expr <- strsplit(CT[CT != ""], split="")
expr <- unlist(lapply(expr, paste, collapse="*"))
expr <- sapply(expr, function(x) eval(parse(text=x)))
CT[CT != ""] <- expr
CT[CT == ""] <- 0
mode(CT) <- "numeric"
# residual variance and A*B*C*S variance are confounded in
# this design, so remove the A*B*C*S variance component
CT <- CT[-15,-2]

# get mean squares
MSmod <- summary(aov(y ~ a*b*c*subject, data=d))
MS <- MSmod[[1]][,"Mean Sq"]

# solve
ans <- solve(CT, MS)
cbind(rev(ans[c(grep("e",names(ans)),grep("s",names(ans)))])/
        c(1,2,2,2,4,4,4,1))
# s      0.04284033
# a:s    0.03381648
# b:s   -0.04004005
# c:s    0.04184887
# a:b:s -0.03657940
# a:c:s -0.02337501
# b:c:s -0.03514457
# e      0.88224787
summary(mod6)
# Random effects:
#  Groups    Name        Variance  Std.Dev. 
#  subject   (Intercept) 7.078e-02 2.660e-01
#  subject.1 A           6.176e-02 2.485e-01
#  subject.2 B           0.000e+00 0.000e+00
#  subject.3 C           6.979e-02 2.642e-01
#  subject.4 A:B         1.549e-16 1.245e-08
#  subject.5 A:C         4.566e-03 6.757e-02
#  subject.6 B:C         0.000e+00 0.000e+00
#  Residual              6.587e-01 8.116e-01
# Number of obs: 96, groups:  subject, 12

Теперь мы можем увидеть, что патологического в оригинальном примере. Наиболее подходящей является модель, которая подразумевает, что некоторые из компонентов случайной дисперсии являются отрицательными. Но lmer()(и большинство других программ смешанной модели) ограничивает оценки компонентов дисперсии неотрицательными. Это обычно считается разумным ограничением, так как отклонения, конечно, никогда не могут быть действительно отрицательными. Однако следствием этого ограничения является то, что смешанные модели не могут точно представлять наборы данных, которые имеют отрицательные внутриклассовые корреляции, то есть наборы данных, где наблюдения из одного кластера меньше(а не больше) в среднем похожи, чем наблюдения, сделанные случайным образом из набора данных, и, следовательно, когда внутрикластерная дисперсия существенно превышает дисперсию между кластерами. Такие наборы данных являются вполне разумными наборами данных, которые иногда можно встретить в реальном мире (или случайно имитировать!), Но они не могут быть разумно описаны моделью компонентов дисперсии, потому что они подразумевают отрицательные компоненты дисперсии. Однако они могут быть «бессмысленно» описаны такими моделями, если программное обеспечение позволит это. aov()позволяет это. lmer()не.


+1. Re I am not sure why these two methods give different results, as again I think they are "in principle" equivalent, but maybe it is for some numerical/computational reasons- вы , возможно , лучше это понять сейчас (через два года)? Я пытался выяснить, в чем разница, но тоже не понимаю ...
говорит амеба Reinstate Monica

@amoeba Мое нынешнее мышление остается почти таким же, как и тогда: AFAIK, две модели статистически эквивалентны (в том смысле, что они делают одинаковые прогнозы относительно данных и предполагают одинаковые стандартные ошибки), даже если случайные эффекты параметризованы иначе. Я думаю, что наблюдаемые различия, которые, кажется, возникают иногда, связаны только с вычислительными проблемами. В частности, я подозреваю, что вы могли бы возиться с настройками оптимизатора (такими как изменение начальных точек или использование более строгих критериев сходимости), пока две модели не дадут абсолютно одинаковый ответ.
Джейк Уэстфолл,

Спасибо за ваш ответ. Я довольно не убежден: я пытался поиграть с настройками оптимизатора и не мог ничего изменить в результатах; У меня сложилось впечатление, что обе модели хорошо сходятся. Я мог бы спросить, что это отдельный вопрос в какой-то момент.
говорит амеба: восстанови Монику

AК(1|A:sub)(0+A|sub)К-1К(К-1)/2Кзнак равно2оба метода оценивают один параметр, и я до сих пор не совсем уверен, почему они не согласны.
говорит амеба, восстанови Монику

Возвращаясь к этой проблеме ... Я заметил, что для двухфакторного случая, когда два lmerвызова производят идентичный anova()вывод, случайные отклонения эффекта, тем не менее, совершенно различны: смотрите VarCorr(mod1)и VarCorr(mod2). Я не совсем понимаю, почему это происходит; вы? Для mod3и mod4можно увидеть, что четыре из семи отклонений для mod3фактически равны нулю (для mod4всех семи ненулевые); эта «особенность», mod3вероятно, объясняет, почему таблицы анова отличаются. Кроме того, как бы вы использовали свой «предпочтительный путь», если бы aи bимели более двух уровней?
говорит амеба, восстанови Монику

1

Есть a, b, cфиксированные или случайные эффекты? Если они исправлены, ваш синтаксис будет просто

summary(aov(y~a*b*c+Error(subject), d))
Error: subject
          Df Sum Sq Mean Sq F value Pr(>F)
Residuals 11  13.47   1.225               

Error: Within
          Df Sum Sq Mean Sq F value  Pr(>F)   
a          1   1.41   1.408   1.730 0.19235   
b          1   3.12   3.118   3.829 0.05399 . 
c          1   6.38   6.381   7.836 0.00647 **
a:b        1   1.57   1.571   1.929 0.16889   
a:c        1   1.09   1.091   1.339 0.25072   
b:c        1   1.41   1.413   1.735 0.19168   
a:b:c      1   0.10   0.101   0.124 0.72518   
Residuals 77  62.70   0.814  

library(lmerTest)
anova(lmer(y ~ a*b*c+(1|subject), data=d))
Analysis of Variance Table of type 3  with  Satterthwaite 
approximation for degrees of freedom
      Sum Sq Mean Sq NumDF  DenDF F.value   Pr(>F)   
a     1.4085  1.4085     1 76.991  1.7297 0.192349   
b     3.1180  3.1180     1 76.991  3.8291 0.053995 . 
c     6.3809  6.3809     1 76.991  7.8363 0.006469 **
a:b   1.5706  1.5706     1 76.991  1.9289 0.168888   
a:c   1.0907  1.0907     1 76.991  1.3394 0.250716   
b:c   1.4128  1.4128     1 76.991  1.7350 0.191680   
a:b:c 0.1014  0.1014     1 76.991  0.1245 0.725183  

Это фиксированные эффекты. Однако подходящая модель ANOVA - это не та модель, которая кажется классической моделью ANOVA с повторными измерениями, см., Например, здесь . Посмотрите страты ошибок в вашем и моем случае.
Хенрик

1
На самом деле, как они это делают, это неправильно. Если у вас полностью пересеченный план факторных повторных измерений (или рандомизированный блочный факторный план), вы должны получить только 1 член ошибки, кроме subjectвсех эффектов (т. Е. Within). См. «Дизайн эксперимента: процедуры для поведенческих наук» (2013) Кирка, глава 10 (с.458) или мой пост здесь
Масато Наказава,

Давайте на данный момент обойдем этот вопрос и предположим, что модель, которую я установил, будет правильной моделью. Как бы вы подходили к этому, используя lmer? Тем не менее я получу свою копию Кирка (только 2-е издание) и посмотрю, что там написано.
Хенрик

Мне любопытно узнать, что вы думаете о главе Кирка. Я думаю, что номер главы во 2-м изд. отличается. А пока попробую подогнать разные lmerмодели. Лучший способ проверить соответствие модели - это проверить их значения dfs, lmerTestтак как аппроксимация KR должна дать вам значения exactdfs и, следовательно, p-значения.
Масато Наказава

1
У меня есть 2-е издание Кирка, где я считаю, что соответствующее обсуждение на стр. 443-449, в котором обсуждается двусторонний (не трехсторонний) пример. Ожидаемые средние квадраты, предполагающие либо аддитивность А и В, либо нет, приведены на с. 447. Предполагая, что A и B являются фиксированными, а объекты / блоки являются случайными, мы можем видеть из ожидаемых средних квадратов, перечисленных Кирком в «неаддитивной модели», что каждый из тестов A, B и AB включает разные термины ошибки, а именно: соответствующие взаимодействия с блоком / субъектом. Тот же принцип распространяется на настоящий трехсторонний пример.
Джейк Уэстфолл,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.