是否可以在elrm包中设置种子?

时间:2016-12-15 14:17:24

标签: r logistic-regression seeding

我对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的新见。

1 个答案:

答案 0 :(得分:0)

不幸的是,我不这么认为。深入研究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"))......