Search code examples
rfor-loopstorelmp-value

lm in for loop no p-values stored? (in R)


I'm trying to fit a regression model to explain donations in dictator games. As I have a lot of variables, I want to automate the process with a 'for' loop. For now I begin with univariate models. When I print/summarise the fits fit[1:24], only the intercepts and coefficients are displayed. It seems like the p-values are not stored?

predictor<-0
fit<-0
dictatorgame<-mydata$dictatorgame
sumres<-0
pVal<-0

for(i in 1:24) #24 predictor variables stored in column 1-24 in mydata
{
predictor<-mydata[i]
unlist(predictor)
fit[i]<-lm(dictatorgame~unlist(predictor))
}

I tried two different solutions I found here on SO, both of them seeming to think that the objects are atomic:

sumres[i]=summary(fit[i])
pf(sumres[i]$fstatistic[1L], sumres[i]$fstatistic[2L],sumres[i]$fstatistic[3L], lower.tail = FALSE)

and

pVal[i] <- (fit[i])$coefficients[,4]

but always end up getting error messages $ operator is invalid for atomic vectors.


Solution

  • I generated some data to perform multiple regressions. At the end you can find the first three elements of the output list. Is it what you want?

    dependent   <- rnorm(1000) 
    independent <- matrix(rnorm(10*1000), ncol = 10)
    
    result <- list()
    for (i in 1:10){
      result[[i]] <- lm(dependent ~ independent[ ,i])
    }
    
    lapply(result, function(x) summary(x)$coefficients )
    
    [[1]]
                        Estimate Std. Error    t value  Pr(>|t|)
    (Intercept)      -0.02890665 0.03167108 -0.9127144 0.3616132
    independent[, i] -0.04605868 0.03138201 -1.4676776 0.1425069
    
    [[2]]
                        Estimate Std. Error    t value  Pr(>|t|)
    (Intercept)      -0.03142412 0.03161656 -0.9939134 0.3205060
    independent[, i] -0.03874678 0.03251463 -1.1916723 0.2336731
    
    [[3]]
                        Estimate Std. Error    t value  Pr(>|t|)
    (Intercept)      -0.03208370 0.03162904 -1.0143749 0.3106497
    independent[, i]  0.02089094 0.03189098  0.6550737 0.5125713