【问题标题】:Randomly select increasing subset of data to see where mean levels off随机选择增加的数据子集以查看均值趋于平稳的位置
【发布时间】:2011-08-04 12:17:44
【问题描述】:

有人可以建议执行以下操作的最佳方法吗?

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

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

但是,我知道这可能很困难。因此,我正在寻找这样做的手段。

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

我知道这是蒙特卡罗测试的一种形式。我可以访问 SPSS 15、17 和 18 以及 excel。我还可以访问 minitab 15 & 16 和 amos17 并下载了“R”,但我不熟悉这些。我的经验是使用 SPSS 和 excel。我已经在 SPSS Modified from this..http://pages.infinit.net/rlevesqu/Syntax/RandomSampling/Select2CasesFromEachGroup.txt 中尝试了一些语法,但这对我来说输入子集号等仍然很耗时。

希望有人可以提供帮助。

感谢阅读。

安迪

【问题讨论】:

  • R 非常适合做这类事情。如果您看到自己将来会做更多此类事情,那么值得学习如何使用它。如果我使用 R,我会随机选取一组中的一大堆随机子集,子集的大小从小到大,并计算它们的平均值。然后我将它们全部绘制在均值/子集大小的图表上,看看它们是否收敛到任何东西。在任何真正的编程语言中实现这一点都很简单,但在类似 excel 的程序中很难做到。

标签: subset montecarlo spss sampling mean


【解决方案1】:

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

在伪代码中,该过程可能如下所示;

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 次,因为您希望能够对与每个样本量相关的误差进行某种类型的估计。

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

【讨论】:

    【解决方案2】:

    @安迪·W @奥利弗

    感谢您的建议。我设法使用以下宏找到解决方法......... http://www.spsstools.net/Syntax/Bootstrap/GetRandomSampleOfVariousSizeCalcStats.txt 但是,为此我需要复制并粘贴变量给定组的数据到一个新的数据窗口。那不是什么大问题。更进一步,任何人都知道如何: 1/ 我可以记录其他统计信息,例如 std 错误、std dev ect 等。 2/使用其他分析,最好是判别函数分析,并在新数据窗口中记录正确分类的百分比,而不是有很多输出表 3/不需要为每个组复制和粘贴变量,所以我可以运行指定 n 的宏第 1、2、3 和 4 组 x 变量的样本。

    再次感谢。

    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.
    

    【讨论】:

    • 我现在没有时间给出具体的例子,但是如果你在帮助部分查找OMS,它将给出将输出保存到新文件的示例(包括新的 .sav 数据集)。基本上任何进入输出的内容都可以保存在新的 SPSS 数据集中。
    猜你喜欢
    • 2013-07-21
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多