我有点问题。我正在尝试开发一些代码,使我能够做到以下几点:1(运行逻辑回归分析,2(从逻辑回归分析中提取估计值,3(使用这些估计值创建另一个逻辑回归公式,我可以在后续模拟原始模型时使用。由于我是R的新手,我知道我可以通过索引来提取这些系数1-by-1,但很难";比例尺;这适用于具有不同系数数量的模型。我想知道是否有更好的方法来提取系数并设置公式。然后,我必须开发实际的变量,但这些变量的开发必须对任何数量的变量和分布都足够灵活。这在Mplus中似乎很容易做到(Mplus手册中的例子12.7(,但我在R中还没有弄清楚这一点
#generating the data
set.seed(1)
gender <- sample(c(0,1), size = 100, replace = TRUE)
age <- round(runif(100, 18, 80))
xb <- -9 + 3.5*gender + 0.2*age
p <- 1/(1 + exp(-xb))
y <- rbinom(n = 100, size = 1, prob = p)
#grabbing the coefficients from the logistic regression model
matrix_coef <- summary(glm(y ~ gender + age, family = "binomial"))$coefficients
the_estimates <- matrix_coef[,1]
the_estimates
the_estimates[1]
the_estimates[2]
the_estimates[3]
我似乎不知道如何让R以灵活的方式用原始模型中的变量(x(和系数创建公式,以适应任何数量的变量和不同的分布。这不是课堂作业,而是我正在进行的研究的必要部分。任何帮助都将不胜感激,请将此视为一个教学时刻。我真的很想学这个。
我不能100%确定你的问题是什么。
如果你想用相同的预测变量模拟来自同一模型的新数据,你可以使用simulate()
方法:
dd <- data.frame(y, gender, age)
## best practice when modeling in R: take the variables from a data frame
model <- glm(y ~ gender + age, data = dd, family = "binomial")
simulate(model)
您可以通过指定nsim=
参数创建多个复制(或者您可以每次通过for()
循环重新模拟(
如果你想模拟来自不同预测变量集的新数据,你必须做更多的工作(R中的一些模型类型有newdata=
参数,但没有GLM,唉(:
## simulate new model matrix (including intercept)
simdat <- cbind(1,
gender = rbinom(100, prob = 0.5, size = 1),
age = sample(18:80, size = 100, replace = TRUE))
## extract inverse-link function
invlink <- family(model)$linkinv
## sample new values
resp <- rbinom(n = 100, size = 1, prob = invlink(simdat %*% coef(model)))
如果以后要根据已存储的系数执行此操作,请将检索到的系数向量替换为上面代码中的coef(model)
。
如果你想灵活地构造公式,reformulate()
是你的朋友——但我不认为它适合这里。
如果你想(比如(将模型重新拟合1000次,以适应从原始模型拟合模拟的新响应(相同的系数,相同的预测因子:即参数引导(,你可以这样做。
nsim <- 1000
res <- matrix(NA, ncol = length(coef(model)), nrow = nsim)
for (i in 1:nsim) {
## simulate returns a list (in this case, of length 1);
## extract the response vector
newresp <- simulate(model)[[1]]
newfit <- update(model, newresp ~ .)
res[i,] <- coef(newfit)
}
您不必存储系数-您可以提取/计算任何您喜欢的模型摘要(适当更改res
的列数(。
假设您的数据矩阵,包括age
和gender
,或者任何预测因子,都是X
。然后,您可以使用glm
公式右侧的X
,获得xb_hat <- X %*% the_estimates
(或任何其他数据矩阵来代替X
,只要它有相同的列(,并将xb_hat
插入到您想要的任何链接函数中。