Hi:

On Mon, Apr 4, 2011 at 1:33 PM, geral <geraldes@mail.ubc.ca> wrote:

> Thanks!
>
> I must confess I am just a beginner, but I followed your suggestion and did
> 'm <- lm(as.matrix(snp[, -1])  ~ lat, data = snp) ' and it worked
> perfectly.
> I would like to understand what is being done here. as.matrix I understand
> makes my data frame be a matrix, but I don't understand the part snp[,-1].
> I
> think I am saying use all rows of... but I don't understand the -1, does
> that mean, all columns but column 1?
>

Yes.

>
> I really appreciate the help! It was really really valuable.
>
> A related question is, what is m? If I do is.object(m) I get true. so I
> guess it is an object. I now need to use each of the fitted models for more
> things, such as calculate anova, etc... How do I do that? When I do this
> column by column I just do anova(m), but it does not seem to work now...
>

m is the object that gets returned from the model fits. It doesn't just
perform individual linear regressions, it also does multivariate regression.
anova(m) returns a summary of the multivariate tests. summary(m) will print
out the results of the individual fits. I'm fairly certain you want to pick
off individual pieces of output from each model, though, so here's one
approach using the plyr package again.

You'll have a bunch of model fits assigned to the model object m, so the
first step is to assign the summary of each individual model to a list
component. Afterward, it's fairly easy to cherry pick individual pieces.

library(plyr)
h <- llply(summary(m))        # decompose the summaries into a list, one
component for each model

# Significance tests of coefficients in each model
# Each of these components is a matrix, so an easy first step is to use
llply() [list -> list]

llply(h, function(x) coefficients(x))
$`Response y1`
             Estimate Std. Error   t value  Pr(>|t|)
(Intercept) 0.2213683   0.392951 0.5633484 0.5886349
lat         0.3510525   0.511839 0.6858652 0.5121807

$`Response y2`
              Estimate Std. Error    t value  Pr(>|t|)
(Intercept)  0.2862828  0.3803295  0.7527231 0.4731816
lat         -0.8794926  0.4953989 -1.7753222 0.1137593

$`Response y3`
              Estimate Std. Error   t value   Pr(>|t|)
(Intercept) -0.5229037  0.2773981 -1.885030 0.09615855
lat         -0.5023407  0.3613253 -1.390272 0.20190305

# This can be reshaped using the melt() and possibly cast() functions in the
reshape[2] package if desired.

# Everybody loves R^2, so let's create a model-by-model summary using
ldply() [list -> data frame]:
# Note that r.squared is a scalar in each model, so we can ship the result
to a data frame

ldply(h, function(x) x$r.squared)
          .id        V1
1 Response y1 0.0555358
2 Response y2 0.2826250
3 Response y3 0.1945923

Notice that in each case, we are using an 'anonymous function' to take a
model summary object as input (x) and then extracting some piece from it.
llply() and ldply() are convenience functions of sorts for lapply() and
do.call().

The pieces that can be extracted from the output of summary.lm() are
names(h[[1]])    # List components of the summary of an individual model
 [1] "call"          "terms"         "residuals"     "coefficients"
 [5] "aliased"       "sigma"         "df"            "r.squared"
 [9] "adj.r.squared" "fstatistic"    "cov.unscaled"

HTH,
Dennis

Thanks!
> AG
>
> --
> View this message in context:
> http://r.789695.n4.nabble.com/automating-regression-or-correlations-for-many-variables-tp3426091p3426519.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help@r-project.org mailing list
> 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.
>

	[[alternative HTML version deleted]]

