Занятие 7. Регрессионный анализ в пакете STATA. Создать папку: c:\roshchina\sem_stata Загрузить туда файлы и все раззиповать: itog6zan_ind_j_5_15_labour – данные – итоги прошлого занятия (для завершения 6 занятия) ind_j_5_15_add_var – дополнительные переменные для факторного и кластерного анализа синтаксис 6 занятия StatTransfer9 – программа для преобразования данных к нужному формату (на занятии не нужно) stata_outreg.zip – полезное дополнение для STATA ind_j_5_15_regress.dta- результат прошлого занятия в формате для программы STATA prog_stata.txt - синтаксис в формате TXT do_zanat7.do – синтаксис STATA - учебник С.Коленникова Задание 18. ОСНОВЫ РАБОТЫ С ПРОГРАММОЙ STATA. Сайт со ссылками на ресурсы для STATA : http://www.ats.ucla.edu/stat/stata/ Простой учебник по регрессионному анализу и STATA (6-8 версии) Коленников С. Прикладной эконометрический анализ в статистическом пакете Stata. РЭШ, 2000-2003. Основные приемы работы с пакетом, описанные ниже, приводятся на основе этого учебника. 1.1. Установка и запуск STATA Обычно Stata устанавливается в каталог c:/stata, если при установке не было явно указано иное. Подавляющее большинство собственно статистических задач выполняется внешними программами с расширением .ado, находящимися в каталоге c:/stata/ado и его подкаталогах. Рекомендуется подгрузить в программу полезный модуль outreg (см. в загружаемых программах). При запуске Stata устанавливает ряд внутренних параметров, таких, как объем выделяемой памяти, и некоторые другие (о них можно узнать в [R] limits или в подсказке help limits). Практически наверняка вам придется менять следующие установки: set memory объем памяти [kjm] set matsize число Объем памяти, выделяемой операционной системой для Stata. Чтобы отвести 150 мегабайт, надо напечатать: set memory 150m . Максимальный размер матрицы, которую Stata сможет обработать. По умолчанию устанавливается 10. Максимальный размер - 800. Этот параметр влияет на размерность статистических моделей, которые Stata будет в состоянии оценить. set matsize 200 1.2. интерфейс и команды STATA Stata использует в работе несколько окон: окно ввода команд (Stata Command), окно вывода результатов (Stata Results), окно истории, или предыдущих команд (Review), окно переменных (Variables), окно поиска и помощи (Help), графический экран (Graph), окно файла-протокола, или log-файла (Log; в 7-й версии его функцию выполняет окно Viewer). Можно также вызвать окна просмотра данных (Stata Browser) или редактирования данных (Stata Editor), а также редактор программ (Stata Do-file Editor). 1 Переключаться между окнами можно, тыкаясь мышкой в любое место на нужном окне, либо через меню Windows. В Stata для поиска нужной информации проще всего воспользоваться меню Help, в котором имеются подменю Search (поиск по ключевым словам, например, Durbin Watson statistic ) и Stata Command (файл помощи по конкретной команде Stata). Команды можно генерировать при помощи меню (они автоматически сохраняются в окне COMMAND), набирать вручную или при помощи команды «копировать-вставить». Есть также специальные исполняемые файлы синтаксиса – можно запустить целый файл, а не отдельную команду. Команды Stata, как правило, имеют следующий вид: команда [список переменных] [if условие] [in диапазон] [using имя файла] [[веса]], [опции] Список переменных может состоять из одной переменной (например, если нужно получить сводные статистики или построить гистограмму), из двух (расчет корреляций или построение диаграммы рассеяния) и более (регрессии, графики со многими переменными). Условия if и in выделяют те наблюдения, для которых необходимо провести анализ (см. ниже параграф 3.6). Если команда предполагает работу с файлами (чтение, объединение и т.п.), то имя файла, с которым необходимо провести указанные действия, передается в конструкции using. Если разным наблюдениям необходимо придать разные веса, то для этого используется конструкция типа [weight=выражение] (см. help weights; квадратные скобки являются элементами синтаксиса и обязательны). Многие команды Stata позволяют ограничить свое действие на определенные наблюдения. Делается это с помощью условных модификаторов [if условие] [in диапазон]. Условие, задаемое под if это логическое выражение, в котором могут использоваться операторы отношений > ("больше"), < ("меньше"), >= ("больше или равно"), <= ("меньше или равно"), = = ("равно", двойной знак использован для того, чтобы не спутать с операцией присвоения), | = или ~ = ("не равно"); логические операции & ("и"), | ("или"), | или ~ ("не"), указание на текущее наблюдение _n и на последнее _N, обычные операции и функции, а также скобки для указания приоритета. in указывает диапазон наблюдений вида начало/конец, где в качестве конца диапазона может быть использовано последнее наблюдение, обозначаемое латинской "эл"( l) или как ..1. 2 1.3. Начало работы: загрузка файлов. Данные для работы в пакете имеют расширение .dta ; файлы других форматов (Excel, SAS, SPSS, Statistica и т.п.) необходимо предварительно сохранить в виде текста (с разделением данных запятыми, табуляциями, или в фиксированном формате), либо воспользоваться внешними средствами для конвертации данных. В комплект поставки Professional Stata входит чрезвычайно полезная Windows-утилита StatTransfer ( http://www.stattransfer.com ), позволяющая преобразовывать данные между двумя десятками различных форматов. Данные лучше положить в папку, в пути к которой нет РУССКИХ букв – программа плохо их читает в синтаксисе. Открыть программу. В окне команд последовательно набрать и выполнить команды (команды можно копировать и вставлять в нужное окно): set memory 150m . set matsize 200 set more off Последняя команда - отключение построчного вывода результатов. Полезная команда, показывает возможности программы: help limits Для загрузки данных воспользоваться командой меню: FILE OPEN и в броузере найти нужный файл с расширением .dta. Появится примерно такая команда: use "C:\...\ind_j_5_15_regress.dta", clear Для перехода в окно данных (просмотр и редактирование) можно использовать соответствующую иконку. В меню DATA есть возможность генерировать команды для склейки файлов (добавление переменных или кейсов). Для сохранения трансформированных данных можно использовать команду или значок «сохранить», при этом генерируется команда: save "C:\...\sem_stata\ind_j_5_15_regress.dta", replace 1.4. Редактирование переменных. В меню DATA есть возможность редактировать метки и имена переменных, удалять и сохранять переменные, удалять и выбирать кейсы, а также генерировать новые переменные (например, на основе старых – создавать логарифмы и т.д.) и перекодировать переменные. Некоторые наиболее часто используемые команды: generate [тип] имя переменной = выражение [if условие] [in диапазон] Создать новую переменную, возможно, указанного типа, и присвоить ей значение выражения. В выражение могут входить числа, переменные, фигурировать арифметические операции, функции (математические, статистические, строковые и пр.), логические условия (которые вычисляются как 1 - истина и 0 - ложь) и пропущенные значения. xi специальные выражения xi: команда Stata со специальными выражениями Позволяет создать набор бинарных (0/1) переменных из категорийной, или выполнить указанную команду, включив в список переменных создаваемый на ходу набор бинарных переменных. Одна из категорий берется как базовая, и для нее бинарная переменная не создается, т.е. корректно отрабатывается проблема статистической связи между получаемыми бинарными переменными. Специальные выражения имеют виды: i.категорийная переменная i.категорийная переменная *i.категорийная переменная (перемножение переменных) i.категорийная переменная *непрерывная переменная. Например, это может быть команда регрессии типа: xi: reg y x1 x2 i.x3 Тогда категорийная независимая переменная х3 будет разложена на дамми. recode 3 Изменяет значения переменной. Актуально для перекодировки категорийной переменной или для соединения нескольких категорий в одну. значений replace имя переменной =выражение [if условие] [in диапазон] Заменить значения уже существующей переменной. rename имя переменной новое имя Переименовать переменную. drop if условие | in диапазон Удалить наблюдения, удовлетворяющие указанным условиям. drop переменные Удалить указанные переменные. sort переменные Отсортировать данные по указанным переменным. describe [ переменные | using имя файла], [short] Вывести описание данных и переменных: формат, метки и т. п. Эта команда показывает также количество наблюдений и переменных, изменялись ли данные с момента последнего сохранения, по каким переменным отсортированы наблюдения. Можно указать файл, находящийся на жестком диске. label Приписать метки к данным или переменным. label variable имя переменной "текст" создает метку переменной, которая выводится командой describe и видна в окне переменных. Можно также задать метку для файла данных label data (информация о файле данных хранится в сопровождающем его объекте _dta). Эта метка будет выводиться при исполнении use и describe. Можно также задать метки для отдельных значений дискретной переменной через label define и label values. Признаком хорошего стиля работы с данными является придание меток создаваемым переменным: после любой команды generate или egen должно идти label variable . 1.5. Окно результатов. Описательные статистики и многомерный анализ. Для начала анализа нужно создать (или открыть) файл результатов. (Возможно также непосредственно копировать и переносить в эксель, например, результаты из окна RESULTS). Из меню: FILE LOG BEGIN. При этом получится команды примерно такая: log using имя файла, [ append | replace ] Эта команда записывает все, что Stata выводит в окно результатов, в указанный файл (добавляя либо перезаписывая этот файл, в соответствии с опциями append либо replace, если такой файл существует). log off временно прекращает запись в файл, log on возобновляет запись в файл, log close прекращает запись и закрывает файл. log on | off |close Команды, связанные с log-файлом, продублированы на панели инструментов Stata кнопочкой со светофором. Log-файлы лучше всего печатать непосредственно из Stata, поскольку Stata умеет автоматически приукрашивать текст (выделяя полужирным шрифтом команды, проставляя даты и т.п.). В Stata 7 есть два вида log-файлов: командный (в который пишутся только команды, отдаваемые пользователем, что дает возможность быстро конвертировать результаты работы в программу) и полный (в который пишутся как команды, так и результаты их исполнения). Запись команд в командный log-файл задается конструкцией cmdlog using имя файла. Есть также недокументированные способы записи log-файлов в форматах HTML и texman - log html имя файла и log texman имя файла. Есть еще один вариант сохранения статистических результатов исследований прекрасная пользовательская команда outreg (Gallup 2001), которая записывает результаты регрессий в отдельный текстовый файл в соответствии с принятыми в статистической и эконометрической литературе обозначениями: столбцы коэффициентов со стандартными ошибками в скобках, число наблюдений, статистика R2 и прочие статистики. Этот модуль 4 требует отдельной установки, см. stb, help stb. Самую свежую версию можно найти на сайте архива SSC-IDEAS, см. параграф 3.16. Возможности для генерирования команд содержатся в меню в команде STATISTICS. Простейшие команды – распределения и таблицы. Можно также писать команды вручную или при помощи «копировать – вставить». Регрессионный анализ. Веб-учебник – регрессионный анализ на STATА: http://www.ats.ucla.edu/stat/stata/webbooks/reg/default.htm Описание использования модели простой и множественной регрессии: http://www.ats.ucla.edu/stat/stata/webbooks/reg/chapter1/statareg1.htm Диагностика регрессий (мультилоллинеарность, гетероскедастичность, нормальность остатков и т.д.) http://www.ats.ucla.edu/stat/stata/webbooks/reg/chapter1/statareg1.htm Detecting Unusual and Influential Data o predict -- used to create predicted values, residuals, and measures of influence. o rvpplot --- graphs a residual-versus-predictor plot. o rvfplot -- graphs residual-versus-fitted plot. o lvr2plot -- graphs a leverage-versus-squared-residual plot. o dfbeta -- calculates DFBETAs for all the independent variables in the linear model. o avplot -- graphs an added-variable plot, a.k.a. partial regression plot. Tests for Normality of Residuals o kdensity -- produces kernel density plot with normal distribution overlayed. o pnorm -- graphs a standardized normal probability (P-P) plot. o qnorm --- plots the quantiles of varname against the quantiles of a normal distribution. o iqr -- resistant normality check and outlier identification. o swilk -- performs the Shapiro-Wilk W test for normality. Tests for Heteroscedasticity o rvfplot -- graphs residual-versus-fitted plot. o hettest -- performs Cook and Weisberg test for heteroscedasticity. o whitetst -- computes the White general test for Heteroscedasticity. Tests for Multicollinearity o vif -- calculates the variance inflation factor for the independent variables in the linear model. o collin -- calculates the variance inflation factor and other multicollinearity diagnostics Tests for Non-Linearity o acprplot -- graphs an augmented component-plus-residual plot. o cprplot --- graphs component-plus-residual plot, a.k.a. residual plot. Tests for Model Specification o linktest -- performs a link test for model specification. o ovtest -- performs regression specification error test (RESET) for omitted variables. Повторение моделей, выполненных в SPSS на занятии 6. Обычная множественная регрессия для количественной переменной. regress зависимая переменная объясняющие переменные [if условие] [in диапазон], robust noconst cluster( групповая переменная ) Оценивание линейной регрессии зависимой переменной на объясняющие. Выводятся основные результаты оценивания: количество наблюдений, таблица дисперсионного анализа, 5 статистики F, R2, R2 adj , а также таблица оценок коэффициентов, стандартных отклонений оценок, t-статистик для гипотезы k = 0 и доверительных интервалов (см. Коленников, с. 49 с примером регрессии). Опция robust задает оценку ковариационной матрицы оценок коэффициентов в форме Уайта (Коленников 2.29), учитывающей гетероскедастичность. Опция cluster указывает, что ковариационная матрица должна учитывать группировку наблюдений (как в кластерных выборочных обследованиях). Опция noconst указывает, что в модель, оценивамую Stata, не следует включать константу (как это делается по умолчанию). После команды regress можно получать прогнозные значения, остатки и строить диагностические переменные командой predict или проводить диагностику регрессии, не прогоняя регрессию заново. Введение в эту команду предоставляется уроком tutorial regress . Команды оценивания статистических моделей в Stata имеют много общего. В частности, после всех таких команд можно отдавать команду predict, которая будет строить значения тех или иных выражений, связанных с результатами оценивания; получать матрицы самих оценок параметров (матрица-столбец e(b)) и их ковариационную матрицу (e(V)); строить тесты на линейные ( test) и нелинейные (testnl, с использованием дельта-метода для получения ковариационной матрицы нелинейных функций оценок) комбинации параметров, и т.д. ОЦЕНИМ РЕГРЕССИЮ для модели МИНЦЕРА. Команда: regress stavka_zp_ln vo sso age age_2 nfm b_v_reg lg_regz round6 round7 round8 round9 round10 round11 round12 round13 round14 round15 sever centr volga kavkaz ural zapsib dvost gorod selo male Вариант команды с использованием встроенной возможности генерирования дамми: xi: regress stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male Команда для проверки на мультиколлинеарность: We can use the vif command after the regression to check for multicollinearity. vif stands for variance inflation factor. As a rule of thumb, a variable whose VIF values are greater than 10 may merit further investigation. Tolerance, defined as 1/VIF, is used by many researchers to check on the degree of collinearity. A tolerance value lower than 0.1 is comparable to a VIF of 10. It means that the variable could be considered as a linear combination of other independent variables. vif Для вывода стандартизованных коэффициентов: xi: regress stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male , beta Для получения робастных оценок (если есть гетероскедастичность): коэффициенты не меняются, но меняется значимость. xi: regress stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male, robust Запись результатов в вордовский файл: outreg using c:\roshchina\sem_stata\mincer.doc, se bdec(4) adjr2 Та же регрессия для мужчин и для женщин, также добавление в вордовский файл: xi: regress stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 if male, robust outreg using c:\roshchina\sem_stata\mincer.doc, se bdec(4) adjr2 append xi: regress stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 if male==0, robust outreg using c:\roshchina\sem_stata\mincer.doc, se bdec(4) adjr2 append Откройте файл с результатами – из STATA и из WORD. Перенесение результатов в EXCEL. 6 Расчет предельных эффктов (долго) xi: regress stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male mfx compute Модель занятости: xi: probit zanat i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 ikdet17, robust Модель Хекмана для уравнения Минцера: xi: heckman stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male, robust select(zanat = i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 ikdet17) Мультиноминальная регрессия xi: mlogit st_zan1 i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male jenat lg_dox_s lg_dox_o lg_dox ikdet1 ikdet3 ikdet6 ikdet17 st_zans if st_zan==1 Сохраните все выполненные команды из окна COMMAND в виде DO-файла. 1.6. DO-файлы. Сохраните результаты, закройте программу. Снова откройте программу, и откройте окно редактирования DO-файлов. Вставьте в него текст всех выполненных команд, или откройте сохраненный вами файл: set more off set matsize 150 set mem 150m help limits use "C:\roshchina\sem_stata\ind_j_5_15_regress.dta", clear log using "C:\roshchina\sem_stata\regress_out.smcl" regress stavka_zp_ln vo sso age age_2 nfm b_v_reg lg_regz round6 round7 round8 round9 round10 round11 round12 round13 round14 round15 sever centr volga kavkaz ural zapsib dvost gorod selo male xi: regress stavka_zp_ln i.dipl2 age age_2 nfm i.region i.status1 male vif xi: regress stavka_zp_ln i.dipl2 age age_2 nfm i.region i.status1 male , beta xi: regress stavka_zp_ln i.dipl2 age age_2 nfm i.region i.status1 male, robust outreg using c:\roshchina\sem_stata\mincer.doc, xi: regress stavka_zp_ln i.dipl2 age age_2 nfm i.region i.status1 if male, robust outreg using c:\roshchina\sem_stata\mincer.doc, xi: regress stavka_zp_ln i.dipl2 age age_2 nfm i.region i.status1 if male==0, robust outreg using c:\roshchina\sem_stata\mincer.doc, xi: regress stavka_zp_ln i.dipl2 age i.region i.status1 male mfx compute b_v_reg lg_regz i.round b_v_reg lg_regz i.round b_v_reg lg_regz i.round se bdec(4) adjr2 b_v_reg lg_regz i.round se bdec(4) adjr2 append b_v_reg lg_regz i.round se bdec(4) adjr2 append age_2 nfm b_v_reg lg_regz i.round xi: probit zanat i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 ikdet17, robust xi: heckman stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male, robust select(zanat = i.dipl2 age age_2 nfm b_v_reg lg_regz 7 i.round i.region i.status1 ikdet17) male jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 xi: mlogit st_zan1 i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male jenat lg_dox_s lg_dox_o lg_dox ikdet1 ikdet3 ikdet6 ikdet17 st_zans if st_zan==1 Выполните DO-файл. 1.7. ДОПОЛНЕНИЕ: Синтаксис для панельных регрессий по этим же моделям: iis idind tis round tsset idind round xi: xtreg stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male , fe xi: xtreg stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round, fe est store fixed xi: xtreg stavka_zp_ln i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male , re hausman fixed xttest0 xi: logit zanat i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 ikdet17 xi: clogit zanat i.dipl2 age age_2 nfm b_v_reg lg_regz i.round jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 ikdet17, group(idind) xi: xtlogit zanat i.dipl2 age age_2 nfm b_v_reg lg_regz i.round jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 ikdet17, i(idind) fe xi: xtlogit zanat i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 ikdet17, i(idind) re xi: probit zanat i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 ikdet17 xi: xtprobit zanat i.dipl2 age age_2 nfm b_v_reg lg_regz i.round i.region i.status1 male jenat lg_dox_s lg_dox_o ikdet1 ikdet3 ikdet6 ikdet17, i(idind) 8