繁体   English   中英

具有简单线性回归的嵌套循环

[英]Nested loop with simple linear regression

我知道有关此主题的几篇文章,请参阅此处从简单线性回归打印和导出循环和此处如何在 R 中循环/重复线性回归

但是,我感兴趣的不仅是一组预测变量,还有一组结果。 请在下面查看我的代码尝试。

set.seed(42)
n <- 100
age <- runif(n, min=45, max=85)
sex <-  factor(sample(c('Male','Female'), n, rep=TRUE, prob=c(.6, .4)))
smoke <- factor(sample(c("Never", 'Former', 'Current'), n, rep=TRUE, prob=c(.25, .6, .15)))
bmi <- runif(n, min=16, max=45)
outcome1 <- rbinom(n = 100, size = 1, prob = 0.3)
outcome2 <- rbinom(n = 100, size = 1, prob = 0.13)
predictorlist<- list("age","sex", "bmi", "smoke")
outcomelist <- list("outcome1","outcome2")

for (i in predictorlist){ 
  for (j in outcomelist){ 
    model <- lm(paste("j ~", i[[1]])) 
    print(summary(model)) 
  } 
}

在这样做时,我收到以下错误消息:

Error in model.frame.default(formula = paste("j ~", i[[1]]), drop.unused.levels = TRUE) : 
  variable lengths differ (found for 'age')

快速检查它们的长度会发现一切都井井有条

> length(age)
[1] 100
> length(sex)
[1] 100
> length(bmi)
[1] 100
> length(smoke)
[1] 100
> length(outcome1)
[1] 100
> length(outcome2)
[1] 100

任何帮助自然都会受到极大的赞赏。

my_models <- list()
n <- 1
for (i in 1:length(predictorlist)){ 
  for (j in 1:length(outcomelist)){ 
    model <- lm(paste(outcomelist[[j]], "~", predictorlist[[i]]))
    my_models[[n]]<-data.frame(ModelNo=n,coefficients(summary(model)))

    n <- n+1
  } 
}

do.call(rbind,my_models)

给,

                 ModelNo      Estimate  Std..Error       t.value     Pr...t..
#    (Intercept)        1  4.997536e-01 0.239278415  2.088586e+00 0.0393369696
#    age                1 -3.936905e-03 0.003567878 -1.103430e+00 0.2725424813
#    (Intercept)1       2  3.600995e-01 0.188106966  1.914334e+00 0.0584945208
#    age1               2 -3.487458e-03 0.002804861 -1.243362e+00 0.2167006313
#    (Intercept)2       3  2.173913e-01 0.063533308  3.421690e+00 0.0009091606
#    sexMale            3  4.186795e-02 0.086457881  4.842584e-01 0.6292829854
#    (Intercept)3       4  1.304348e-01 0.050088617  2.604080e+00 0.0106444776
#    sexMale1           4 -8.051530e-04 0.068161974 -1.181235e-02 0.9905993425
#    (Intercept)4       5  3.919620e-01 0.159188779  2.462246e+00 0.0155528798
#    bmi                5 -4.967139e-03 0.005010602 -9.913259e-01 0.3239678274
#    (Intercept)5       6  1.085051e-01 0.125958776  8.614332e-01 0.3911023372
#    bmi1               6  7.025988e-04 0.003964659  1.772154e-01 0.8597049249
#    (Intercept)6       7  3.333333e-01 0.111424058  2.991574e+00 0.0035189594
#    smokeFormer        7 -1.036036e-01 0.122196316 -8.478456e-01 0.3986112406
#    smokeNever         7 -1.515152e-01 0.171304709 -8.844774e-01 0.3786256699
#    (Intercept)7       8  5.551115e-16 0.085820144  6.468313e-15 1.0000000000
#    smokeFormer1       8  1.756757e-01 0.094117066  1.866566e+00 0.0649830089
#    smokeNever1        8 -1.638898e-16 0.131940938 -1.242145e-15 1.0000000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM