- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此练习的目的是创建营养摄入值的人口分布。之前的数据中有重复的度量,这些已被删除,因此每一行都是数据框中的唯一人。
我有这个代码,当使用少量我的数据框行进行测试时,它工作得很好。对于所有 7135 行,它非常慢。我试图计时,但当我机器上的运行时间为 15 小时时,它崩溃了。 system.time
结果是 Timing stopped at: 55625.08 2985.39 58673.87
.
我将不胜感激任何关于加速模拟的评论:
Male.MC <-c()
for (j in 1:100) {
for (i in 1:nrow(Male.Distrib)) {
u2 <- Male.Distrib$stddev_u2[i] * rnorm(1, mean = 0, sd = 1)
mc_bca <- Male.Distrib$FixedEff[i] + u2
temp <- Lambda.Value*mc_bca+1
ginv_a <- temp^(1/Lambda.Value)
d2ginv_a <- max(0,(1-Lambda.Value)*temp^(1/Lambda.Value-2))
mc_amount <- ginv_a + d2ginv_a * Male.Resid.Var / 2
z <- data.frame(
RespondentID = Male.Distrib$RespondentID[i],
Subgroup = Male.Distrib$Subgroup[i],
mc_amount = mc_amount,
IndvWeight = Male.Distrib$INDWTS[i]/100
)
Male.MC <- as.data.frame(rbind(Male.MC,z))
}
}
for
循环,因为我读到它们在
R
中效率低下但我不太了解基于
apply
的选项使用它们作为替代。
R
正在独立机器上运行,通常这将是运行 Windows 7 变体的标准戴尔型台式机,如果这会影响有关如何更改代码的建议。
Lambda.Value
=0.4 和
Male.Resid.Var
=12.1029420429778 和
Male.Distrib$stddev_u2
是所有观测值的常数值。
str(Male.Distrib)
是
'data.frame': 7135 obs. of 14 variables:
$ RndmEff : num 1.34 -5.86 -3.65 2.7 3.53 ...
$ RespondentID: num 9966 9967 9970 9972 9974 ...
$ Subgroup : Ord.factor w/ 6 levels "3"<"4"<"5"<"6"<..: 4 3 2 4 1 4 2 5 1 2 ...
$ RespondentID: int 9966 9967 9970 9972 9974 9976 9978 9979 9982 9993 ...
$ Replicates : num 41067 2322 17434 21723 375 ...
$ IntakeAmt : num 33.45 2.53 9.58 43.34 55.66 ...
$ RACE : int 2 3 2 2 3 2 2 2 2 1 ...
$ INDWTS : num 41067 2322 17434 21723 375 ...
$ TOTWTS : num 1.21e+08 1.21e+08 1.21e+08 1.21e+08 1.21e+08 ...
$ GRPWTS : num 41657878 22715139 10520535 41657878 10791729 ...
$ NUMSUBJECTS : int 1466 1100 1424 1466 1061 1466 1424 1252 1061 1424 ...
$ TOTSUBJECTS : int 7135 7135 7135 7135 7135 7135 7135 7135 7135 7135 ...
$ FixedEff : num 6.09 6.76 7.08 6.09 6.18 ...
$ stddev_u2 : num 2.65 2.65 2.65 2.65 2.65 ...
head(Male.Distrib)
是
RndmEff RespondentID Subgroup RespondentID Replicates IntakeAmt RACE INDWTS TOTWTS GRPWTS NUMSUBJECTS TOTSUBJECTS FixedEff stddev_u2
1 1.343753 9966 6 9966 41067 33.449808 2 41067 120622201 41657878 1466 7135 6.089918 2.645938
2 -5.856516 9967 5 9967 2322 2.533528 3 2322 120622201 22715139 1100 7135 6.755664 2.645938
3 -3.648339 9970 4 9970 17434 9.575439 2 17434 120622201 10520535 1424 7135 7.079757 2.645938
4 2.697533 9972 6 9972 21723 43.340180 2 21723 120622201 41657878 1466 7135 6.089918 2.645938
5 3.531878 9974 3 9974 375 55.660607 3 375 120622201 10791729 1061 7135 6.176319 2.645938
6 6.627767 9976 6 9976 48889 91.480049 2 48889 120622201 41657878 1466 7135 6.089918 2.645938
NaN
的函数行结果是
d2ginv_a <- max(0,(1-Lambda.Value)*temp^(1/Lambda.Value-2))
temp
导致 NaN 问题的值。我在一些测试中错过了这一点(在注释掉函数以便只返回
temp
值,并调用我的结果数据框
Test
之后)。此代码重现了
NaN
问题:
> min(Test)
[1] -2.103819
> min(Test)^(1/Lambda.Value)
[1] NaN
> -2.103819^(1/Lambda.Value)
[1] -6.419792
rnorm
结果到数据帧,这确实减慢了速度,以这种方式创建它们然后使用
cbind
真的很快。
Male.Distrib
是我的 7135 次观察的完整数据框,但此代码应该适用于我之前发布的缩减版本(未测试)。
Min_bca <- ((.5*min(Male.AddSugar$IntakeAmt))^Lambda.Value-1)/Lambda.Value
Test <- Male.Distrib[rep(seq.int(1,nrow(Male.Distrib)), 100), 1:ncol(Male.Distrib)]
RnormOutput <- rnorm(nrow(Test),0,1)
Male.Final <- cbind(Test,RnormOutput)
Male.Final$mc_bca <- Male.Final$FixedEff + (Male.Final$stddev_u2 * Male.Final$RnormOutput)
Male.Final$temp <- ifelse(Lambda.Value*Male.Final$mc_bca+1 > Lambda.Value*Min_bca+1,
Lambda.Value*Male.Final$mc_bca+1, Lambda.Value*Min_bca+1)
Male.Final$ginv_a <- Male.Final$temp^(1/Lambda.Value)
Male.Final$d2ginv_a <- ifelse(0 > (1-Lambda.Value)*Male.Final$temp^(1/Lambda.Value-2),
0, (1-Lambda.Value)*Male.Final$temp^(1/Lambda.Value-2))
Male.Final$mc_amount <- Male.Final$ginv_a + Male.Final$d2ginv_a * Male.Resid.Var / 2
max()
我尝试的方式,因为它返回列中的最大值,而我想要两个值的最大值。 ifelse
声明是要执行的替换。 最佳答案
这是一种解决两个最大速度问题的方法:
i
),而是一次计算它们。 j
),而是使用 replicate
,这是一个简化的 apply
为此目的。 Male.Distrib = read.table('MaleDistrib.txt', check.names=F)
getMC <- function(df, Lambda.Value=0.4, Male.Resid.Var=12.1029420429778) {
u2 <- df$stddev_u2 * rnorm(nrow(df), mean = 0, sd = 1)
mc_bca <- df$FixedEff + u2
temp <- Lambda.Value*mc_bca+1
ginv_a <- temp^(1/Lambda.Value)
d2ginv_a <- max(0,(1-Lambda.Value)*temp^(1/Lambda.Value-2))
mc_amount <- ginv_a + d2ginv_a * Male.Resid.Var / 2
mc_amount
}
> replicate(10, getMC(Male.Distrib))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 36.72374 44.491777 55.19637 23.53442 23.260609 49.56022 31.90657 25.26383 25.31197 20.58857
[2,] 29.56115 18.593496 57.84550 22.01581 22.906528 22.15470 29.38923 51.38825 13.45865 21.47531
[3,] 61.27075 10.140378 75.64172 28.10286 9.652907 49.25729 23.82104 31.77349 16.24840 78.02267
[4,] 49.42798 22.326136 33.87446 14.00084 25.107143 25.75241 30.20490 33.14770 62.86563 27.33652
[5,] 53.45546 9.673162 22.66676 38.76392 30.786100 23.42267 28.40211 35.95015 43.75506 58.83676
[6,] 34.72440 23.786004 63.57919 8.08238 12.636745 34.11844 14.88339 21.93766 44.53451 51.12331
关于r - 如何在 R 中为 Monte Carlo 创建更有效的模拟循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9009143/
我最近一直在研究强化学习。为此,我一直在阅读萨顿的名著,但还有一些我还没有完全理解的地方。 对于蒙特卡洛学习,我们可以在首次访问和每次访问算法之间进行选择,并且可以证明两者都渐进地收敛到正确的解决方案
我编写了一个 C++ 程序,用于通过“将随机点放入四分之一圆中并计算它们等”来计算圆周率。现在我的程序在我看来有点慢,我想过一些改进来加快它的速度(源代码在下面)。 我的第一个想法是使用 OpenMP
我目前正在开发一个小程序,我想根据 cultureinfo 清楚地显示日期和时间,如下所示:2017 年 3 月 3 日星期日上午 7:46:57 但是,我希望可以选择任何国家,并根据他们写日期的方式
基本上,这个问题模拟了以下内容: 有一个装有 50 个绿球和 50 个红球的瓮。 我可以从 jar 里取出球,无需更换,规则如下:每取出一个红球,我将损失一美元,每取出一个绿色球,我将获得一美元。 我
更新: 我的编译命令是ghc -O2 Montecarlo.hs。我的随机版本是random-1.1,ghc版本是8.6.4,我的系统是macOS Big Sur 11.1(Intel芯片)。我用来测
我正在尝试使用组标识符 g 在 (y1,...,yN) 上对 ANOVA 进行排列检验.我应该使用 (1)/(g-1) (muhatj - muhat)^2 的总和作为测试统计量,而 muhatj 是
想象一下我递给你一个上面印有“-1”的乒乓球。然后我告诉你从标有“第一袋”的袋子中取出另一个乒乓球。这个袋子里有 30,000 个球,有的标有“-1”,有的标有“0”,有的标有“+1”。无论您抽到哪个
我正在尝试运行一个代码,通过使用蒙特卡罗积分对一维高斯分布方程进行积分来输出高斯分布。我正在尝试使用 mcint 模块。我定义了 mcint 模块中使用的高斯方程和采样器函数。我不确定 mcint 函
此练习的目的是创建营养摄入值的人口分布。之前的数据中有重复的度量,这些已被删除,因此每一行都是数据框中的唯一人。 我有这个代码,当使用少量我的数据框行进行测试时,它工作得很好。对于所有 7135 行,
我已经为 Hold'em Poker 编写了一个平衡器作为一个业余项目。它工作正常,但还有一件事我不满意:在整个模拟手的过程中,评估手的过程大约占用了35%的时间。与迭代和克隆大型数组等其他必须完成的
考虑从 [0,T) 开始按递增顺序给出的点 Y。我们要将这些点视为位于圆周 T 的圆上。现在考虑来自 [0,T) 的点 X 也位于圆周 T 的圆上。 我们说 X 和 Y 之间的距离是 X 中的每个点与
我目前正在使用 python 和 RPY 来使用 R 中的功能。 我如何使用 R 库生成蒙特卡罗样本,以尊重 2 个变量之间的相关性.. 例如 如果变量 A 和 B 具有 85% (0.85) 的相关
我正在尝试用 Python 实现一个简单的蒙特卡洛(我对此还很陌生)。来自 C 我可能走的是最错误的道路,因为我的代码对于我所要求的来说太慢了:对于 60 个 3d 粒子和周期性边界条件(PBC),我
我已经使用 SAS 很长时间了,现在我想用 R 翻译我的代码。我需要帮助来执行以下操作: 生成多个引导样本 对每个样本运行线性回归模型 通过复制样本将参数存储在新数据集中 为了更清晰,我编辑了这段代码
为了近似 Pi 的值,请考虑使用随机值填充数组并测试是否包含单位圆的随机方法, import random as rd import numpy as np def r(_): return rd.r
在我发现的所有计算 pi 的蒙特卡洛示例代码中,x 和 y 都是在 0 和 1 之间随机生成的。例如,示例代码如下所示 Ran rdm(time(NULL)); double x, y;
从这个数据集中,我有我的聚类分析分配的所有患者样本(总共 69 行),并且聚类被标记为第 3 列“Cluster.assigned”,总共 8 个聚类,每个聚类大小不等。其他列包含变量,其中我想测试数
我正在尝试在 Pytorch 上使用 Mc Dropout 实现贝叶斯 CNN,主要思想是通过在测试时应用 dropout 并运行多次前向传递,您可以获得来自各种不同模型的预测。我需要获得不确定性,有
这是我想用 R 做的算法: 模拟来自 ARIMA 的 10 个时间序列数据集模型通arima.sim()功能 将系列拆分为可能的子系列 2s , 3s , 4s , 5s , 6s , 7s , 8s
下面的 MWE 显示了两种对相同 2D 核密度估计进行积分的方法,这些估计是为 this data 获得的。使用 stats.gaussian_kde()功能。 对所有 (x, y) 执行集成低于阈值
我是一名优秀的程序员,十分优秀!