从AER coeftest中提取显着性得分得到R

时间:2016-02-11 13:57:42

标签: r

调用

coeftest(m)

返回     z系数测试:

         Estimate Std. Error  z value  Pr(>|z|)    
lenDelta  0.26592    0.13038   2.0397   0.04138 *  
-2|-1    -2.59586    0.24090 -10.7758 < 2.2e-16 ***
-1|0     -0.81155    0.13558  -5.9860 2.150e-09 ***
0|1       0.73271    0.13394   5.4706 4.486e-08 ***
1|2       1.98097    0.19182  10.3271 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

我知道我可以使用

访问各个数值
coeftest(m)[1,4]

从这里我可以直接获得重要性代码。

但是,如何访问与lenDelta相关联的重要性代码字符串“*”?

对象的结构如下

str(coeftest(m))

返回以下输出

 coeftest [1:5, 1:4] 0.266 -2.596 -0.812 0.733 1.981 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:5] "lenDelta" "-2|-1" "-1|0" "0|1" ...
  ..$ : chr [1:4] "Estimate" "Std. Error" "z value" "Pr(>|z|)"
 - attr(*, "method")= chr "z test of coefficients"

完整的可重复示例(来自here

## data 
library("foreign")
dat <- read.dta("ats.ucla.edu/stat/data/ologit.dta")
## model 
library("MASS")
m <- polr(apply ~ pared + public + gpa, data = dat, Hess = TRUE)
## coefficient test
library("AER")
coeftest(m)

由于

2 个答案:

答案 0 :(得分:2)

print个对象的coeftest方法在内部调用printCoefmat(就像summarylm个对象的glm方法一样。这会利用函数symnum,默认情况下使用系数测试/摘要图例中显示的分割点。

要手动调用,您可以执行以下操作。 (我在这里使用的是更简单的模型,因为我在访问加州大学洛杉矶分校的网站时遇到了问题。)

安装模型:

m <- lm(dist ~ speed, data = cars)

从coeftest中提取p值:

pv <- coeftest(m)[,4]

将p值切割为显着组:

symnum(pv, corr = FALSE, na = FALSE,
  cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),
  symbols = c("***", "**", "*", ".", " ")
)
## (Intercept)       speed 
##           *         *** 
## attr(,"legend")
## [1] 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

答案 1 :(得分:0)

我建议使用以下函数ctdfcoeftest打印输出转换为可以使用r2$sig等传统方法轻松访问的数据框。要专门访问“lenDelta”的重要明星,请使用r2[row.names(r2)=="lenDelta","sig"]

# Obtain coeftest object
r1=coeftest(m)                         

#*** Function to convert coeftest results object to data frame
ctdf=function(x){
  rt=list()                             # generate empty results list
  for(c in 1:dim(x)[2]) rt[[c]]=x[,c]   # writes column values of x to list
  rt=as.data.frame(rt)                  # converts list to data frame object
  names(rt)=names(x[1,])                # assign correct column names
  rt[,"sig"]=symnum(rt$`Pr(>|z|)`, corr = FALSE, na = FALSE,cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),symbols = c("***", "**", "*", ".", " "))
  return(rt)
}

# Apply function
r2=ctdf(r1) # returns a data frame that can be accessed normally