我正试图强迫SPSS进行伪蒙特卡罗研究。现实世界的数据是如此离奇,以至于我无法可靠地模拟它(如果你感兴趣,那就是测试伤害严重性分数)。因此,我使用了大约50万个现实世界数据观测数据集,然后基本上从越来越大的随机样本中引导结果。我们的目标是找出假设正态性所需的组大小(在t-tests和Mann-Whitney U测试的哪些组大小可靠地达成一致;换句话说,何时可以依靠中心极限定理)。
我的计划是使用宏的组合重复两次测试100次(但是如果随机选择导致组大小为零,则运行150次),然后使用OMS命令导出结果对单独的数据文件进行了大量测试。
到目前为止,一切正常但是,我想添加另一个循环命令来再次运行该过程,但选择更多随机情况。因此,它会运行150次,每次选择10个随机案例,然后,在运行前150个之后,它将运行另外150个,但选择20个随机案例。最理想的是,它会是这样的:
选择10个随机案例
运行t检验和Mann-Whitney U检验
重复150次
选择20个随机案例
运行t检验和Mann-Whitney U检验
重复150次
...
(运行200个案例后,现在增加50个)
选择250个随机案例
运行t检验和Mann-Whitney U检验
重复150次
选择300个随机案例
...
选择800个随机案例
运行t检验和Mann-Whitney U检验
重复150次
(运行800例后停止)
使用OMS保存所有这些结果
以下语法中的所有内容都能正常运行,除了一个小问题,我无法弄清楚如何增加随机样本的大小,我宁愿不要手动执行。
即使我必须手动执行,是否有办法将最新结果附加到现有文件而不是替换现有文件?
DEFINE !repeater().
!DO !i=1 !TO 150.
*repeat the below processes 150 times
*select a random sample from the dataset
DATASET ACTIVATE DataSet1.
USE ALL.
do if $casenum=1.
compute #s_$_1=10.
compute #s_$_2=565518.
* 565518 is the total number of cases
end if.
do if #s_$_2 > 0.
compute filter_$=uniform(1)* #s_$_2 < #s_$_1.
compute #s_$_1=#s_$_1 - filter_$.
compute #s_$_2=#s_$_2 - 1.
else.
compute filter_$=0.
end if.
VARIABLE LABELS filter_$ 'x random cases (SAMPLE)'.
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.
*run a non-parametric test
NPAR TESTS
/M-W= issloc BY TwoGroups(0 1)
/MISSING ANALYSIS.
*run a parametric test
T-TEST GROUPS=TwoGroups(0 1)
/MISSING=ANALYSIS
/VARIABLES=issloc
/CRITERIA=CI(.95).
!DOEND.
!ENDDEFINE.
*use OMS to extract the reported descriptives and results from the viewer
*and save them to a file
OMS /SELECT TABLES
/DESTINATION FORMAT = SAV OUTFILE = 'folder/folder/OMS file.sav'
/IF SUBTYPES=['Mann Whitney Ranks' 'Mann Whitney Test Statistics' 'Group Statistics' 'Independent Samples Test']
/COLUMNS SEQUENCE = [RALL CALL LALL].
!repeater.
OMSEND.
答案 0 :(得分:0)
没关系。答案是如此明显,我完全错过了。我只需要在宏中定义样本大小选择。 *捂脸