Автоматически увеличивать количество случайных обращений, выбранных с помощью синтаксиса и макросов SPSS

#spss

#spss

Вопрос:

Я пытаюсь заставить SPSS провести псевдо-исследование методом Монте-Карло. Данные реального мира настолько причудливы, что я не могу их достоверно смоделировать (если вам интересно, это для тестирования показателей тяжести травм). Таким образом, я использую набор данных из примерно 0,5 миллиона наблюдений за данными реального мира, а затем в основном загружаю результаты из все более больших случайных выборок. Цель состоит в том, чтобы выяснить, какие размеры групп необходимы для принятия нормальности (при каких размерах групп t-тесты и U-тесты Манна-Уитни надежно согласуются; другими словами, когда я могу рассчитывать на Центральную предельную теорему).

Мой план состоит в том, чтобы использовать комбинацию макросов для повторения двух тестов 100 раз (но запускать 150 раз, если случайный выбор приводит к нулевому размеру группы), а затем использовать команды OMS для экспорта результатов многочисленных тестов в отдельный файл данных.

Пока все работает просто отлично, но я хотел бы добавить еще одну команду цикла, чтобы снова запустить процесс, но выбрать больше случайных обращений. Таким образом, он будет выполняться 150 раз, каждый раз выбирая 10 случайных обращений, затем, после запуска первых 150, он будет запускать еще 150, но выбирать 20 случайных обращений. Оптимально, это было бы что-то вроде этого:


Выберите 10 случайных обращений

Запустите t-тест и U-тест Манна-Уитни

Повторить 150 раз

Выберите 20 случайных обращений

Запустите t-тест и U-тест Манна-Уитни

Повторить 150 раз

(После запуска на 200 обращениях, теперь увеличится на 50)

Выберите 250 случайных обращений

Запустите t-тест и U-тест Манна-Уитни

Повторить 150 раз

Выберите 300 случайных обращений

Выберите 800 случайных обращений

Запустите t-тест и 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.
  

Ответ №1:

Неважно. Ответ был настолько очевиден, что я его полностью пропустил. Мне просто нужно было определить выбор размера выборки в макросе. * facepalm