我的问题是这样的。我有一个在R语言中的数据集,需要在其中运行一个混合效应模型。以下是代码:
data <- read.csv("D:/blahblah.csv")
analysis.data <- lmer(intdiff ~ stress_limit * word_position * follows + (1|speaker), data)
summary(analysis.data)
当我尝试运行脚本时,它返回以下错误:
Error in mer_finalize(ans) : Downdated X'X is not positive definite, 15.
我已经追踪到错误是由于"follows"参数引起的,因为当我只使用stress_limit和word_position时,它可以正常运行。如果有帮助的话,"follows"中的数据只有三个字符串:n或l、辅音、元音。我尝试用下划线替换空格,但没有成功。在这种情况下,lmer()函数的内部工作是否有阻止使用"follows"的原因?任何帮助都将是极好的!
更多信息:intdiff包含数值,stress_limit是字符串(Stressed或Unstressed),单词位置也是字符串(Word Medial或Word Initial)。
编辑:这里是一个可重现错误的数据样本:
structure(list(intdiff = c(11.45007951, 12.40144758, 13.47898367,
6.279497762, 18.19461897, 16.15539707), word_position = structure(c(2L,
2L, 2L, 1L, 1L, 1L), .Label = c("Word Initial", "Word Medial"
), class = "factor"), follows = structure(c(4L, 4L, 4L, 1L, 2L,
4L), .Label = c("Consonant", "n or l", "Pause", "Vowel"), class = "factor"),
stress_limit = structure(c(2L, 1L, 1L, 2L, 2L, 2L), .Label = c("Stressed",
"Unstressed"), class = "factor"), speaker = structure(c(2L,
2L, 2L, 2L, 2L, 2L), .Label = c("f11r", "f13r", "f15a", "f16a",
"m09a", "m10a", "m12r", "m14r"), class = "factor")), .Names = c("intdiff",
"word_position", "follows", "stress_limit", "speaker"), row.names = c(NA,
6L), class = "data.frame")
我也尝试了lme()函数,但是返回了以下错误:
Error in MEEM(object, conLin, control$niterEM) :
Singularity in backsolve at level 0, block 1
我原始帖子中的代码是我正在使用的确切代码,不包含库(lme4)调用,因此我想不出遗漏任何信息。
我使用的R版本是2.15.2
data
有多少行? - Sven Hohensteinwith(data,all(table(stress_limit,word_position,follows)>=1))
是否为真?(这似乎已经变成了一个统计问题而不是一个编程问题...) - Ben Bolker