【问题标题】:Is it possible to set seed in the elrm package?是否可以在 elrm 包中设置种子?
【发布时间】:2017-05-01 04:28:20
【问题描述】:

我对 r 很陌生,并且正在使用 elrm 包进行精确逻辑回归 (ELR)。我希望它能够复制我的结果,所以从我的研究来看,我似乎需要为模拟设置种子。

我的数据集涉及与先前记录特征、标准化评估的风险级别以及我们的计划如何影响再犯罪率相关的刑事再犯罪。因此,TREATMENT 是我感兴趣的主要自变量,累犯率 (RECID_sum/case_sum) 是我的因变量。

我已经尝试了几种不同的方法。

首先,我跑了

set.seed(66672) 

运行后,我为 ELR 运行以下代码:

m.treatment <- elrm(formula = RECID_sum / case_sum ~ TREATMENT + FDRUGVSP +
FPROPVSP + FELEVENTVSP + RISK + street_time + TREATMENT, interest =~ TREATMENT, 
iter=100000, dataset=final, burnIn=100)

而且每次我得到不同的结果,即使在第二次运行代码之前确保再次设置种子之后也是如此。

我还尝试了以下方法:

m.treatment <- elrm(formula = RECID_sum / case_sum ~ TREATMENT + FDRUGVSP + 
FPROPVSP + FELEVENTVSP + RISK + street_time + TREATMENT, interest =~ TREATMENT, 
iter = 100000, dataset = final, burnIn = 100); set.seed(66672)

但每次运行时都会收到不同的结果。运行此代码时我没有收到任何错误。

我已经进行了一些关于为蒙特卡洛模拟设置种子的研究,但这种方法在这里似乎并不适用。似乎没有关于在 elrm 包中为 ELR 设置种子的信息。由于我对 r 的相对缺乏经验,我可能会错过它,而且我可能不知道我在寻找什么。通常我使用 SPSS,它非常笨重,不幸的是无法以有意义的方式进行 ELR。

非常感谢您提供的任何帮助,如果这是一个简单的答案,请原谅我对 r 的陌生。

【问题讨论】:

标签: r logistic-regression seeding


【解决方案1】:

不幸的是,我不这么认为。深挖C++ source code可见底层代码正在使用系统rand() function

## binomMCMC.cpp, line 31:    
double runif = (float) rand()/RAND_MAX;

这本身有点麻烦,因为 R 的内置随机数生成器(可以从 C++ 代码中访问)是generally considered to be more reliable, and faster, than Unix rand()

更糟糕的是RNG的初始化似乎是硬编码的:

## binomMCMC.cpp, line 251
srand((unsigned int)time(NULL));

我认为您在这里唯一的选择是联系维护人员 (maintainer("elrm")) ...

【讨论】:

  • 非常感谢您的帮助!
  • 虽然这种情绪受到赞赏,但 StackOverflow 弃用了 using comments to say "thank you";如果此答案有用,您可以投票(如果您有足够的声誉),并且无论如何如果它令人满意地回答了您的问题,我们鼓励您单击复选标记以接受它。
猜你喜欢
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多