Ошибка с функцией emmeans в R . Как это исправить?

У меня есть такой файл:

введите здесь описание изображения

Я использую этот набор данных для прогнозирования линейной смешанной модели, и я хочу использовать функцию emmeans для расчета оценочных средних значений для моих условий. Код, который я использую, находится здесь:

newtab5 <- read.csv(file="sliding_LMM_test.csv", header=T, sep=",")
head(newtab5)

library(lmerTest)

model <- lmer(formula = data1 ~ flabel + (1 | whichFragments), data = newtab5, control=lmerControl(check.nlev.gtr.1 = "ignore"))
sfit <-summary(model)
sfit$coefficients[,2][2]
sfit$coefficients[,5][2]

library(emmeans)

means <- emmeans(model, "flabel")
test<-summary(means)

И у меня есть эта ошибка:

>  Error in t(ZZ) %*% EE :Cholmod error 'X and/or Y have wrong dimensions' at file ../MatrixOps/cholmod_sdmult.c, line 90

Похоже, что функция emmeans не работает, когда столбец какие фрагменты имеет одинаковые значения.

Знаете ли вы какой-либо способ пропустить это или заставить emmeans работать в этом случае?

заранее спасибо


person user3683485    schedule 10.04.2019    source источник
comment
Можете ли вы создать воспроизводимый пример, который вызывает эту ошибку?   -  person Russ Lenth    schedule 12.04.2019
comment
Таблица, которая у меня есть, является примером, который вызывает эту ошибку! ты хочешь чего-нибудь еще ?   -  person user3683485    schedule 12.04.2019
comment
Это зависит от того, хотите ли вы, чтобы я попытался воспроизвести это состояние на своем компьютере и попытался выяснить, что происходит не так. Если вы это сделаете, опубликуйте данные (или какой-либо другой набор данных, который приводит к этой ошибке) здесь как-нибудь или отправьте их по электронной почте сопровождающему emmeans.   -  person Russ Lenth    schedule 12.04.2019
comment
flabel <- c('con1','con1','con1', 'con2','con2','con2') sample <- c(1, 2, 3, 4, 5, 6) whichFragments <- c('chr1_1','chr1_1','chr1_1', 'chr1_1', 'chr1_1', 'chr1_1') data1 <- c(0.99, 0.42, 0.3873, 0.244, 0.005, 0.0726) data <- data.frame(flabel, sample, whichFragments, data1) library(lmerTest) library(emmeans) model <- lmer(formula = data1 ~ flabel + (1 | whichFragments), data = data, control=lmerControl(check.nlev.gtr.1 = "ignore")) sfit <-summary(model) means <- emmeans(model, "flabel") этот код работает и выдает ошибку. Вы можете запустить его на своем компьютере   -  person user3683485    schedule 12.04.2019
comment
Извините, я не понял, что это весь набор данных, подумал, что это были первые несколько наблюдений.   -  person Russ Lenth    schedule 12.04.2019


Ответы (1)


Это ошибка, возникающая в пакете pbkrtest при вычислении скорректированной ковариационной матрицы, необходимой для степеней свободы Кенварда-Роджера (который является методом степеней свободы по умолчанию для lmerMod объектов). ). Почти наверняка это связано с нераскрытым предупреждающим сообщением, возникающим при подборе модели:

> model <- lmer(formula = data1 ~ flabel + (1 | whichFragments), 
+    data = data, control=lmerControl(check.nlev.gtr.1 = "ignore")) 
Warning message:
In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
   Hessian is numerically singular: parameters are not uniquely determined

Удивительно (для меня), вы все еще можете получить результаты, если используете какую-то другую ф.р. метод, напр. Саттертуэйт:

> emmeans(model, "flabel", mode = "satterth")
 flabel emmean    SE   df lower.CL upper.CL
 con1    0.599 0.147 0.26    -3879     3880
 con2    0.107 0.147 0.26    -3880     3880

Degrees-of-freedom method: satterthwaite 
Confidence level used: 0.95

Иметь 0,26 степени свободы — это немного: посмотрите на КИ.

Как и общее наблюдение, вы всегда напрашиваетесь на неприятности, когда пытаетесь оценить дисперсию только с одним наблюдением. Это то, что пытается сделать эта модель с точки зрения дисперсии между-whichFragments. Я очень надеюсь, что у вас есть больше данных, чем это в вашем реальном исследовании.

Кстати, если все, что вам нужно, это средства, вы можете просто вычислить средства:

> with(data, tapply(data1, flabel, mean))

  con1   con2 
0.5991 0.1072 
person Russ Lenth    schedule 12.04.2019
comment
Это правда, это не все мои данные, это часть некоторых случаев в моих данных. В большинстве случаев у меня есть больше данных из разных областей, поэтому столбец whichFragments отличается, но есть несколько случаев, подобных приведенным выше. Я думал рассчитать нормальные средние значения в таких случаях и оценочные предельные средние значения в случаях с большим количеством данных. Как я вижу, в этом случае предполагаемые средние значения не отличаются от обычных средних. - person user3683485; 12.04.2019
comment
Я предлагаю вам подобрать полную модель с включенным case в качестве фактора, а затем получить все EMM через emmeans(model, ~ flabel | case). Это даст оценки даже в случаях с одним фрагментом. - person Russ Lenth; 12.04.2019
comment
Что вы имеете в виду под случаем? - person user3683485; 12.04.2019
comment
Что бы вы ни имели в виду, когда говорили «в некоторых случаях…» Я думал, что с этим должен быть связан какой-то фактор. Расположение? Предмет? День? - person Russ Lenth; 13.04.2019
comment
Нет, я говорил о случаях большего количества данных! Колонки всегда такие! В чем отличие режима саттерта от обычного? - person user3683485; 15.04.2019
comment
Хорошо, в таком случае я думаю, что вы, возможно, пытаетесь быть слишком причудливыми с этими анализами. Может быть, было бы лучше просто вычислить обычные выборочные средние значения в каждом наборе данных. - person Russ Lenth; 15.04.2019
comment
Это то, что я сделал в первую очередь, и я рассчитал обычные средние значения ... но я также хотел попробовать оценочные значения. - person user3683485; 15.04.2019