gpt4 book ai didi

r - emmeans 函数无法运行或运行时间过长

转载 作者:行者123 更新时间:2023-12-04 03:54:51 25 4
gpt4 key购买 nike

我是新的。我想用emmeans基于模型计算估计边际均值的函数。此模型由 lmer 完成功能。问题是我有很多(20 左右)固定效应变量和一个随机效应变量。我可以跑 lmer没有问题。顺便说一下,在运行 lmer 之前,我将 20 个分类变量设置为因子。 .当我使用 emmeans ,错误显示

Error: cannot allocate vector of size 49391.4 Gb


我知道这是一个内存问题。如果我使用 2-3 个变量来构建模型,则 emmeans 函数将运行,尽管需要 20 分钟才能完成。数据集相当大(20 k)。有没有人遇到同样的事情?或者我应该使用不同的功能?有没有办法让它在R中工作?我是 spss 用户,似乎不需要 spss 很长时间来计算这个,我不明白为什么我不能在 R 中运行它。
我的 R 脚本如下所示:
mod1 <- lmer(overall ~ age + gender + job + a + b + ... + c + (1 | groupcode), data=dat, REML=T)
res1 <- emmeans::emmeans(mod1, specs = "age")
res2 <- emmeans::emmeans(mod1, specs = "gender")
...
跟进:
嗨,我在网上找到了一些免费数据,所以我可以尝试复制这个问题。我无法 100% 复制这个问题,但它显示了 emmeans 函数需要太长时间的问题。如果我有一个更大的数据集和更多的变量,它根本不会运行。以下是代码:

library(dplyr)
library(stringr)

rm(list = ls())

#data source
#http://www.bristol.ac.uk/cmm/learning/support/datasets/
#bottom of the page: Multilevel ordinal models for examination grades database (zip, 0.9 mb)
#unzip the file and saved under cc:\momeg\
#I used file :a-level-geography.txt


#import data
dat <- read.csv("C:\\momeg\\a-level-geography.txt", header = FALSE, sep = "")

#assign column names
colnames(dat) <- c("A-SCORE", "BOARD", "GCSE-G-SCORE", "GENDER", "GTOT", "GNUM", "GCSE-MA-MAX", "GCSE-math-n", "AGE",
"INST-GA-MN", "INST-GA-SD", "INSTTYPE", "LEA", "INSTITUTE", "STUDENT") %>%
tolower(.) %>%
str_replace_all(., "-", "_")
#number of records
nrow(dat)

#centering score
dat$'a_score' <- dat$'a_score'- mean(dat$'a_score')



#setup catorgorical variables as factor
dat$gender <- factor(dat$gender)
dat$age <- factor(dat$age)
dat$gcse_g_score <- factor(dat$gcse_g_score)
dat$gcse_math_n <- factor(dat$gcse_math_n)
dat$insttype <- factor(dat$insttype)


library(lme4)
library(emmeans)

#run model

mod1 <- lmer(a_score ~ age + gender + gcse_g_score + gcse_math_n + insttype + (1 | institute), data=dat, REML=T)
summary(mod1)

#get emmean

emm_options(pbkrtest.limit = 50000) #increase the limit to aviod note about d.f to be disabled.

start.time <- Sys.time() #figure out how long it taks r to run the emmeans function
age.means <- emmeans::emmeans(mod1, specs = "age")
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
我已经运行 emmeans 函数一个多小时了,它仍在运行。为什么需要这么长时间?

最佳答案

不确定这是否完全相同,但在我尝试过的少数情况下似乎是相似的。最大的区别是使用的自由度,ggpredict()不对 DF 使用 Kenward-Roger(或任何其他)校正。

library(lme4)
fm2 <- lmer(Reaction ~ Days + (Days || Subject), sleepstudy)
emmeans::emmeans(fm2, specs="Days")
# Days emmean SE df lower.CL upper.CL
# 4.5 299 8.88 25 280 317
#
# Degrees-of-freedom method: kenward-roger
# Confidence level used: 0.95

library(ggeffects)
m <- mean(sleepstudy$Days)
ggpredict(fm2, terms="Days [m]")

# # Predicted values of Reaction
# # x = Days
#
# x | Predicted | SE | 95% CI
# ------------------------------------------
# 4.50 | 298.51 | 8.88 | [281.11, 315.91]
#
# Adjusted for:
# * Subject = 0 (population-level)

关于r - emmeans 函数无法运行或运行时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64065864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com