【问题标题】:object of type 'closure' is not subsettable with pglm::pglm function in R to estimate panel logit'closure' 类型的对象不能使用 R 中的 pglm::pglm 函数来估计面板 logit
【发布时间】:2017-01-11 12:52:53
【问题描述】:

我正在尝试使用 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的有序分类变量

该表还包括一个从 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) 

x[, !na.check] 中的错误:“闭包”类型的对象不是可子集的。

尝试在控制台中运行代码时,我没有出现这样的错误,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))

【问题讨论】:

  • 您的代码中的index 是什么? plm 中还有一个 index() 函数,这可能是造成混淆的原因。还有什么是 data ?它与df 有什么关系?简而言之:您应该发布一个可重现的示例stackoverflow.com/questions/5963269/…
  • 我将变量'Year'设置为索引,data就是我给函数pglm_fun作为参数的数据框。我将使用数据框 df 的示例编辑帖子
  • 那么pdata.frame(data, index = "Year")呢?
  • 对我来说不可重现,运行 pglm_fun(df) 对我有用。
  • 好的,我的 RStudio 编译器非常不稳定。有时有效,有时无效,在这个数据框下给了我不同类型的错误。我实际上正在测试一个更大、更复杂的数据框,大约有 2k 行,是否可以以某种方式共享它?

标签: r logistic-regression plm


【解决方案1】:

好的,我想通了。在这种情况下,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')

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 2017-06-28
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多