Reputation: 19
I have 202×500 matrix that contains data for 200 variables in 500 people(data1.txt). y is binary data(0=control, 1= case)
case y x_1 x_2 X_3 x_4・・・・x_200
1 1
2 0
3 1
4 0
500 0
I would like to make logistic regression for x_1 to X_200(only one variable and no covariates) using R. y~X_, data=sample,family=binomial(=1・・200) Are there any easy way to run this analysis not using for loop?
Upvotes: 0
Views: 178
Reputation: 23598
If you do not want a explicit loop, you could use map
from the purrr
package. This will do what you want. Below is example code based on your info. Probably not the best code, but should get you started. The glms are stored in the my_glms
list object. More info read the vignettes of purrr
and broom
.
library(purrr)
sample <- data.frame(Y = c(0,0,0,0,1,1,1,1),
x_1 = c(1,2,3,4,5,6,7,8),
x_2 = c(2,3,4,5,6,7,8,9))
my_glms <- map(sample[,-1], #remove Y otherwise glm also on Y
~ glm(Y ~ .x, data = sample, family = binomial))
#using the tidy function from broom
library(broom)
map(my_glms, tidy)
$x_1
term estimate std.error statistic p.value
1 (Intercept) -206.12214 365130.9 -0.0005645158 0.9995496
2 .x 45.80492 80643.9 0.0005679899 0.9995468
$x_2
term estimate std.error statistic p.value
1 (Intercept) -251.92706 445370.6 -0.0005656572 0.9995487
2 .x 45.80492 80643.9 0.0005679899 0.9995468
Of course all this can be done in 1 line of code but this shows the steps and you can adjust where needed.
Upvotes: 2