目标是使用结构相同的多个数据框进行单次有序逻辑回归。
在下面的示例中,我加入了两个数据框,以便能够进行单次有序逻辑回归。但是,由于有417个数据帧,我希望有一个可以自动执行此过程的解决方案。
library(dplyr)
library(MASS)
#dataframe 1
party <- factor(rep(c("Rep","Dem"), c(407, 428)),
levels=c("Rep","Dem"))
rpi <- c(30, 46, 148, 84, 99) # cell counts
dpi <- c(80, 81, 171, 41, 55) # cell counts
ideology <- c("Very Liberal","Slightly Liberal","Moderate","Slightly Conservative","Very Conservative")
pol.ideology <- factor(c(rep(ideology, rpi),
rep(ideology, dpi)), levels = ideology)
data1 <- data.frame(party,pol.ideology)
#dataframe 2
party <- factor(rep(c("Rep","Dem"), c(410, 430)),
levels=c("Rep","Dem"))
rpi2 <- c(26, 50, 140, 95, 99) # cell counts
dpi2 <- c(75, 86, 141, 61, 67) # cell counts
ideology2 <- c("Very Liberal","Slightly Liberal","Moderate","Slightly Conservative","Very Conservative")
pol.ideology <- factor(c(rep(ideology2, rpi2),
rep(ideology2, dpi2)), levels = ideology2)
data2 <- data.frame(party,pol.ideology)
nrow(data1)
nrow(data2)
## Joining dataframes "manually"
dat <- bind_rows(data1,data2)
table(dat)
nrow(dat)
# fit proportional odds model
pom <- polr(pol.ideology ~ party, data=dat)
summary(pom)
因此,我尝试循环尝试对data1和date2进行一次回归。我没有成功,因为回归仅考虑data2。
## LOOP
data = ls(pattern="data")
for(i in 1:length(ls(pattern="data"))){
pom <- polr(pol.ideology ~ party, data=i)
}
summary(pom)
有人可以指出我的解决方案吗?我最近开始研究R上的循环主题。很抱歉,这个问题很愚蠢。
答案 0 :(得分:0)
循环中的i
不是数据。它是您在循环外部创建的字符向量的索引。但是要小心地将名称分配给data
,然后在for循环中再创建一个项目!最好重命名。您的其他问题是,您永远不会保存每个模型的结果,只能保存最后一个模型的结果。因此,使用列表将其全部保存,然后套用它们来提取它们。
library(MASS) # For ordered logistic regression (polr)
## LOOP
my_list = ls(pattern="data")
pom <- list() # initialise your pom
for(i in 1:length(my_list)){ # or seq_along(my_list)
pom[[i]] <- polr(pol.ideology ~ party, data=get(my_list[i]))
}
lapply(pom, summary)
您也可以使用lapply
,而无需循环。
答案 1 :(得分:0)
最好的选择是创建一个数据帧列表(假设所有df具有相似的结构,并且在您的环境中都是独立的df,名称分别为 data1 , data2 , data3 ... )
library(tidyverse)
df_list <- map(paste0("data",1:3), ~eval(sym(.x)))
创建列表后。然后您可以轻松地做任何您想做的事。
为单个数据框创建回归 。
result_list <- map(df_list, ~polr(pol.ideology ~ party, data=.x))
或者,如果要创建组合数据框的一个回归。
将所有数据框组合在一起。
big_df <- df_list %>% bind_rows()
对组合df运行回归。 big_df
big_df_result <- polr(pol.ideology ~ party, data= big_df)