2016-11-20 9 views
1

Предыдущий пользователь спросил How do I add confidence intervals to odds ratios in stargazer table? и наметил четкое решение проблемы.Как добавить коэффициенты, SE, доверительные интервалы и коэффициенты шансов в таблице stargazer?

В настоящее время я печатаю свои таблицы вручную, и это очень трудоемко. example of my typed out table. Вот link в файл .txt.

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

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

tattoo <- read.table("https://ndownloader.figshare.com/files/6920972", 
         header=TRUE, na.strings=c("unk", "NA"))  

library(mlogit) 

Tat<-mlogit.data(tattoo, varying=NULL, shape="wide", choice="size", id.var="date") 

ml.Tat<-mlogit(size~1|age+sex+yy, Tat, reflevel="small", id.var="date") 

library(stargazer) 

OR.vector<-exp(ml.Tat$coef) 
CI.vector<-exp(confint(ml.Tat)) 
p.values<-summary(ml.Tat)$CoefTable[,4] 

#table with odds ratios and confidence intervals 
stargazer(ml.Tat, coef=list(OR.vector), ci=TRUE, ci.custom=list(CI.vector), single.row=T, type="text", star.cutoffs=c(0.05,0.01,0.001), out="table1.txt", digits=4) 

#table with coefficients and standard errors 
stargazer(ml.Tat, type="text", single.row=TRUE, star.cutoffs=c(0.05,0.01,0.001), out="table1.txt", digits=4) 

stargazer код, который я попробовал показано ниже за небольшую часть моих данных:

library(stargazer) 
OR.vector<-exp(ml.Tat$coef) 
CI.vector<-exp(confint(ml.Tat)) 
p.values<-summary(ml.Tat)$CoefTable[,4] #incorrect # of dimensions, unsure how to determine dimensions 
stargazer(ml.Tat, coef=list(OR.vector), ci=TRUE, ci.custom=list(CI.vector), single.row=T, type="text", star.cutoffs=c(0.05,0.01,0.001), out="table1.txt", digits=4) #gives odds ratio (2.5%CI, 97.5%CI) 

отношение шансов и уверенности в себе интервал вывода: odds and CI

stargazer(ml.Tat, type="text", single.row=TRUE, star.cutoffs=c(0.05,0.01,0.001), out="table1.txt", digits=4) #gives coeff (SE)` 

Коэффициент и SE выход: coeff and SE output

я могу объединить отношения шансов с доверительными интервалами или стандартными ошибками или коэффициентами с доверительными интервалами и стандартными ошибками, но когда я пишу все три вместе функция ci=TRUE кажется перезаписать SE по умолчанию.

Для моей диссертации мне нужны таблицы для отображения коэффициентов, стандартных ошибок, доверительных интервалов и коэффициентов шансов (и значений p в некотором формате). Есть ли способ, чтобы звездный игрок включил все четыре вещи? Возможно, в двух разных столбцах? Я могу экспортировать таблицы, чтобы преуспеть, однако без всех четырех вещей в той же таблице звездных игр я застрял вручную, поставив две выше таблицы вместе. Это не очень важно для 1 таблицы, но я работаю с 36 моделями, которым нужны таблицы (для моей диссертации).

Как я могу использовать звездочки, чтобы показать все четыре вещи? (отношение шансов, доверительные интервалы, коэффициенты и стандартные ошибки)

+0

Необходимо представить объекты данных, созданные с помощью R-кода. (Это также избыточная презентация.) –

+0

@ 42- Надеюсь, код и скриншоты, которые я добавил, помогли прояснить мои трудности. –

+0

Ну, они предлагают довольно небольшое количество событий. И немного необычно иметь 2 перехвата. Мы по-прежнему не в состоянии предлагать рекомендации по кодированию, поскольку данных по-прежнему нет. –

ответ

1

Stargazer принимает несколько моделей и добавляет их в новую строку.Итак, вы можете сделать вторую модель и заменить стандартные коэффициенты коэффициентом шансов и передать это на вызов stargazer.

tattoo <- read.table("https://ndownloader.figshare.com/files/6920972", 
        header=TRUE, na.strings=c("unk", "NA"))  

library(mlogit) 

Tat<-mlogit.data(tattoo, varying=NULL, shape="wide", choice="size", id.var="date") 

ml.Tat<-mlogit(size~1|age+sex+yy, Tat, reflevel="small", id.var="date") 
ml.TatOR<-mlogit(size~1|age+sex+yy, Tat, reflevel="small", id.var="date") 
ml.TatOR$coefficients <- exp(ml.TatOR$coefficients) #replace coefficents with odds ratios 

library(stargazer) 
stargazer(ml.Tat, ml.TatOR, ci=c(F,T),column.labels=c("coefficients","odds ratio"), 
      type="text",single.row=TRUE, star.cutoffs=c(0.05,0.01,0.001), 
      out="table1.txt", digits=4) 

Аргумент ci=c(F,T) подавляет доверительный интервал в первой колонке (так СЭП показаны вместо этого), и показывает, что он во второй колонке. Аргумент column.labels позволяет вам называть столбцы.

==================================================================== 
            Dependent variable:    
        ------------------------------------------------- 
             size      
         coefficients    odds ratio   
          (1)      (2)    
-------------------------------------------------------------------- 
large:(intercept) -444.6032*** (22.1015) 0.0000 (-43.3181, 43.3181) 
medium:(intercept) -187.9871*** (11.9584) 0.0000 (-23.4381, 23.4381) 
large:age   0.0251*** (0.0041) 1.0254*** (1.0174, 1.0334) 
medium:age   0.0080** (0.0026) 1.0081*** (1.0030, 1.0131) 
large:sexM   1.3818*** (0.0607) 3.9821*** (3.8632, 4.1011) 
medium:sexM   0.7365*** (0.0330) 2.0886*** (2.0239, 2.1534) 
large:yy    0.2195*** (0.0110) 1.2455*** (1.2239, 1.2670) 
medium:yy   0.0931*** (0.0059) 1.0976*** (1.0859, 1.1093) 
-------------------------------------------------------------------- 
Observations    18,162     18,162   
R2       0.0410     0.0410   
Log Likelihood   -15,882.7000    -15,882.7000  
LR Test (df = 8)  1,357.1140***   1,357.1140***   
==================================================================== 
Note:         *p<0.05; **p<0.01; ***p<0.001 
+0

Благодарим вас за трудность написания кода. Я ценю ваше терпение и вашу помощь. Ваше решение полностью ответило на мой вопрос. –

+0

Я использовал код выше, и по какой-то причине мой вывод для обоих столбцов тот же (то есть коэффициент повторяется во втором столбце, а не показывает отношение шансов). Например, для 'large: age' он равен« 0.0251 *** »по коэффициентам и коэффициенту шансов. Может ли быть ошибка в приведенном выше коде или может ли эта ошибка быть специфической для моей консоли R? –

+0

Я сделал две ошибки. Должен работать сейчас. – paqmo

1

Попытка извлечь эти значения из звездного оружия будет болезненной. Возвращаемое значение из звонков звездчатых объектов - это только строки символов. Вместо этого вы должны посмотреть на структуру модели. Она похожа на структуру glm результатов:

> names(ml.Tat) 
[1] "coefficients" "logLik"  "gradient"  "hessian"  
[5] "est.stat"  "fitted.values" "probabilities" "residuals"  
[9] "omega"   "rpar"   "nests"   "model"   
[13] "freq"   "formula"  "call"  

И результаты summary.mlogit напоминают результаты summary.glm:

> names(summary(ml.Tat)) 
[1] "coefficients" "logLik"  "gradient"  "hessian"  
[5] "est.stat"  "fitted.values" "probabilities" "residuals"  
[9] "omega"   "rpar"   "nests"   "model"   
[13] "freq"   "formula"  "call"   "CoefTable"  
[17] "lratio"  "mfR2"   

Таким образом, вы должны использовать [['CoefTable']] значения, которые, скорее всего, в виде матрицы ... так как они должны быть похожи на значение суммарных (mod) $ -коэффициентов.

> summary(ml.Tat)$CoefTable 
         Estimate Std. Error  t-value  Pr(>|t|) 
large:(intercept) -444.39366673 2.209599e+01 -20.1119625 0.000000e+00 
medium:(intercept) -187.91353927 1.195601e+01 -15.7170716 0.000000e+00 
unk:(intercept)  117.92620950 2.597647e+02 0.4539731 6.498482e-01 
large:age    0.02508481 4.088134e-03 6.1360059 8.462202e-10 
medium:age   0.00804593 2.567671e-03 3.1335519 1.727044e-03 
unk:age    0.01841371 4.888656e-02 0.3766620 7.064248e-01 
large:sexM   1.38163894 6.068763e-02 22.7663996 0.000000e+00 
medium:sexM   0.73646230 3.304341e-02 22.2877210 0.000000e+00 
unk:sexM    1.27203654 7.208632e-01 1.7646018 7.763071e-02 
large:yy    0.21941592 1.098606e-02 19.9722079 0.000000e+00 
medium:yy    0.09308689 5.947246e-03 15.6521007 0.000000e+00 
unk:yy    -0.06266765 1.292543e-01 -0.4848399 6.277899e-01 

Теперь должно быть ясно, чтобы выполнить свое домашнее задание.

+0

Спасибо @ 42-. Ваша помощь очень ценится. Если бы это было домашнее задание! На самом деле я работаю над своим доктором философии. –

+0

Я должен уточнить: это решение позволяет мне видеть результат (что имеет смысл), однако, я полагаю, ответ может заключаться в том, что невозможно иметь таблицу звездчатого, которая имеет все 4 вещи (отношение шансов, доверительные интервалы, коэффициенты , и стандартные ошибки). Я использую stargazer как инструмент для эффективного и эстетического экспорта моих данных в excel (у меня есть 36 таблиц данных), поэтому мне кажется, что мне придется скопировать и вставить эти два вместе, возможно? –

+0

Должно быть довольно легко построить единственную функцию, которая предоставляет «печатный» метод для cbind этого результата с exp (coef), exp (coef + 1.96 * se) и coef (coef-1.96 * se). Затем используйте эту функцию для каждой из 36 моделей с циклом for. Я на самом деле удивлен, что звездчагу это не удается. Я думал, что у него есть матричный метод. Причина, по которой я думал, что это домашнее задание, заключается в том, что вчера был другой вопросник с очень похожей опубликованной спецификацией модели mlogit. Я думал, что совпадение было очень маловероятным (но, по-видимому, возможно с точки зрения квантовой механики). –