Произвольно выберите увеличивающееся подмножество данных, чтобы увидеть, где средние уровни выключены - PullRequest
0 голосов
/ 04 августа 2011

Может ли кто-нибудь посоветовать лучший способ сделать следующее?

У меня есть три переменные (X, Y & Z) и четыре группы (1, 2, 3 и 4). Я использовал анализ дискриминантной функции в SPSS для прогнозирования членства в группе известных сгруппированных данных для использования с будущими несгруппированными данными.

В идеале я хотел бы иметь возможность случайной выборки увеличивающегося числа подмножеств данных, чтобы увидеть, сколько наблюдений требуется для достижения желаемого правильного процента классификации.

Однако я понимаю, что это может быть сложно. Поэтому я хочу сделать это для средств.

Например, допустим, что переменная X имеет среднее значение 141 для группы 1. Это среднее значение могло быть вычислено из 2000 наблюдений. Тем не менее, это может быть случай, когда среднее произошло, скажем, при 700 наблюдениях. Я хотел бы иметь возможность рассчитать, при каком количестве наблюдений / случаев средние уровни в моих данных. Например, возможно, начиная с 10 наблюдений и повторяя это случайным образом, скажем 50 или 100 раз, затем увеличивая до 20 наблюдений .... и т. Д.

Я понимаю, что это форма тестирования Монте-Карло. У меня есть доступ к SPSS 15, 17 и 18 и Excel. У меня также есть доступ к minitab 15 и 16 и amos17, и я скачал «R», но я не знаком с ними. Мой опыт работы с SPSS и Excel. Я попробовал некоторый синтаксис в SPSS Modified из этого .. http://pages.infinit.net/rlevesqu/Syntax/RandomSampling/Select2CasesFromEachGroup.txt, но с моей стороны это все еще заняло бы много времени для ввода номера подмножества и т. Д.

Надеюсь, кто-нибудь может помочь.

Спасибо за чтение.

Andy

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Текст, на который вы ссылаетесь, является хорошим началом (вы также можете использовать команду SAMPLE в SPSS, но IMO скрипт Raynald, на который вы ссылаетесь, более гибок, когда вы думаете о построении примера таким образом).

В псевдокоде процесс может выглядеть следующим образом:

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

Вот где вступает в игру макроязык SPSS (я думаю, этот документ - хорошее введение, плюс выможете просмотреть другие ссылки на тег SPSS вики ).По сути, как только вы поймете, как нарисовать образец и вычислите желаемую статистику, вам просто нужно выяснить, как написать макрос, чтобы вы могли циклически проходить процесс (и передавать ему параметр размера выборки).Я включаю цикл 100 раз, потому что вы хотите иметь возможность делать какие-то оценки ошибок, связанных с каждым размером выборки.

Если вы приведете пример того, как вы вычисляете статистику, я могу датьпримеры того, как превратить это в макрофункцию и выполнить необходимое количество раз.

0 голосов
/ 05 августа 2011

@ Andy W @Oliver

Спасибо за ваши предложения, ребята.Мне удалось найти обходной путь, используя следующий макрос из ......... http://www.spsstools.net/Syntax/Bootstrap/GetRandomSampleOfVariousSizeCalcStats.txt Однако для этого мне нужно скопировать и вставить переменные данные для данной группы в новое окно данных.Это не большая проблема.Чтобы пойти дальше, кто-нибудь знает, как: 1 / я мог бы записать другую статистику, например, std error, std dev ect ect.2 / Использовать другой анализ, анализ идеально дискриминантных функций и записывать в новом окне данных процент правильных классификаций вместо того, чтобы иметь множество выходных таблиц 3 / Не нужно копировать и вставлять переменные для каждой группы, чтобы я мог просто запустить макрос, указав nвыборки для переменной x в группах 1, 2, 3 и 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.
...