尝试在R中运行lmer()时出错

尝试在R中运行lmer()时出错,r,syntax-error,lme4,lmer,R,Syntax Error,Lme4,Lmer,这就是我的问题。我在R中有一个数据集,我需要对它运行一个混合效果模型。代码如下: data <- read.csv("D:/blahblah.csv") analysis.data <- lmer(intdiff ~ stress_limit * word_position * follows + (1|speaker), data) summary(analysis.data) 我一直跟踪到“follows”参数,因为当我只使用stress\u limit和word\u posi

这就是我的问题。我在R中有一个数据集,我需要对它运行一个混合效果模型。代码如下:

data <- read.csv("D:/blahblah.csv")
analysis.data <- lmer(intdiff ~ stress_limit * word_position * follows + (1|speaker), data)
summary(analysis.data)
我一直跟踪到“follows”参数,因为当我只使用stress\u limit和word\u position时,它运行良好。如果有帮助,“follows”中的数据只有3个字符串:n或l、辅音、元音。我试着用u替换空格,但没有成功。在这种情况下,lmer()函数的内部工作是否会阻止使用“follows”?任何帮助都会很好

有关更多信息:intdiff包含数值,重音限制为字符串(重音或非重音),单词位置也是字符串(单词中间或单词首字母)

编辑:以下是重现错误的数据示例:

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

如果没有可复制的示例,很难确定:

但是,猜测一下:这类问题通常是由于设计矩阵中的共线性造成的。将连续预测器(
intdiff
)居中可能会有所帮助。您还可以直接浏览设计矩阵

X <- model.matrix( ~ stress_limit * word_position * follows, data)
当我在lme4()的开发版本中运行您的测试数据时,我在lmer中得到了
错误(intdiff~stress\u limit*word\u position*跟随+(1 |:秩X=5
。另一方面,使用这个小的输入数据集(6个观察值),不可能拟合12个参数。要准确判断问题所在有点困难。3个变量的12个组合是否都出现在数据中?如果缺少一些,则需要遵循开发版本帮助中给出的建议:

与“lm”和“glm”等更简单的建模框架不同 自动检测完全共线的预测变量, “[gn]lmer”无法处理小于满秩的设计矩阵。对于 例如,对于具有未观察到的交互的模型 级别的组合,由用户定义新变量 (例如,根据测试结果在数据中创建“ab”) “液滴层(相互作用(a,b))”)

特别是,您可以按如下方式拟合此模型:

data <- transform(data,
       allcomb=interaction(stress_limit,word_position,follow,drop=TRUE))
lme(intdiff ~ allcomb, random=~1|speaker, data=data)

首先是数据,非常感谢您的回答!我真的不理解问题的共线性,也许您可以解释一下?我在谷歌上搜索了这个术语,但这无助于澄清太多(开始统计)。否则,我改进了上面的可用信息,也许可以帮助我们解决这个问题?@Shakesbeery yep,这就是困难所在。这些工具只能做数据允许的事情:-(。让我想起我第一次接触最小二乘分析。我高兴地想到了这一点(减少大学物理实验室数据),即使基础模型是y~x^2,我也可以得到一个更“酷”的适合8次多项式。失败。这种事情发生在我们所有人身上。太棒了,这是一个非常有用和信息丰富的回答!我想我可以从这里开始。再次,我衷心感谢你。你的实际数据框有多少行<代码>数据?数据框大约有1110行。给定一个时间,数据是可预测的但是,样本。您的预测变量是否包含所有可能的重音限制、单词位置和词尾组合,或者是否缺少一些(因为它们不可行或者您没有碰巧测量它们)?是否
带有(数据,全部(表(重音限制、单词位置、词尾)>=1))
true?(这变成了一个统计问题,而不是一个编程问题…)结果是错误的,所以我想,事实上,并不是所有可能的组合都存在。这是否意味着一个混合效果模型根本无法运行?或者在运行该函数时,我是否可以考虑到这一点?
library(nlme)
lme(intdiff ~ stress_limit * word_position * follows, 
   random=~1|speaker, data=data)
data <- transform(data,
       allcomb=interaction(stress_limit,word_position,follow,drop=TRUE))
lme(intdiff ~ allcomb, random=~1|speaker, data=data)