我正在尝试编写模拟程序。但是,因为我是Stata的新手,所以我一步一步地慢慢地做每一步,以便了解Stata的工作原理。一旦我了解了有关Stata的更多信息,我们将进行调整。
我们的想法是创建一个向量/数字列表(某些特定的和其他随机的),并将该向量作为参数传递给mvrs
命令。然后,我将运行模拟以找到具有较小AIC的结的模式。更多信息可以在Spika等人的文章中找到。 BMC Cancer(2017)论文。
感谢StackOverflow社区,我能够生成随机数(请参阅question)。但我之后导入Excel文件时遇到问题。 有没有办法保持随机数创建并打开Excel文件?当我尝试运行代码时,我尝试导入Excel文件后得到no; data in memory would be lost r(4);
。
这是我到目前为止的代码:
* Create list of specified knots
local spec_knots 0.5 1 2 84.5
* Create random knots between 3 and 50
set obs 3
gen vals = floor(3 + 47 * runiform())
* Save levelsof vals and save to local to join specified and random knots
levelsof vals, local(values)
* Join specified and random knots to include in the mvrs command
local list_knots `spec_knots' `values'
import excel file, sheet("Analysis") firstrow
mvrs glm deaths age, family(poisson) exposure(population) all scale(1) alpha(1) knots(`list_knots')
我的计划是将上述代码包含在程序中,然后运行模拟。这些方面的东西:
simulate aic=aic bic=bic dev=dev, reps(10) nodots: knots_location
在程序结束前使用scalar aic = e(aic)
。
任何保持随机数和导入文件的指针都表示赞赏。
答案 0 :(得分:1)
如果您首先导入Excel文件,那么您可以稍后从Mata获取三个随机数,而无需创建任何新变量。或者你可以反过来做。
import excel file, sheet("Analysis") firstrow
* Create list of specified knots
local spec_knots 0.5 1 2 84.5
* Create random knots between 3 and 50
mata : st_local("values", invtokens(strofreal(floor(3 :+ 47 * runiform(1,3)))))
* Join specified and random knots to include in the mvrs command
local list_knots `spec_knots' `values'
mvrs glm deaths age, family(poisson) exposure(population) all scale(1) alpha(1) knots(`list_knots'
或者,只要您知道您的文件至少有3个观察结果,您的程序就可以启动
import excel file, sheet("Analysis") firstrow
* Create list of specified knots
local spec_knots 0.5 1 2 84.5
* Create random knots between 3 and 50
gen vals = floor(3 + 47 * runiform()) in 1/3
levelsof vals, local(values)
* Join specified and random knots to include in the mvrs command
local list_knots `spec_knots' `values'
您的随机数中有2个甚至3个重合的可能性很小。