2016-11-20 2 views
1

Другой пользователь задал How do I add confidence intervals to odds ratios in stargazer table? и изложили свое решение этой проблемы (я включил соответствующие строки кода здесь)Количество измерений для р-значения с помощью Звездочет

OR.vector <- exp(mylogit$coef) 
CI.vector <- exp(confint(mylogit)) 
p.values <- summary(mylogit)$coefficients[, 4] 

# Table with ORs and CIs` 
stargazer(mylogit, coef = list(OR.vector), ci = T, 
      ci.custom = list(CI.vector), p = list(p.values), 
      single.row = T, type = "text") 

Когда я пытаюсь запустить тот же код для моей собственной модели я получаю следующую ошибку:

Error in summary(ml.TatC)$coefficients[, 4] : 
    incorrect number of dimensions 

Может ли кто-нибудь знать, почему это происходит? Заранее спасибо за вашу помощь!

ОБНОВЛЕНИЕ: здесь используется файл link .txt.

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

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)$coefficients[,4] #incorrect # of dimensions, how am I supposed 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) 
+0

Трудно сказать, не видя код, который вы используете. Не могли бы вы включить его и минимально воспроизводимый пример? – paqmo

+0

Я предполагаю, что вы хотите «summary (ml.Tat) $ CoefTable [, 4]' для извлечения p-значений. Объект пакета 'mlogit' хранит вещи по-разному в' summary.mlogit', чем 'summary.glm', поэтому пример, на который вы ссылаетесь, не является параллельным. Когда вы получаете ошибку измерения, всегда проверяйте объект с помощью 'str (object)', чтобы узнать, каковы его размеры. – paqmo

+0

@paqmo Я добавил ссылку на файл данных и код, который я использовал. Да, я хочу 'summary (ml.Tat) $ CoefTable [, 4]' извлечь мои p-значения и включить их в вывод модели. –

ответ

1

mlogit В пакет хранит значения р через функции summary.mlogit в $CoefTable, а не в $coefficients, как и с summary.glm. Вы можете увидеть это:

> str(summary(ml.Tat)$coefficients) 
atomic [1:8] -4.45e+02 -1.88e+02 2.51e-02 8.04e-03 1.38 ... 

summary(ml.Tat)$coefficients является атомарным вектор, поэтому имеет только одно измерение. Вот почему вы получаете ошибку.

Использование summary(ml.Tat)$CoefTable[,4] для извлечения р-значения, которые вы хотите:

> summary(ml.Tat)$CoefTable[,4] 
    large:(intercept) medium:(intercept) large:age   medium:age   large:sexM  medium:sexM 
    0.000000e+00  0.000000e+00  8.536121e-10  1.731441e-03  0.000000e+00  0.000000e+00 
    large:yy   medium:yy 
    0.000000e+00  0.000000e+00 

Так что ваш код должен прочитать:

library(stargazer) 

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

stargazer(ml.Tat, coef=list(OR.vector), ci=TRUE, ci.custom=list(CI.vector), 
      p = p.values, single.row=T, type="text", 
      star.cutoffs=c(0.05,0.01,0.001), 
      out="table1.txt", digits=4) 

Ваш стол:

================================================ 
         Dependent variable:  
        ----------------------------- 
           size    
------------------------------------------------ 
large:(intercept) 0.0000*** (0.0000, 0.0000) 
medium:(intercept) 0.0000 (0.0000, 0.0000) 
large:age    1.0254 (1.0172, 1.0336) 
medium:age   1.0081 (1.0030, 1.0132) 
large:sexM   3.9821 (3.5355, 4.4851) 
medium:sexM   2.0886 (1.9576, 2.2284) 
large:yy    1.2455 (1.2189, 1.2726) 
medium:yy    1.0976 (1.0849, 1.1105) 
------------------------------------------------ 
Observations     18,162    
R2       0.0410    
Log Likelihood    -15,882.7000   
LR Test    1,357.1140*** (df = 8)  
================================================ 
Note:    *p<0.05; **p<0.01; ***p<0.001 

Полезно знать (если вы новичок в R), что пакеты развертывают функцию summary по-разному, поэтому всегда хорошо исследуйте объект, чтобы увидеть, что происходит.

+0

Благодарим за помощь. Я определенно столкнулся с крутой кривой обучения. Это очень ценится! И, код, который вы предложили, дает мне ту же таблицу, что и тот, который вы указали выше. –

Смежные вопросы