在中R
,有三种方法可以使用glm
函数来格式化输入数据以进行逻辑回归:
- 对于每个观察,数据可以采用“二进制”格式(例如,对于每个观察,y = 0或1);
- 数据可以采用“ Wilkinson-Rogers”格式(例如
y = cbind(success, failure)
),每一行代表一种治疗;要么 - 数据可以是每个观测值的加权格式(例如,y = 0.3,权重= 10)。
这三种方法均产生相同的系数估计值,但自由度以及由此产生的偏差值和AIC分数不同。后两种方法具有较少的观测值(因此也具有自由度),因为它们将每种处理用于观测值的数量,而第一种方法将每种观测值用作观测值的数量。
我的问题:使用一种输入格式比使用另一种输入格式有数字或统计优势吗?我看到的唯一好处是不必重新格式化数据R
即可与模型一起使用。
我查看了glm文档,在网络上搜索了该站点,发现了一个与切向相关的帖子,但没有有关该主题的指导。
这是一个模拟示例,演示了此行为:
# Write function to help simulate data
drc4 <- function(x, b =1.0, c = 0, d = 1, e = 0){
(d - c)/ (1 + exp(-b * (log(x) - log(e))))
}
# simulate long form of dataset
nReps = 20
dfLong <- data.frame(dose = rep(seq(0, 10, by = 2), each = nReps))
dfLong$mortality <-rbinom(n = dim(dfLong)[1], size = 1,
prob = drc4(dfLong$dose, b = 2, e = 5))
# aggregate to create short form of dataset
dfShort <- aggregate(dfLong$mortality, by = list(dfLong$dose),
FUN = sum)
colnames(dfShort) <- c("dose", "mortality")
dfShort$survival <- nReps - dfShort$mortality
dfShort$nReps <- nReps
dfShort$mortalityP <- dfShort$mortality / dfShort$nReps
fitShort <- glm( cbind(mortality, survival) ~ dose,
data = dfShort,
family = "binomial")
summary(fitShort)
fitShortP <- glm( mortalityP ~ dose, data = dfShort,
weights = nReps,
family = "binomial")
summary(fitShortP)
fitLong <- glm( mortality ~ dose, data = dfLong,
family = "binomial")
summary(fitLong)
svyglm
通过调查软件包,您可以更好地处理权重参数。