gpt4 book ai didi

r - 更正(或引导)两阶段 glm 的标准错误(下标越界)

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

交叉发布于 CrossValidated .
我正在尝试根据 this link 为 2SLS 方法 (2SRI) 的变体引导我的结果.出于某种原因, Bootstrap 不会产生任何结果。

library(sure) # for residual function and sample data sets
library(MASS) # for polr function
rm(df1)
df1 <- df1
df1$x2 <- df2$y
df1$x3 <- df2$x
df1$y <- df3$x/10
fit.polr <- polr(x2 ~ x + x3, data = df1, method = "probit")

# BOOTSTRAPPING
library(boot)
glm_2siv_coef <- function(data,indices){
d <- data[indices,]
stage_1 <- polr(x2 ~ x + x3, Hess=TRUE, data=d)
stage_2 <- glm(y ~ x + x2 + x3 + resids(stage_1),
family = "quasibinomial", data=d)
return(summary(stage_2)$estimate["x2",1])
}

boot.results <- boot(data=df1,statistic=glm_2siv_coef,R=1)
boot.results
生产: Error in boot.out$t[, index] : subscript out of bounds当我查看 boot.results 时, t0t值是空的,它们不应该是空的。
谁能帮我弄清楚为什么?

最佳答案

我不确定我是否理解模型本身,但据我所知,这不是模型的问题。
问题是你传给boot的函数没有返回任何东西。这有两个原因:一是glm的摘要中没有元素。这就是所谓的估计,所以 summary(stage_2)$estimateNULL .其次,即使第一个问题不存在,也不存在名称为"x2"的系数。 .这是因为 x2 是一个有序因子,它在内部变成了哑元。
您可以按如下方式调整代码:

glm_2siv_coef <- function(data,indices){
d <- data[indices,]
stage_1 <- polr(x2 ~ x + x3, Hess=TRUE, data=d)
stage_2 <- glm(y ~ x + x2 + x3 + resids(stage_1),
family = "quasibinomial", data=d)
return(stage_2$coefficients)
}
boot.results <- boot(data=df1, statistic=glm_2siv_coef, R=100)
boot.results
您需要自己决定哪些估计是您感兴趣的,但这为您提供了所有系数的引导 SE。还要注意我增加了 R到 100,因为单个引导样本没有任何意义。出于说明目的,我将其保持在较低水平,因此您应该考虑增加它。

关于r - 更正(或引导)两阶段 glm 的标准错误(下标越界),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67016452/

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