gpt4 book ai didi

R 函数没有正确地将 felm 对​​象作为参数

转载 作者:行者123 更新时间:2023-12-04 04:12:17 25 4
gpt4 key购买 nike

我正在尝试编写一个以 felm 对​​象作为参数的 R 函数。该函数似乎无法识别函数内部的 felm 对​​象,但是,如果我在函数外部运行代码,它可以正常工作。有人可以帮我理解为什么这不起作用吗?谢谢!下面是可重现的例子。

library(sandwich)
library(lfe)
set.seed(2020)
x <- rnorm(1000)
x2 <- rnorm(length(x))
y <- x + 0.5*x2
adj_test <- diag(1, 1000, 1000)
test_felm <- felm(y ~ x + x2 | 0 | 0 | 0)

vcov.adjacency.robust <- function(felm_object, adjacency.matrix, estfunc=sandwich::estfun) {
eef <- estfunc(felm_object)

N <- nrow(adjacency.matrix)
m <- crossprod(eef, adjacency.matrix %*% eef)

sandwich(felm_object, meat = as.matrix(m) / N)
}

vcov.adjacency.robust(test_felm, adj_test)
Error in model.matrix(x) : object 'felm_object' not found 
eef <- sandwich::estfun(test_felm)
N <- nrow(adj_test)
m <- crossprod(eef, adj_test %*% eef)
sandwich(test_felm, meat = as.matrix(m) / N)

             (Intercept)            x           x2
(Intercept) 2.772862e-33 2.615412e-34 2.335601e-35
x 2.615412e-34 7.750617e-33 7.657461e-34
x2 2.335601e-35 7.657461e-34 2.947959e-33

最佳答案

sandwich::estfun 正在调用一个方法,

sandwich::estfun
# function (x, ...)
# {
# UseMethod("estfun")
# }
# <bytecode: 0x00000000142bb260>
# <environment: namespace:sandwich>

并且该方法在函数中似乎不可访问。所以直接调用正确的函数,即 sandwich:::estfun.lm,解决了这个问题。

vcov.adjacency.robust <- function(felm_object, adjacency.matrix, 
estfunc=sandwich:::estfun.lm) {
eef <- estfunc(felm_object)
N <- nrow(adjacency.matrix)
m <- crossprod(eef, adjacency.matrix %*% eef)
sandwich(felm_object, meat = as.matrix(m) / N)
}

(res <- vcov.adjacency.robust(test_felm, adj_test))
# (Intercept) x x2
# (Intercept) 2.772862e-33 2.615412e-34 2.335601e-35
# x 2.615412e-34 7.750617e-33 7.657461e-34
# x2 2.335601e-35 7.657461e-34 2.947959e-33

eef <- estfun(test_felm)
N <- nrow(adj_test)
m <- crossprod(eef, adj_test %*% eef)
check <- sandwich(test_felm, meat = as.matrix(m) / N)

stopifnot(all.equal(res, check))

关于R 函数没有正确地将 felm 对​​象作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61504407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com