小编Jus*_*ted的帖子

为什么每个额外节点的foreach%dopar%会变慢?

我写了一个简单的矩阵乘法来测试我的网络的多线程/并行化功能,我注意到计算速度比预期慢得多.

测试很简单:乘以2个矩阵(4096x4096)并返回计算时间.矩阵和结果都没有存储.计算时间并不简单(50-90秒,具体取决于您的处理器).

条件:我使用1个处理器重复这个计算10次,将这10个计算分成2个处理器(每个5个),然后是3个处理器,......最多10个处理器(每个处理器1个计算).我预计总计算时间会逐步减少,我预计10个处理器完成计算的速度是一个处理器执行相同操作的10倍.

结果:相反,我得到了什么只是在计算时间是5倍2倍减少于预期.

在此输入图像描述

当我计算每个节点的平均计算时间时,我希望每个处理器在相同的时间内(平均)计算测试,而不管分配的处理器数量.我惊讶地发现仅仅向多个处理器发送相同的操作会减慢每个处理器的平均计算时间.

在此输入图像描述

任何人都可以解释为什么会这样吗?

请注意,这个问题不是这些问题的重复:

foreach%dopar%比环路慢

要么

为什么并行包慢于使用apply?

因为测试计算不是微不足道的(即50-90秒而不是1-2秒),并且因为我可以看到处理器之间没有通信(即除了计算时间之外没有返回或存储结果).

我已经附加了脚本和函数以供复制.

library(foreach); library(doParallel);library(data.table)
# functions adapted from
# http://www.bios.unc.edu/research/genomic_software/Matrix_eQTL/BLAS_Testing.html

Matrix.Multiplier <- function(Dimensions=2^12){
  # Creates a matrix of dim=Dimensions and runs multiplication
  #Dimensions=2^12
  m1 <- Dimensions; m2 <- Dimensions; n <- Dimensions;
  z1 <- runif(m1*n); dim(z1) = c(m1,n)
  z2 <- runif(m2*n); dim(z2) = c(m2,n)
  a <- proc.time()[3]
  z3 <- z1 %*% t(z2)
  b <- proc.time()[3]
  c <- b-a
  names(c) <- NULL …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach multithreading r doparallel

20
推荐指数
1
解决办法
2572
查看次数

在 R 中使用 LongituRF 包实现纵向随机森林

我有一些高维重复测量数据,我对拟合随机森林模型感兴趣,以研究此类模型的适用性和预测效用。具体来说,我正在尝试实现LongituRF包中的方法。此处详细介绍了此包背后的方法:

Capitaine, L. 等。用于高维纵向数据的随机森林。Stat Methods Med Res (2020) doi:10.1177/0962280220946080。

方便地,作者提供了一些有用的数据生成功能进行测试。所以我们有

install.packages("LongituRF")
library(LongituRF)
Run Code Online (Sandbox Code Playgroud)

让我们生成一些数据,DataLongGenerator()其中 n=样本大小,p=预测变量的数量和 G=具有时间行为的预测变量的数量。

my_data <- DataLongGenerator(n=50,p=6,G=6)
Run Code Online (Sandbox Code Playgroud)

my_data是您期望的 Y(响应向量)、X(固定效应预测变量矩阵)、Z(随机效应预测变量矩阵)、id(样本标识符向量)和时间(时间测量向量)的列表。简单地拟合随机森林模型

model <- REEMforest(X=my_data$X,Y=my_data$Y,Z=my_data$Z,time=my_data$time,
                    id=my_data$id,sto="BM",mtry=2)
Run Code Online (Sandbox Code Playgroud)

这里大约需要 50 秒,所以请耐心等待

到目前为止,一切都很好。现在我清楚这里的所有参数,除了Z. 什么 Z 时候我要在我的实际数据上拟合这个模型?

看着my_data$Z

dim(my_data$Z)
[1] 471   2
head(my_data$Z)
      [,1]      [,2]
 [1,]    1 1.1128914
 [2,]    1 1.0349287
 [3,]    1 0.7308948
 [4,]    1 1.0976203
 [5,]    1 1.3739856
 [6,]    1 0.6840415
Run Code Online (Sandbox Code Playgroud)

每行看起来像一个截距项(即 1)和从均匀分布中得出的值runif()

的文档REEMforest()表明“Z [矩阵]:包含随机效应的 q 预测变量的 Nxq 矩阵。” 使用实际数据时如何指定这个矩阵?

我的理解是,传统Z是简单地一热(二进制)组变量(例如编码 …

regression r random-forest mixed-models longitudinal

9
推荐指数
1
解决办法
429
查看次数

使用metafor包将科学记数法中的标签添加到森林图中

所以我正在使用meta.for包进行荟萃分析R.我正准备在科学期刊上发表数据,我想在我的森林地块中添加p值,但科学注释格式为

x10-04
Run Code Online (Sandbox Code Playgroud) 而不是标准

e-04

然而,争论ilabforest功能不接受expression一流的对象,但仅矢量

这是一个例子:

library(metafor)
data(dat.bcg)

## REM 
res <- rma(ai = tpos, bi = tneg, ci = cpos, di = cneg, data = dat.bcg,
           measure = "RR",
           slab = paste(author, year, sep = ", "), method = "REML")
# MADE UP PVALUES
set.seed(513)
p.vals <- runif(nrow(dat.bcg), 1e-6,0.02)

# Format pvalues so only those bellow 0.01 are scientifically notated
p.vals <- ifelse(p.vals < 0.01, 
                 format(p.vals,digits = 3,scientific …
Run Code Online (Sandbox Code Playgroud)

expression r scientific-notation r-forestplot metafor

3
推荐指数
1
解决办法
485
查看次数