随机选择增加的数据子集以查看平均水平偏离的位置

时间:2011-08-04 12:17:45

标签: subset montecarlo spss sampling mean

有人可以建议您采取以下最佳方式吗?

我有三个变量(X,Y和Z)和四个组(1,2,3和4)。我一直在SPSS中使用判别函数分析来预测已知分组数据的组成员资格,以便与未来的未分组数据一起使用。

理想情况下,我希望能够随机抽取越来越多的数据子集,以查看达到所需正确分类百分比所需的观察次数。

但是,我知道这可能很难。因此,我希望这样做。

例如,假设变量X对于组1的平均值为141.这个平均值可能是根据2000次观察得出的。然而,情况可能是平均值发生在700次观察时。我希望能够计算出我的数据中平均水平的观察数/案例数。例如,也许从10个观察开始,然后重复这个随机说50或100次,然后增加到20个观察......等等。

我知道这是monte carlo测试的一种形式。我可以访问SPSS 15,17和18以及excel。我也可以访问minitab 15& 16和amos17已下载“R”但我不熟悉这些。我的经验是SPSS和excel。我已经尝试了一些SPSS中的语法修改了这个..http://pages.infinit.net/rlevesqu/Syntax/RandomSampling/Select2CasesFromEachGroup.txt但是我输入子集号等等仍然非常耗费时间。

希望有人可以提供帮助。

感谢阅读。

安迪

2 个答案:

答案 0 :(得分:1)

您链接的文本是一个良好的开端(您也可以在SPSS中使用SAMPLE命令,但是当您考虑以这种方式构建示例时,IMO与您链接的Raynald脚本会更灵活。)< / p>

在伪代码中,过程可能看起来像;

do n for sample size (a to b)
    loop 100 times
        draw sample size n
        compute (& save) statistics

这是SPSS的宏语言发挥作用的地方(我认为this document是一个很好的介绍,另外你可以检查SPSS tag wiki上的其他引用)。基本上,一旦你弄清楚如何绘制样本并计算你想要的统计数据,你只需要弄清楚如何编写一个宏,这样你就可以遍历整个过程(并传递样本大小参数)。我将循环包括100次,因为您希望能够对与每个样本大小相关的错误进行某种类型的估计。

如果您举例说明如何计算统计数据,我可以举例说明如何将其转换为宏函数并循环所需的次数。

答案 1 :(得分:0)

@Andy W @Oliver

感谢您的建议。我设法找到一个使用以下宏的工作......... http://www.spsstools.net/Syntax/Bootstrap/GetRandomSampleOfVariousSizeCalcStats.txt但是,为此,我需要复制并粘贴变量给定组的数据进入新数据窗口。这不是一个问题。为了更进一步,任何人都知道如何:1 /我可以记录其他统计数据,例如标准错误,标准设备等。 2 /使用其他分析,理想的判别函数分析并在新数据窗口中记录正确分类的百分比,而不是拥有大量输出表3 /不需要为每个组复制和粘贴变量,因此我可以运行指定n的宏第1组,第2组,第3组和第1组的x变量样本4。

再次感谢。

DEFINE !sample(myvar !TOKENS(1) 
        /nbsampl !TOKENS(1)
        /size !CMDEND).
* myvar = the variable of interest (here we want the mean of salary)
* nbsampl = number of samples.
* size = the size of each samples.

!LET !first='1'
!DO !ss !IN (!size)
!DO !count = 1 !TO !nbsampl.

GET FILE='c:\Program Files\SPSS\employee data.sav'.

COMPUTE draw=uniform(1).
SORT CASES BY draw.
N OF CASES !ss.

COMPUTE samplenb=!count. 
COMPUTE ss=!ss.

AGGREGATE
  /OUTFILE=*
  /BREAK=samplenb
  /!myvar = MEAN(!myvar) /ss=FIRST(ss).

!IF (!first !NE '1') !THEN
ADD FILES /FILE=*  /FILE='c:\temp\sample.sav'.
!IFEND
SAVE OUTFILE='c:\temp\sample.sav'.
!LET !first='0'

!DOEND. 
!DOEND. 

VARIABLE LABEL ss 'Sample size'.
EXAMINE
  VARIABLES=salary BY ss /PLOT=BOXPLOT/STATISTICS=NONE/NOTOTAL
  /MISSING=REPORT.

!ENDDEFINE.
* ----------------END OF MACRO ----------------------------------------------.


* Call macro (parameters are number of samples (here 20) and sizes of sample (here 5, 10,15,30,50). 
* Thus 20 samples of size 5.
* Thus 20 samples of size 10, etc.
!sample myvar=salary nbsampl=20 size= 5 10 15 30 50.