gpt4 book ai didi

r - 从 glm 模型中提取引用类别的最佳方法?

转载 作者:行者123 更新时间:2023-12-01 03:52:40 26 4
gpt4 key购买 nike

我正在编写一个接受 full 的函数和一个 reduced glm用于汇总感兴趣变量的交互结果的对象 varofint和交互变量 interaction_var (通过执行 lrtest 并在 svycontrast 对象上使用 fullvarofint 的每个级别提取 interaction_var 的结果)。样本数据:

x <- data.frame(outcome=rbinom(100,1,.3),varofint=rnorm(100), interaction_var=sample(letters[1:3],100,replace=TRUE))

reduced <- glm(outcome~varofint+interaction_var,data=x)
full <- glm(outcome~varofint*interaction_var,data=x)

我想知道为所述( full )glm 模型提取引用类别的最佳方法。我显然可以做类似的事情
levels(full$data$interaction_var)[1]
但这是否是一种“安全”的方法来提取引用类别给定输入到 contrasts争论?看起来,给定选择 SAS 对比度的选项,这种方法可以产生 interactionv_var 的水平。这不是模型中用作引用类别的那个。以下会更安全吗?
mf <- model.frame(full)
setdiff(rownames(contrasts(mf[, "interaction_var"])), colnames(contrasts(mf[, "interaction_var"])))

或类似
names(which(apply(contrasts(mf[, "interaction_var"]),1,function(.v){all(.v==0)})))

我是否缺少一种更简单的方法来提取引用类别?

最佳答案

这是此任务的函数:

refCat <- function(model, var) {
cs <- attr(model.matrix(model), "contrasts")[[var]]
if (is.character(cs)) {
if (cs == "contr.treatment")
ref <- 1
else stop("No treatment contrast")
}
else {
zeroes <- !cs
ones <- cs == 1
stopifnot(all(zeroes | ones))
cos <- colSums(ones)
stopifnot(all(cos == 1))
ros <- rowSums(ones)
stopifnot(sum(!ros) == 1 && sum(ros) != ncol(cs))
ref <- which(!ros)
}
return(levels(model$data[[var]])[ref])
}

如果变量 var,该函数将停止不表示为治疗对比。

例子:
refCat(reduced, "interaction_var")
# [1] "a"
refCat(full, "interaction_var")
# [1] "a"

关于r - 从 glm 模型中提取引用类别的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752911/

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