-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Dear all, I have a problem when trying to present the results of several regression. Say I have run several regressions on a dataset and saved the different results (as in the mini example below). I then want to loop over the regression results in order so save certain values to a matrix (in order to put them into a paper or presentation). Aside from the question of how to access certain information stored by lm() (or printed by summary()) I can't seem to so loop over lm() objects -- no matter whether they are stored in a vector or a list. They are always evaluated immediately when called. I tried quote() or substitute() but that didn't work either as "Objects of type 'symbol' cannot be indexed." In Stata I would simply do something like forvalues k = 1/3 { quietly estimates restore mod`k' // [...] } and I am looking for the R equivalent of that syntax. Kind regard and thanks RK attach(iris) mod1 <- lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species=="setosa") mod2 <- lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species=="versicolor") mod3 <- lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species=="virginica") summary(mod1); summary(mod2); summary(mod3) mat <- matrix(data=NA, nrow=3, ncol=5, dimnames=list(1:3, c("Model", "Intercept", "p(T > |T|)", "Slope", "R^2"))) mods <- c(mod1, mod2, mod3) for(k in 1:3) { mod <- mods[k] mat[2,k] <- as.numeric(coef(mod))[1] mat[3,k] <- as.numeric(coef(mod))[1] } -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJU4fJnAAoJEKdHe5EUSrVeafwIALerOj+rsZTnbSKOUX6vYpr4 Uqsx0X2g+IgJw0KLdyqnlDmOut4wW6sWExtVgiugo/bkN8g5rDotGAl06d0UYRQV 17aLQqQjI6EGXKV9swwlm2DBphtXCIYUCXnDWUoG4Y2wC/4hDnaLbZ9yJFF1GSjn +aN/PFf1mPPZLvF1NgMmzLdszP76VYzEgcOcEUfbmB7RU/2WEBLeBYJ8+FD1utPJ cnh03rSc/0dgvphP8FO47Nj7mbqqhKL76a9oQqJSJiZJoCFCGiDIIgzq7vwGWc4T 9apwC/R3ahciB18yYOSMq7ZkVdQ+OpsqDTodnnIIUZjrVIcn9AI+GE0eq1VdLSE=x+gM -----END PGP SIGNATURE-----
In R you would want to combine the results into a list. This could be done when you create the regressions or afterwards. To repeat your example using a list: data(iris) taxon <- levels(iris$Species) mod <- lapply(taxon, function (x) lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species==x)) names(mod) <- taxon lapply(mod, summary) coeffs <- do.call(rbind, lapply(mod, coef, "[1")) coeffs # (Intercept) Petal.Width # setosa 3.222051 0.8371922 # versicolor 1.372863 1.0536478 # virginica 1.694773 0.6314052 ------------------------------------- David L Carlson Department of Anthropology Texas A&M University College Station, TX 77840-4352 -----Original Message----- From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Ronald K?lpin Sent: Monday, February 16, 2015 7:37 AM To: r-help at r-project.org Subject: [R] Loop over regression results -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Dear all, I have a problem when trying to present the results of several regression. Say I have run several regressions on a dataset and saved the different results (as in the mini example below). I then want to loop over the regression results in order so save certain values to a matrix (in order to put them into a paper or presentation). Aside from the question of how to access certain information stored by lm() (or printed by summary()) I can't seem to so loop over lm() objects -- no matter whether they are stored in a vector or a list. They are always evaluated immediately when called. I tried quote() or substitute() but that didn't work either as "Objects of type 'symbol' cannot be indexed." In Stata I would simply do something like forvalues k = 1/3 { quietly estimates restore mod`k' // [...] } and I am looking for the R equivalent of that syntax. Kind regard and thanks RK attach(iris) mod1 <- lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species=="setosa") mod2 <- lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species=="versicolor") mod3 <- lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species=="virginica") summary(mod1); summary(mod2); summary(mod3) mat <- matrix(data=NA, nrow=3, ncol=5, dimnames=list(1:3, c("Model", "Intercept", "p(T > |T|)", "Slope", "R^2"))) mods <- c(mod1, mod2, mod3) for(k in 1:3) { mod <- mods[k] mat[2,k] <- as.numeric(coef(mod))[1] mat[3,k] <- as.numeric(coef(mod))[1] } -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJU4fJnAAoJEKdHe5EUSrVeafwIALerOj+rsZTnbSKOUX6vYpr4 Uqsx0X2g+IgJw0KLdyqnlDmOut4wW6sWExtVgiugo/bkN8g5rDotGAl06d0UYRQV 17aLQqQjI6EGXKV9swwlm2DBphtXCIYUCXnDWUoG4Y2wC/4hDnaLbZ9yJFF1GSjn +aN/PFf1mPPZLvF1NgMmzLdszP76VYzEgcOcEUfbmB7RU/2WEBLeBYJ8+FD1utPJ cnh03rSc/0dgvphP8FO47Nj7mbqqhKL76a9oQqJSJiZJoCFCGiDIIgzq7vwGWc4T 9apwC/R3ahciB18yYOSMq7ZkVdQ+OpsqDTodnnIIUZjrVIcn9AI+GE0eq1VdLSE=x+gM -----END PGP SIGNATURE----- ______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Or for the slopes and t-values:> do.call(rbind, lapply(mod, function(x) summary(x)[["coefficients"]][2,]))Estimate Std. Error t value Pr(>|t|) setosa 0.8371922 0.5049134 1.658091 1.038211e-01 versicolor 1.0536478 0.1712595 6.152348 1.466661e-07 virginica 0.6314052 0.1428938 4.418702 5.647610e-05 David C -----Original Message----- From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of David L Carlson Sent: Monday, February 16, 2015 8:52 AM To: Ronald K?lpin; r-help at r-project.org Subject: Re: [R] Loop over regression results In R you would want to combine the results into a list. This could be done when you create the regressions or afterwards. To repeat your example using a list: data(iris) taxon <- levels(iris$Species) mod <- lapply(taxon, function (x) lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species==x)) names(mod) <- taxon lapply(mod, summary) coeffs <- do.call(rbind, lapply(mod, coef, "[1")) coeffs # (Intercept) Petal.Width # setosa 3.222051 0.8371922 # versicolor 1.372863 1.0536478 # virginica 1.694773 0.6314052 ------------------------------------- David L Carlson Department of Anthropology Texas A&M University College Station, TX 77840-4352 -----Original Message----- From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Ronald K?lpin Sent: Monday, February 16, 2015 7:37 AM To: r-help at r-project.org Subject: [R] Loop over regression results -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Dear all, I have a problem when trying to present the results of several regression. Say I have run several regressions on a dataset and saved the different results (as in the mini example below). I then want to loop over the regression results in order so save certain values to a matrix (in order to put them into a paper or presentation). Aside from the question of how to access certain information stored by lm() (or printed by summary()) I can't seem to so loop over lm() objects -- no matter whether they are stored in a vector or a list. They are always evaluated immediately when called. I tried quote() or substitute() but that didn't work either as "Objects of type 'symbol' cannot be indexed." In Stata I would simply do something like forvalues k = 1/3 { quietly estimates restore mod`k' // [...] } and I am looking for the R equivalent of that syntax. Kind regard and thanks RK attach(iris) mod1 <- lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species=="setosa") mod2 <- lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species=="versicolor") mod3 <- lm(Sepal.Width ~ Petal.Width, data=iris, subset=Species=="virginica") summary(mod1); summary(mod2); summary(mod3) mat <- matrix(data=NA, nrow=3, ncol=5, dimnames=list(1:3, c("Model", "Intercept", "p(T > |T|)", "Slope", "R^2"))) mods <- c(mod1, mod2, mod3) for(k in 1:3) { mod <- mods[k] mat[2,k] <- as.numeric(coef(mod))[1] mat[3,k] <- as.numeric(coef(mod))[1] } -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJU4fJnAAoJEKdHe5EUSrVeafwIALerOj+rsZTnbSKOUX6vYpr4 Uqsx0X2g+IgJw0KLdyqnlDmOut4wW6sWExtVgiugo/bkN8g5rDotGAl06d0UYRQV 17aLQqQjI6EGXKV9swwlm2DBphtXCIYUCXnDWUoG4Y2wC/4hDnaLbZ9yJFF1GSjn +aN/PFf1mPPZLvF1NgMmzLdszP76VYzEgcOcEUfbmB7RU/2WEBLeBYJ8+FD1utPJ cnh03rSc/0dgvphP8FO47Nj7mbqqhKL76a9oQqJSJiZJoCFCGiDIIgzq7vwGWc4T 9apwC/R3ahciB18yYOSMq7ZkVdQ+OpsqDTodnnIIUZjrVIcn9AI+GE0eq1VdLSE=x+gM -----END PGP SIGNATURE----- ______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.