Iterating Effect Size Calculations Through Columns

Viewed 117

I am currently comparing the size of 159 regions (ROI) in the brain between an at-risk and normal population on R. I originally calculated lm model p-values using this loop:

storage <- list()
for(i in names(ThalPC)[-c(1:8)]){
  storage[[i]] <- lm(get(i) ~ Status, ThalPC)
}

table <-  storage %>% tibble(
    dvsub = names(.),
    untidied = .
    ) %>%
  mutate(tidy = map(untidied, broom::tidy)) %>%
  unnest(tidy) 

tab <- as.data.frame(table)

to <- subset(tab, select = -c(2))

newtable <- filter(to, term == "StatusControl")

ThalPC= my data frame Status = Their status as Control or at-risk population

Now, I have around 59 regions with significant p-values and I am hoping to calculate the effect sizes for them. Currently I am trying to use this loop:

stor <- list()
for(i in names(ThalPC)[-c(1:9)]) {
  stor[[i]] <- lm(get(i) ~ Status, ThalPC)
try <- effectsize(stor[[i]], type="eta")
}

However, I get the following error:

Error in get(i) : object 'Left_LGN' not found

(Left_LGN being a region that I am studying, all the 159 regions are set up as columns through the data frame)

Perhaps I am overthinking it, does anyone know any simple solution/ better approach to getting the effect sizes for them?

I am still a beginner in R and statistics so I really appreciate your input!! Thank you!

1 Answers

I would guess you used attach(ThalPC) before running your first script to add columns of ThalPC to the search path. Instead, try constructing your call to lm as:

stor[[i]] <- lm(as.formula(paste(i, "~ Status")), 
    data = ThalPC)

It looks like you might want to collect the output of effectsize as elements of a list too, otherwise you're overwriting it each time.

Related