我对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的新见。
答案 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")
)......