通过不同的数据框进行回归
Regression through different data frames
我有几个数据框(名称不同),如下所示,行数和列数相同,但最后一列的名称不同。
df1:
ID matching_variable STATUS code_1
1 1 1 1
2 1 0 1
3 2 1 0
4 2 1 0
df2:
ID matching_variable STATUS code_2
1 1 1 1
2 1 0 0
3 2 1 0
4 2 1 1
我有大约十几个这样的 df,我想为每个 df 做这种风格的逻辑回归:
fit1<-clogit(STATUS~code_1+strata(matching_variable),data=df1)
fit2<-clogit(STATUS~code_2+strata(matching_variable),data=df2)
等等……
我想创建一个函数来“自动化”这个(无需编写所有回归)并将回归的所有输出放在一个新的 table.
中
我想过使用类似这个函数的东西:(但是由于我对 df 和最后一列的名称不同,所以我卡住了...)
list<-list(df1,df2)
results<- lapply(list, function(x) {clogit(STATUS ~ code_??? + strata(matching_variable), data=???, l)})
提前谢谢你。
创建一个自定义函数,找到最后一列并将其作为公式在 clogit 中使用,如下所示,未测试:
myClogit <- function(d){
lastColName <- tail(colnames(d), 1)
f <- as.formula(
paste("STATUS ~", lastColName, "+ strata(matching_variable)"))
clogit(f, data = d)
}
然后 make a list of dataframes 并循环:
lapply(list(df1, df2), myClogit)
另一种可能的解决方案,基于purrr::map
:
library(purrr)
library(survival)
map(list(df1, df2), ~ clogit(STATUS ~ .x[,4] + strata(matching_variable), data=.x))
#> Warning in coxexact.fit(X, Y, istrat, offset, init, control, weights =
#> weights, : Ran out of iterations and did not converge
#> [[1]]
#> Call:
#> clogit(STATUS ~ .x[, 4] + strata(matching_variable), data = .x)
#>
#> coef exp(coef) se(coef) z p
#> .x[, 4] NA NA 0 NA NA
#>
#> Likelihood ratio test=0 on 0 df, p=1
#> n= 4, number of events= 3
#>
#> [[2]]
#> Call:
#> clogit(STATUS ~ .x[, 4] + strata(matching_variable), data = .x)
#>
#> coef exp(coef) se(coef) z p
#> .x[, 4] 2.020e+01 5.943e+08 2.438e+04 0.001 0.999
#>
#> Likelihood ratio test=1.39 on 1 df, p=0.239
#> n= 4, number of events= 3
我有几个数据框(名称不同),如下所示,行数和列数相同,但最后一列的名称不同。
df1:
ID matching_variable STATUS code_1
1 1 1 1
2 1 0 1
3 2 1 0
4 2 1 0
df2:
ID matching_variable STATUS code_2
1 1 1 1
2 1 0 0
3 2 1 0
4 2 1 1
我有大约十几个这样的 df,我想为每个 df 做这种风格的逻辑回归:
fit1<-clogit(STATUS~code_1+strata(matching_variable),data=df1)
fit2<-clogit(STATUS~code_2+strata(matching_variable),data=df2)
等等……
我想创建一个函数来“自动化”这个(无需编写所有回归)并将回归的所有输出放在一个新的 table.
中我想过使用类似这个函数的东西:(但是由于我对 df 和最后一列的名称不同,所以我卡住了...)
list<-list(df1,df2)
results<- lapply(list, function(x) {clogit(STATUS ~ code_??? + strata(matching_variable), data=???, l)})
提前谢谢你。
创建一个自定义函数,找到最后一列并将其作为公式在 clogit 中使用,如下所示,未测试:
myClogit <- function(d){
lastColName <- tail(colnames(d), 1)
f <- as.formula(
paste("STATUS ~", lastColName, "+ strata(matching_variable)"))
clogit(f, data = d)
}
然后 make a list of dataframes 并循环:
lapply(list(df1, df2), myClogit)
另一种可能的解决方案,基于purrr::map
:
library(purrr)
library(survival)
map(list(df1, df2), ~ clogit(STATUS ~ .x[,4] + strata(matching_variable), data=.x))
#> Warning in coxexact.fit(X, Y, istrat, offset, init, control, weights =
#> weights, : Ran out of iterations and did not converge
#> [[1]]
#> Call:
#> clogit(STATUS ~ .x[, 4] + strata(matching_variable), data = .x)
#>
#> coef exp(coef) se(coef) z p
#> .x[, 4] NA NA 0 NA NA
#>
#> Likelihood ratio test=0 on 0 df, p=1
#> n= 4, number of events= 3
#>
#> [[2]]
#> Call:
#> clogit(STATUS ~ .x[, 4] + strata(matching_variable), data = .x)
#>
#> coef exp(coef) se(coef) z p
#> .x[, 4] 2.020e+01 5.943e+08 2.438e+04 0.001 0.999
#>
#> Likelihood ratio test=1.39 on 1 df, p=0.239
#> n= 4, number of events= 3