【问题标题】:Reproduce binomial glm using only the model object仅使用模型对象重现二项式 glm
【发布时间】:2014-10-24 10:39:22
【问题描述】:

我正在尝试在 R 中重现二项式 glm 的结果。

考虑来自这里的数据http://www.ats.ucla.edu/stat/r/dae/logit.htm

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")

我可以使用以下方法拟合模型:

model <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")

并且,仅使用对象重现模型:

model_r <- glm(as.numeric(model$y)~0+model.matrix(model), family = binomial)
cbind(coef(model), coef(model_r))
##                    [,1]        [,2]
## (Intercept) -3.44954840 -3.44954840
## gre          0.00229396  0.00229396
## gpa          0.77701357  0.77701357
## rank        -0.56003139 -0.56003139

现在假设列admit 是列中的论文数n 中的成功数:

mydata$n <- 1 + rbinom(n = 400, size = 2, prob = 0.5)

现在我必须使用以下方法拟合模型:

model <- glm(cbind(admit, n-admit) ~ gre + gpa + rank, data = mydata, 
                family = "binomial")

如何仅使用模型对象重现此模型?我问这个是因为 R 只保留 model$y 中的成功率。

【问题讨论】:

  • “复制”模型的目的是什么?
  • 也许这不是我应该问的问题。我需要使用拟合概率生成二项式样本,所以我试图让 n 用于拟合。
  • 现在用你的第二种方法我可以很容易地得到我想要的。谢谢
  • 你可以使用model$data$n

标签: r statistics glm


【解决方案1】:

您可以通过以下方式重现模型:

model_r <- glm(formula(model), model$data, family = family(model))

比较:

cbind(coef(model), coef(model_r))
#                     [,1]         [,2]
# (Intercept) -3.693688931 -3.693688931
# gre          0.001855502  0.001855502
# gpa          0.584915067  0.584915067
# rank        -0.450051862 -0.450051862

或者(类似于您的方法):

model_r2 <- glm(model.frame(model)[[1]] ~ 0 + model.matrix(model), 
                family = family(model))

cbind(coef(model), coef(model_r2))
#                     [,1]         [,2]
# (Intercept) -3.693688931 -3.693688931
# gre          0.001855502  0.001855502
# gpa          0.584915067  0.584915067
# rank        -0.450051862 -0.450051862

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-09
    • 2016-09-07
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多