我正在尝试进行单变量逻辑回归分析。输入是一个包含 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)))
)
答案 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)