R中的单变量逻辑回归

时间:2021-07-30 10:30:08

标签: r glm

我正在尝试进行单变量逻辑回归分析。输入是一个包含 1 个响应变量、一些人口统计数据(年龄、性别和种族)和 >100 个预测变量的数据框。为了分析它,我一直在使用:

#Function
proc_glm <- function(predictors) {
    univariate <- glm(Data$Outcome ~ predictors, family = binomial)
    
    return(cbind(coef(summary(univariate)),OR = exp(coef(univariate)), exp(confint(univariate))))
  }

#Call Function
glm_output <- lapply(Data[5:150], proc_glm)

这在整个数据库上完全正常。然后我根据种族对数据进行了子集化,我使用了:

Data1 <- subset(Data,Ethnicity==0)

没有明显问题; “数据 1”的行数比“数据”少,但变量数相同。没有缺失数据。

然后我尝试运行与以前相同的分析,在两个地方将 Data1 替换为 Data,但出现以下错误:

<块引用>

cbind(coef(summary(univariate)), OR = exp(coef(univariate)) 中的错误,: 矩阵的行数必须匹配(参见参数 3)

我不确定我更改了什么导致错误。 我正在研究 R Studio - 版本 1.2.1335

数据如下所示:

Data <-cbind(
  data.frame(
    Age=sample(20:80,50),
    Gender=sample(0:1,size=50,replace=TRUE),
    Ethnicity=sample(0:2,size=50,replace=TRUE),
    Outcome=sample(0:1,size=50,replace=TRUE)
  ),
  data.frame(replicate(100,sample(0:2,50,rep=TRUE)))
)

1 个答案:

答案 0 :(得分:0)

问题在于您在函数中使用了参数预测器和全局变量 Data(因此它始终使用 Outcome 的每一行)。您需要将结果列作为参数传入,以便它与预测变量的行数相匹配。

Data <-cbind(
  data.frame(
    Age=sample(20:80,50),
    Gender=sample(0:1,size=50,replace=TRUE),
    Ethnicity=sample(0:2,size=50,replace=TRUE),
    Outcome=sample(0:1,size=50,replace=TRUE)
  ),
  data.frame(replicate(100,sample(0:2,50,rep=TRUE)))
)

proc_glm <- function(predictors, outcome) {
  univariate <- glm(outcome ~ predictors, family = binomial)
  
  return(cbind(coef(summary(univariate)),OR = exp(coef(univariate)), exp(confint(univariate))))
}

glm_output <- lapply(Data[5:100], proc_glm, outcome=Data$Outcome)

Data1 <- subset(Data,Ethnicity==0)
glm_output <- lapply(Data1[5:100], proc_glm, outcome=Data1$Outcome)