【发布时间】:2018-05-27 15:50:53
【问题描述】:
我对 R 很陌生,并且习惯于非常基本的应用程序。 现在我遇到了一个需要帮助的问题:
我正在寻找一种方法来为有序逻辑回归聚类标准误差(我的估计类似于this 示例)
我已经尝试过 robcov 和 vcovCL,它们给了我类似的错误消息:
- meatCL(x, cluster = cluster, type = type, ...) 中的错误:数字 'cluster' 和 'estfun()' 中的观察值不匹配
- u[, ii] 中的错误
非常感谢!
编辑: 我发现了一些关于缺失值的更多信息,但这似乎不是问题——因为即使我使用this 答案解决它,或者使用没有 NA 的数据集时,它仍然存在。就像下面的例子一样。问题似乎是 polr 没有将残差作为输出的一部分给我。我该如何解决这个问题?
dat <- read.dta("https://stats.idre.ucla.edu/stat/data/ologit.dta")
length(dat$apply)
twenty <- seq(from=1, to=20, by=1)
dat$clustervar<-sample(twenty, size=400, replace=TRUE)
m <- polr(apply ~ pared + public + gpa, data = dat, Hess=TRUE)
vcovCL <- function(x, cluster.by, type="sss", dfcw=1){
# R-codes (www.r-project.org) for computing
# clustered-standard errors. Mahmood Arai, Jan 26, 2008.
# The arguments of the function are:
# fitted model, cluster1 and cluster2
# You need to install libraries `sandwich' and `lmtest'
# reweighting the var-cov matrix for the within model
require(sandwich)
cluster <- cluster.by
M <- length(unique(cluster))
N <- length(cluster)
stopifnot(N == length(x$residuals))
K <- x$rank
##only Stata small-sample correction supported right now
##see plm >= 1.5-4
stopifnot(type=="sss")
if(type=="sss"){
dfc <- (M/(M-1))*((N-1)/(N-K))
}
uj <- apply(estfun(x), 2, function(y) tapply(y, cluster, sum))
mycov <- dfc * sandwich(x, meat=crossprod(uj)/N) * dfcw
return(mycov)
}
vcovCL(dat, m, dat$clustervar)
这给了我:
Error: N == length(x$residuals) is not TRUE
Called from: vcovCL(dat, m, dat$clustervar)
【问题讨论】:
-
R 中有许多“有序逻辑回归”的实现。请您edit 提出您的问题,包括加载基本包之上的任何需要库并访问数据集的代码(可能是其中之一)这些包之一中的示例),然后尝试运行分析。
-
(我回答了另一个问题并试图结束这个不太好的问题。)是的,至少对于 vcocCL,缺失会搞砸估计。取出回归的缺失数据似乎是明智的做法。
-
感谢您的评论。我试图更恰当地说明这个问题。也请原谅我忽略了另一个问题的答案。我一定是想说这不是我要找的答案。
-
原始类似问题的链接现已丢失,但您可以通过查看编辑跟踪来返回它。您应该看到 vcovCL 函数将模型对象作为其第一个对象。
标签: r regression logistic-regression