'closure' 类型的对象不能使用 R 中的 pglm::pglm 函数进行子集化以估计面板 logit

object of type 'closure' is not subsettable with pglm::pglm function in R to estimate panel logit

我正在尝试使用 pglm 包中的 pglm 函数来获得有序逻辑模型的随机效应面板估计。

测试独立函数时 pglm 它给了我想要的结果。这是我的规格:

pglm::pglm(as.numeric(y)~x1+x2+x3, df,family = pglm::ordinal('logit'), 
           model = "random", method = "bfgs", print.level = 3, R = 5, index = 'Year')

其中: 1.所有解释变量{x1,x2,x3}都是数值双精度 2. y 是一个有序的分类变量,范围从 1 到 22

table 还包含一个 "Year" 变量,范围从 1996 年到 2014 年,将用于构建面板数据。

尝试在另一个函数中使用 pglm 函数时:

pglm_fun <- function(df){

  df <- data.frame(df)
  pglm::pglm(as.numeric(y)~x1+x2+x3, data =  df,family = pglm::ordinal('logit'), 
               model = "random", method = "bfgs", print.level = 3, R = 5, index = 'Year')

}

我在计算时收到一条错误消息

pdata.frame(data, index) 

Error in x[, !na.check] : object of type 'closure' is not subsettable.

当尝试 运行 控制台中的代码时,我没有出现这样的错误并且 pdata.frame() 功能有效。

数据框示例:

df = data.frame(y    = sort(rep(1:4,20)),
       x1   = rnorm(80), 
       x2   = rnorm(80), 
       x3   = rnorm(80),
       Year = rep(sample(1995:1998, replace = FALSE),20))

好的,我明白了。在这种情况下,R 中存在环境问题,因为我使用的函数是复制变量而不是直接使用全局变量。 通过在函数中声明单独的名称并将数据框保留为全局变量来解决问题:

pglm_fun1 <- function("y","x1","x2","x3","Year"){
  require("pglm")
  pglm(as.numeric(y)~x1+x2+x3, data = df, family = ordinal('logit'), 
          model = "random", method = "bfgs", print.level = 3, R = 5, index = 'Year')

}