Создать таблицу средних значений переменных в строках и квантилей данной переменной в столбцах в Stata - PullRequest
1 голос
/ 22 октября 2011

... и добавить столбцы для различий и t-статистики.

Я узнал, как составить квантиль по квантильной таблице средств и как добавить столбец / ряд различий здесь (спасибо @lejohn).

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

Я могу легко вычислить записи в ячейках с помощью tabstat, но я хотел бы, чтобы переменные в строках и квантили в столбцах (tabstat производит транспонирование).Мне также хотелось бы иметь возможность различать столбцы (как в моем первом вопросе) и вычислять t-статистику для различий ячеек.

Мне кажется, что промежуточным шагом является reshape для длинных данных с тремя столбцами:id (здесь acc_d), имя переменной и значение переменной.Но я не могу понять, как это сделать, и я могу застрять в парадигме R.

Вот пример таблицы типов, которую я хотел бы сделать

enter image description here

и вот код, с которым я (безуспешно) возился

* generate data
clear
set obs 2000
generate acc = rnormal()
generate r1 = rnormal()
generate sar1 = rnormal()
generate arbrisk = rnormal()

* generate quantiles for for a and b
xtile acc_d = acc, nquantiles(10)

* form table (at least my attempts)
* w/ tabstat (but transposed and can't manipulate columns)
tabstat acc r1 sar1 arbrisk, stat(mean) by(acc_d) nototal 

* my attempts to reshape fail, but I would want something like to following to use tabulate
* acc_d   variable    value
* 1       acc         0.01
* 1       r1          1.03
* 1       sar1        -0.03
* 1       arbrisk     0.05
* 2       acc         1.01
* 2       r1          2.03
* 2       sar1        0.03
* 2       arbrisk     1.05

Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

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

foreach v of varlist acc r1 sar1 arbrisk {
    summarize `v' if acc_d == 1
    local m_`v'_1 = r(mean)
    local var_`v'_1 = r(Var)
    local n_`v'_1 = r(N)
    summarize `v' if acc_d == 10
    local m_`v'_10 = r(mean)
    local var_`v'_10 = r(Var)
    local n_`v'_10 = r(N)
}

Затем я бы продолжил, свернув и перенеся данные

collapse (mean) acc r1 sar1 arbrisk, by(acc_d)
xpose, clear varname 
drop if _varname == "acc_d"
order _varname
forvalues n = 1 / 10 {
    rename v`n' acc_d`n'
}

На последнем шагеЯ бы добавил разницу и статистику t:

generate diff_d10_d1 = . 
generate tstat_d10_d1 = .
foreach v in acc r1 sar1 arbrisk {
    replace diff = `m_`v'_10' - `m_`v'_1' if _varname == "`v'"
    replace tstat = (`m_`v'_10' - `m_`v'_1') / sqrt((`var_`v'_10'/`n_`v'_10') + (`var_`v'_1'/`n_`v'_1')) if _varname == "`v'"
}

И, наконец, напечатать результаты:

list, abb(12) noobs

Надеюсь, это поможет.

0 голосов
/ 24 октября 2011

Вот более грубое решение, которое создает две таблицы.

* generate data
clear
set obs 2000
generate acc = rnormal()
generate r1 = rnormal()
generate sar1 = rnormal()
generate arbrisk = rnormal()

* generate quantiles
xtile acc_d = acc, nquantiles(10)

* aggregate
collapse (mean) acc r1 sar1 arbrisk, by(date_y acc_d) cw

* relabel variables after collapse
label variable acc "Acc"
label variable r1 "R1"
label variable sar1 "SAR1"
label variable arbrisk "ArbRisk"

* main part of table
eststo clear
estpost tabstat acc r1 sar1 arbrisk if tin(1975, 2000) ///
    , stat(mean) by(acc_d) columns(statistics) listwise nototal 
esttab using tab_1a.tex ///
    , booktabs replace main(mean) nonumbers noobs ///
    label unstack nogaps not nomtitles nostar ///
    eqlabels(, prefix("Acc ")) 

* add difference t-test
estpost ttest acc r1 sar1 if acc_d == 1 | acc_d == 10, by(acc_d)
esttab using tab_1a_ttest.tex, booktabs replace nonumbers noobs ///
    label mtitles("Acc 1-Acc10") wide ///
    varlabels(acc Acc r1 R1 sar1 SAR1)  
...