0
我有一个GAMLSS模型我试图适应我的数据的多个子集。每个月都需要单独分析,所以我使用了一个foreach循环遍历数月。然而,当我并行我的循环时,dropterm
的结果全部得到NA'd。下面是使用内置的数据类似的例子:并行foreach将数据更改为NA当运行dropterm
library(dplyr)
library(gamlss)
library(MASS)
nCores <- detectCores()
gamlssCl <- makeCluster(nCores)
registerDoParallel(gamlssCl)
test.par <- foreach(s = unique(iris$Species),
.packages = c('dplyr', 'gamlss', 'MASS')) %dopar% {
species.data <- filter(iris, Species == s)
model <- gamlss(Petal.Length ~ Sepal.Length + Sepal.Width + Petal.Length,
data = species.data,
family = GA)
var.rank <- dropterm(model, test = 'Chisq') %>%
mutate(Variable = row.names(.)) %>%
arrange(AIC) %>%
filter(Variable != '<none>')
var.rank
}
stopCluster(gamlssCl)
test.par
# [[1]]
# Df AIC LRT Pr(Chi) Variable
# 1 NA NA NA NA Sepal.Length
# 2 NA NA NA NA Sepal.Width
# 3 NA NA NA NA Petal.Length
#
# [[2]]
# Df AIC LRT Pr(Chi) Variable
# 1 NA NA NA NA Sepal.Length
# 2 NA NA NA NA Sepal.Width
# 3 NA NA NA NA Petal.Length
#
# [[3]]
# Df AIC LRT Pr(Chi) Variable
# 1 NA NA NA NA Sepal.Length
# 2 NA NA NA NA Sepal.Width
# 3 NA NA NA NA Petal.Length
test.serial <- foreach(s = unique(iris$Species)) %do% {
species.data <- filter(iris, Species == s)
model <- gamlss(Petal.Length ~ Sepal.Length + Sepal.Width + Petal.Length,
data = species.data,
family = GA)
var.rank <- dropterm(model, test = 'Chisq') %>%
mutate(Variable = row.names(.)) %>%
arrange(AIC) %>%
filter(Variable != '<none>')
var.rank
}
test.serial
# [[1]]
# Df AIC LRT Pr(Chi) Variable
# 1 1 -31.66335 0.06406465 0.8001832 Sepal.Width
# 2 0 -29.72741 0.00000000 NA Petal.Length
# 3 1 -29.43731 2.29010516 0.1302011 Sepal.Length
#
# [[2]]
# Df AIC LRT Pr(Chi) Variable
# 1 0 31.03608 0.000000 NA Petal.Length
# 2 1 33.81852 4.782442 2.875132e-02 Sepal.Width
# 3 1 56.00459 26.968510 2.067972e-07 Sepal.Length
#
# [[3]]
# Df AIC LRT Pr(Chi) Variable
# 1 1 16.29265 0.08628226 7.689578e-01 Sepal.Width
# 2 0 18.20637 0.00000000 NA Petal.Length
# 3 1 77.14978 60.94341742 5.873901e-15 Sepal.Length
注:该错误不体现使用glm
时,而不是gamlss
该示例不会在我的计算机上复制您的问题。也许是一个多余的问题,但是你有最新版本的所有软件包(和R)吗?你是否已经在重新启动R之后尝试运行代码? – Vandenman
我也不能复制。如果范登曼的建议不能帮助你,你可以用'sessionInfo()'更新你的问题。 – user20650
有趣的是,我可以在R 3.2.3上复制问题... [sessionInfo()incoming ...] > sessionInfo() R版本3.2.3(2015-12-10) 平台:x86_64-w64 -mingw32/64(64位) 运行下:视窗7 64(建立7601)服务包1 区域设置: [1] = LC_COLLATE LC_CTYPE German_Germany.1252 = German_Germany.1252 LC_MONETARY = German_Germany.1252 LC_NUMERIC = C [5] LC_TIME = German_Germany.1252 附加的基本软件包: [1] splines parallel stats graphics grDevices utils datasets methods base – AlexR