使用R语言lqmm包时出现NA/NaN/Inf错误的排查求助
使用
lqmm包时的NA/NaN/Inf错误排查与解决方案需求 核心问题
- 运行
lqmm模型时触发错误:Error in f(arg, ...) : NA/NaN/Inf in foreign function call (arg 1) - 对
cluster_name变量做均值聚合后,模型可正常运行
数据验证与预处理情况
数据完整性验证
已通过以下代码确认数据中无NA、NaN和无穷值:
na_data = mydata new_DF <- na_data[rowSums(is.na(mydata)) > 0,] # 结果为空数据框 is.na(na_data) <- sapply(na_data, is.infinite) new_DF <- na_data[rowSums(is.na(mydata)) > 0,] # 结果仍为空数据框
- 数据框中无字符型变量,所有分类变量均已转换为factor类型
预处理函数
数据预处理逻辑如下:
prep_data_set <- function(data_file, brain_var = 'beta', beh_var = 'accuracy') { data = read.csv(data_file) data$subject <- factor(data$subject) data$type <- factor(data$type) data$type <- relevel(data$type, ref = "S") data$taught <- factor(data$taught) data <- subset(data, data$run_num < 13) data$run = factor(data$run_num) brain_mean <- mean(data[[brain_var]]) brain_sd <- sd(data[[brain_var]]) beh_mean <- mean(data[[beh_var]]) beh_sd <- sd(data[[beh_var]]) data <- subset(data, data$cluster_name != "") data$cluster_name <- factor(data$cluster_name) data$mean_centered_brain <- data[[brain_var]] data$std_brain <- data$mean_centered_brain/brain_sd data$mean_centered_beh <- data[[beh_var]] data$std_beh <- data$mean_centered_beh/beh_sd return(data) }
模型测试细节
触发错误的代码
mydata = prep_data_set(file.path(resdir, 'robust0005', 'pos_rel_con__all_clusters.csv')) m1 = lqmm(std_brain ~ std_beh*type*taught, random = ~1, group=subject, data = mydata, tau=.5, na.action=na.exclude)
子集测试结果
- 取前12528行运行模型(代码如下)可正常执行,第12529行数据无明显异常:
m1 = lqmm(std_brain ~ std_beh*type*taught, random = ~1, group=subject, data = begin_data, tau=.5, na.action=na.exclude)
tail(mydata, 11943)子集运行正常,但tail(mydata, 11944)触发错误- 子集9990:21825可正常运行,但向任意一侧扩展范围都会出错
- 数据集共29450条观测,中间子集包含疑似问题观测;提取边界附近小数据集未触发错误,3/4的问题情况涉及同一受试者(7645)
对比模型
lmer模型可正常运行,代码如下:
regular_model = lmer(std_brain ~ type*taught*std_beh + (1|subject/run) + (1|subject:cluster_name), data = mydata)
需求
希望找到该问题的通用解决方案。
内容的提问来源于stack exchange,提问作者Katie
相关产品推荐
相关产品推荐

