Извлечь коэффициенты и t-значения из квантильной регрессии, rqpd

У меня есть модель квантильной регрессии:

rqpdfit <- rqpd(cr1 ~ x1 + x2 + x3 + x4 + x5 + x6 +x7|id, 
panel(lambda = 1,taus=c(0.1, 0.25, 0.5, 0.75, 0.9),tauw=rep(1/5, 5), method="pfe"),
 data =pdata)

Для создания выходной таблицы я разделил результаты по квантилям.

cf_10<- summary(rqpdfit)$coefficients[1:8,]

Вот результат первого квантиля:

                             Value   Std. Error     t value     Pr(>|t|)                
      (Intercept)[0.1] 14.4864410152 11.670505897  1.24128647 2.145773e-01
    > x1[0.1]          -1.1081682804  1.230039754 -0.90092070 3.676881e-01
    > x2[0.1]           0.5036482698  0.097472484  5.16708152 2.501200e-07
    > x3[0.1]          -0.8077127317  0.282774725 -2.85638234 4.308473e-03
    > x4[0.1]           0.0006560821  0.008695294  0.07545255 9.398587e-01
    > x5[0.1]          -0.0102064486  0.043276674 -0.23584180 8.135683e-01
    > x6[0.1]          -0.1081589250  0.061636404 -1.75478966 7.937665e-02
    > x7[0.1]          -0.7891778648  0.251492587 -3.13797665 1.714334e-03

Однако я не знаю, как мне извлечь коэффициенты и t-значения в матрице (если возможно, со звездами значимости).

Спасибо


person Demet    schedule 13.04.2016    source источник


Ответы (2)


Вы можете проверить, работает ли (безымянный) пакет, который вы используете, с stargazer, но в противном случае получение звездочек не будет автоматическим. Обычно эту информацию можно извлечь с помощью summary().

# coefficients and t-values in matrix
cf_10 <- summary(x)$coefficients[1:8,c(1,3)]
# p-values
cf_10.pVals <- summary(x)$coefficients[1:8,4]

Если вы действительно хотите, вы можете реализовать алгоритм для вставки звездочек на коэффициенты.

Вероятно, есть способ получше, но его будет довольно просто прочитать:

# function to print stars
starPrinter <- function(pVal) {
  if(pVal < 0.01) return("***")
  if(pVal < 0.05) return("**")
  if(pVal < 0.1) return("*")

  return("")
}

# a matrix, with digits rounded to 3rd decimal
myTable <- round(cf_10, 3)
# get stars and put tvalues in parentheses
for(i in 1:nrow(myTable)) {
  myTable[i, 1] <- paste0(myTable[i, 1], starPrinter(cf_10.pVals[i]))
  myTable[i, 2] <- paste0("(", myTable[i, 2], ")")
}

Если вы хотите сделать это вектором, где у вас есть coef1, tval1, coef2, tval2 ...

myEstVector.cf_10 <- as.character(t(myTable))

Затем вы можете объединить несколько результатов в новую таблицу:

myNewTable <- cbind(myEstVector.cf_10, myEstVector.cf_25, myEstVector.cf_99)
person lmo    schedule 13.04.2016
comment
Stargazer не поддерживает rqpd, поэтому он не дает значимых звезд. Вы знаете, как создать алгоритм? - person Demet; 14.04.2016
comment
Для этого добавлен код. Это не идеально, но, надеюсь, поможет. - person lmo; 14.04.2016
comment
Спасибо! Я редактировал starPrinter, и теперь он работает. Однако последняя строка не работает (после # get stars.) - person Demet; 14.04.2016
comment
все еще # часть получить звезды не работает. выдает ошибку Error in 1:nrow(myTable) : argument of length 0 - person Demet; 15.04.2016
comment
Да, ls () возвращает myTable как один из объектов. dim (myTable) равен NULL - person Demet; 15.04.2016
comment
теперь это сработало. Я просто удалил as.character, который испортил myTable. он дал мне мои звезды !! Большое спасибо! - person Demet; 15.04.2016
comment
Я пытаюсь дать вам +1, но у меня еще нет 15 очков репутации. - person Demet; 15.04.2016
comment
не уверен, но я думаю, что персонаж с раундом портит матрицу. - person Demet; 15.04.2016
comment
Кстати, вы знаете, как поставить t-значения под коэффициентами в круглых скобках? - person Demet; 15.04.2016
comment
@Denis Я внес некоторые изменения в приведенный выше код. Как я показал, код позволяет публиковать результаты различных регрессий как в стандартных таблицах. Кстати, вы были правы, что виновником был именно персонаж. Я выяснил, что as.character переводит матрицы в векторы. - person lmo; 15.04.2016
comment
@Denis См. Последние две строчки кода в моем ответе. - person lmo; 15.04.2016
comment
Спасибо! Я только что увидел последнюю строчку кода. Одно замечание: myEstVector.cf_10 <- as.character(t(myTable)) где as.character искажает значимость звезд, поскольку некоторые переменные выглядят так, как будто имеют 5 звезд. - person Demet; 15.04.2016
comment
вы можете попробовать as.vector(). Если myTable выглядит нормально, то, как указано выше, отметьте t(myTable). Если это тоже нормально, попробуйте as.vector(t(myTable)). - person lmo; 15.04.2016
comment
сейчас все выглядит нормально, но я потерял имена переменных в матрице myNewTable. Он назвал строки числами вместо имен переменных. - person Demet; 16.04.2016
comment
Вы можете добавлять имена, используя rownames(myNewTable) <- myNamesVector. заранее извлеките имена. - person lmo; 17.04.2016

Просто пытаюсь добавить в вышеупомянутую ветку. Я выполнил приведенный выше код и экспортировал результаты в формат файла csv.

# y is the dependent variable 
# x6 is a vector of 6 independent variables. 
#setting regression
r6.form <- y ~ x6 |as.factor(cty)
r6090 <- rqpd(r6.form, panel= panel(taus=c(0.1, 0.25, 0.5, 0.75, 0.9), tauw = rep(1/5,5)), 
              na.action = 'na.omit', data=mydata)

#Storing results 
c6090 <- summary(r6090, se = "boot", R=1000, covariance = TRUE)

#making a data frame for results
df6 = as.data.frame(c6090$coefficients)

#coefficients and t-values in a matrix
cf_6 <- df6[1:71, c(1,3)]

#p-values
cf_6.pval <- df6[1:71,4]

#function to print stars
starPrinter <- function(pVal) {
  if(pVal < 0.01) return("***")
  if(pVal < 0.05) return("**")
  if(pVal < 0.1) return("*")

  return("")
}

# a matrix, with digits rounded to 3rd decimal
myTable6 <- round(cf_6, 3)

# get stars and put tvalues in parentheses
for(i in 1:nrow(myTable6)) {
  myTable6[i, 1] <- paste0(myTable6[i, 1], starPrinter(cf_6.pval[i]))
  myTable6[i, 2] <- paste0("(", myTable6[i, 2], ")")
}

#creating a vector
table.cf_6 <- (t(myTable6))

#exporting it to CSV file
write.table(table.cf_6, "c6090.csv", sep =',', row.names = TRUE)

Это извлекает результаты в разные столбцы с именами переменных.

person Ritika Khurana    schedule 14.05.2020