【发布时间】:2013-01-17 09:04:10
【问题描述】:
所以这是我的问题。我在 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”中的数据只有 3 个字符串:n 或 l、辅音、元音。我尝试用 _ 替换空格,但没有成功。在这种情况下, lmer() 函数的内部工作是否阻止了“跟随”的使用?任何帮助都会很棒!
更多信息:intdiff 包含数值,stress_limit 是字符串(重读或非重读),单词位置也是字符串(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
我原始帖子中的代码是我正在使用的确切代码,减去 library(lme4) 调用,所以我不会留下任何我能想到的信息。
我的 R 版本是 2.15.2
【问题讨论】:
-
你的实际数据框
data有多少行? -
数据框大约有 1110 行。不过,在给定样本的情况下,数据是可预测的。
-
您的预测变量是否包含所有可能的组合重音限制、单词位置和跟随,或者缺少一些(因为它们不可行或者您没有碰巧测量他们)?
with(data,all(table(stress_limit,word_position,follows)>=1))是真的吗? (这变成了一个统计问题,而不是一个编程问题......) -
结果是假的,所以我猜确实,并非所有可能的组合都存在。这是否意味着根本无法运行混合效应模型?或者我可以在运行函数时考虑到这一点吗?
标签: r syntax-error lme4 lmer