Возвращаемые значения ttest в пределах по, сортировка: в Stata

У меня есть набор данных примерно с 40 переменными. Примерно половина из них - измерения, а другая половина - демографическая информация об этом наблюдении. Каждый идентификатор имеет два входа и выхода наблюдений. Я сравниваю средние значения измерений на входе и выходе.

Я написал код для запуска ttest для каждого измерения и сохранения его в текстовом файле, и это хорошо работает.

Теперь мне нужно сгруппировать по демографическим переменным.

Я использую следующие

by var1, sort: ttest var2 by stage 

stage - это переменная, которая определяет, является ли наблюдение входом или выходом. var1 - одна из демографических переменных (например, пол, курение, употребление алкоголя) и может иметь 2–4 кодированных значения.

Я пытаюсь запустить этот код в цикле и записать его в текстовый файл. Однако команды r () возвращают результаты только для последней группы, для которой был запущен ttest.

Сам код работает, так как все результаты ttest выводятся на экран результатов, однако не все результаты записываются в файл.

Например, если var1 имеет возможные значения 1, 2, 3 и 4, я получаю результаты только для группы 4.

foreach var of var  ttlchol-exvol{
foreach v of var sex dm chf diastolic copd ckd Depression {
        capture by `v',sort: ttest `var' , by(stage)
        if !_rc {
        by `v',sort: ttest `var', by(stage)
        file write myfile2 ///
            %9s "`var'" _tab %7.3f (r(N_1)) ///
            _tab %7.3f (r(N_2))      _tab %7.5f (r(p_l)) /// 
            _tab %7.5f (r(p_u))      _tab %7.5f (r(p)) /// 
            _tab %7.5f (r(se))      _tab %7.3f (r(t)) /// 
            _tab %7.3f (r(sd_1))      _tab %7.3f (r(sd_2)) /// 
            _tab %7.3f (r(mu_1))      _tab %7.3f (r(mu_2)) /// 
            _tab %7.3 (r(df_t)) ///
            _n
                }
                                                            }
                            }

Я искал более подробную информацию о том, как STATA обрабатывает by, sort: но мне не удалось найти способ фиксировать результаты для каждой итерации.

Возможно ли получить результаты для каждой итерации функции, sort: function? Если да, то как мне это сделать?


person Julia Gonzalez    schedule 28.01.2013    source источник
comment
Я бы использовал post механику вместо того, чтобы скрупулезно возиться с file операциями, записывая и затем читая. Кстати, НЕ КРИЧИТЕ STATA, просто скажите Stata.   -  person StasK    schedule 28.01.2013


Ответы (1)


Я не уверен, что это сработает, но я думаю, что это поможет, если вы запускаете каждый ttest индивидуально, а затем записываете файл после каждого ttest, вместо того, чтобы запускать bysort, который выполняет до 4 ttest за раз. Вот моя идея:

foreach var of var  ttlchol-exvol{
    foreach v of var sex dm chf diastolic copd ckd Depression {
        levelsof `v', local(coded_vals)
        foreach single_val of local coded_vals {
            capture ttest `var' if `v' == `single_val' , by(stage)
            if !_rc {
                ttest `var' if `v' == `single_val' , by(stage)
                file write myfile2 ///
                    %9s "`var', `v' = `single_val'" _tab %7.3f (r(N_1)) ///
                    _tab %7.3f (r(N_2))      _tab %7.5f (r(p_l)) /// 
                    _tab %7.5f (r(p_u))      _tab %7.5f (r(p)) /// 
                    _tab %7.5f (r(se))      _tab %7.3f (r(t)) /// 
                    _tab %7.3f (r(sd_1))      _tab %7.3f (r(sd_2)) /// 
                    _tab %7.3f (r(mu_1))      _tab %7.3f (r(mu_2)) /// 
                    _tab %7.3 (r(df_t)) ///
                    _n
             }
        }
    }
}

Здесь:

levelsof `v', local(coded_vals)

Создает локальный coded_vals, содержащий все встречающиеся значения v. Затем он выполняет итерацию по этим значениям и выполняет один тест ttest для каждого из них и записывает его в файл. Я не являюсь мастером форматирования текста, но я также добавил строку в ваш модуль записи файлов, в которой записывается, для какого кодированного значения v оно предназначено. Дайте знать, если у вас появятся вопросы.

person Kyle Heuton    schedule 28.01.2013
comment
С такой структурой данных множественные t-тесты больше не являются естественным способом даже для сравнения средних значений. Указан ANOVA или более общая линейная модель. - person Nick Cox; 28.01.2013
comment
@ Я согласен с ANOVA. Но клиент этого особо хочет. Я планирую сделать и то, и другое, и объясню, почему ANOVA верен. - person Julia Gonzalez; 28.01.2013