从函数环境运行时R的`polr`函数可能存在错误?

时间:2016-08-25 17:30:29

标签: r function debugging regression

我可能在polr中找到MASS库的某种错误R函数(序数/多元回归)。问题似乎与在coef()对象上使用summary有关,但可能不是。

问题出现在类型:

的函数中
pol_me <- function(d){
    some_x   <- d[,1]
    mod      <- polr(some_x ~ d[,2])
    pol_sum  <- summary(mod)
    return(pol_sum)
}

为了说明,我模拟了序数回归模型的一些数据。

set.seed(2016)
n=1000
x1 <- rnorm(n)
x2 <- 2*x1 +rnorm(n)

make_ord <- function(y){
  y_ord <- y
  y_ord[y < (-1)] <- 1
  y_ord[y >= (-1) & y <= (1)] <- 2
  y_ord[y >= 1] <- 3
  y_ord <- as.factor(y_ord)
}

x1 <- make_ord(x1)
dat <- data.frame(x1,x2)

当我们现在调用函数时:

library(MASS)
pol_me(d = dat)

我们收到错误

 Error in eval(expr, envir, enclos) : object 'some_x' not found

我认为这不应该在逻辑上发生。实际上,当我们定义替代函数时,模型命令被数字因变量上的线性模型lm替换,即

mod       <- lm(as.numeric(some_x) ~ d[,2])

结果函数运行正常。

这是否真的是我的代码中的错误或编程问题,如何让pol_me运行?

1 个答案:

答案 0 :(得分:3)

summary(polr(dat[,1] ~ dat[,2]))返回半错误消息Re-fitting to get Hessian,这是错误的原因。 polr的论点Hess = T将解决您的问题。 (?polr Hess:是否应返回Hessian(观察到的信息矩阵)的逻辑。如果您打算在拟合上调用summary或​​vcov,请使用此。

pol_me <- function(d){
    some_x   <- d[,1]
    mod      <- polr(some_x ~ d[,2], Hess = T)  # modify
    pol_sum  <- summary(mod)
    return(pol_sum)
}
相关问题