【发布时间】:2016-10-02 05:01:33
【问题描述】:
我正试图强制 SPSS 进行伪蒙特卡洛研究。现实世界的数据是如此离奇,以至于我无法可靠地模拟它(如果您有兴趣,它是用于测试伤害严重程度分数)。因此,我使用了一个包含大约 50 万个真实世界数据观察结果的数据集,然后基本上从越来越大的随机样本中引导结果。目标是找出假设正态性所需的组大小(在什么组大小下 t 检验和 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.
【问题讨论】:
标签: spss