r - for循环中的多个glm

标签 r for-loop glm

我有一个 R 数据框,高度简化为:

id <- rep(1:2, c(6,8))
correct <- sample(0:1,14,TRUE)
phase <- c(rep("discr",3),rep("rev",3), rep("discr",4),rep("rev",4))
dat <- data.frame(id,correct,phase)

id作为我的主题(实际上我的主题远不止 2 个),correct = 响应编码为不正确 (0) 或正确 (1),以及 phases歧视和逆转(受试者内因素)。

我想以以下形式执行逻辑回归
glm(correct~phase, dat, family="binomial")

稍后可能会添加额外的预测变量。
但是,由于每个主题的数据量不同,我想执行 glm()分别为每个主题,然后比较系数与方差分析的群体效应。
我想以以下形式在 for 循环中执行此操作
for(i in seq_along(dat$id)){
   my_glm[i] <- glm(correct~list,dat[dat$id==i,],family="binomial")
}

但不断收到错误信息
>Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
 contrasts can be applied only to factors with 2 or more levels.

我检查了我的数据,没有一个因素只包含一个级别。所有受试者至少给出了一个错误和一个正确的回答,并且都参加了歧视和逆转。当我指定特定主题时,该函数在循环之外工作。

最佳答案

您目前正在尝试做 glm对于 id 中的每一行:

我想你想要一个 glm每个id分别。就个人而言,我会选择类似的东西:

library(plyr)

ddply(dat, .(id), function (x){
intercept <- coef(summary(glm(correct~phase,family="binomial",data=x)))[1]
slope     <- coef(summary(glm(correct~phase,family="binomial",data=x)))[2]
c(intercept,slope)                 
                              })

# id         V1            V2
#1  1 -0.6931472  1.386294e+00
#2  2  1.0986123 -6.345448e-16

# here V1 is intercept and V2 is the estimate

关于r - for循环中的多个glm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14483128/

相关文章:

r - 向量化 Gsub 的问题

r - 将行分成 10 组,每组具有相同的值

c - 为什么 for 循环只运行了 4 次就终止了?

javascript - 如果在此代码中输入为空,如何添加?

statistics - 使用高斯族分布来预测 GLM 中的离散量

r - 如何拟合 Skellam 回归?

r:通过 dplyr 的 group_by 函数传递列列表

r - 函数中的 dplyr 管道

FOR 循环后的 Matlab 图例

r - 为什么从 glmnet 模型中获取回归系数的统计摘要信息是不可取的?