Blundering Ecologist - 15 days ago 9
R Question

# Number of dimensions for p-value using stargazer

Another user asked How do I add confidence intervals to odds ratios in stargazer table? and outlined their solution to the problem (I've included the relevant lines of code here)

``````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")
``````

When I try to run the same code for my own model, I receive the following error

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

Might anyone know why this is happening? Thank you in advance for your help!

UPDATE: Here is a link to the .txt file used.

The code I have used is as follows:

``````tattoo <- read.table("https://ndownloader.figshare.com/files/6920972",

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)
``````

The `mlogit` package stores p-values through the function `summary.mlogit` in `\$CoefTable`, not in `\$coefficients`, as with `summary.glm`. You can see this:

``````> 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` is an atomic vector, so has only one dimension. That's why you are getting the error.

Use `summary(ml.Tat)\$CoefTable[,4]` to extract the p-values you want:

``````> 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
``````

Good to know (if you are new to R) that packages deploy the `summary` function differently, so always good to explore the object to see what is going on.