Dr. Christoph Scherber
2008-Jun-07 20:38 UTC
[R] Multivariate LM: calculating F-values after calling linear.hypothesis
Dear R users, I am analyzing several response variables (all scaled to [0;1]) using a multivariate linear model. After fitting the model, I set up a hypothesis matrix to test specific contrasts for these response variables; for example: "a always increases significantly more than b when regressed against x". What I am stuck with now is how to calculate the correct F-values (and against how many d.f. to test them) after calling linear.hypothesis from the car package: (assuming there are 80 observations) ## mult=lm(cbind(a,b,c,d,e,f,g)~x) summary(mult) library(car) P <- cbind( c(-1,1,0,0,0,0,0), c(-3,-3,6,6,-3,-3,0), c(0,0,2,0,-1,-1,0), c(0,0,-1,0,1,0,0)) P [,1] [,2] [,3] [1,] -1 -3 0 [2,] 1 -3 0 [3,] 0 6 2 [4,] 0 6 0 [5,] 0 -3 -1 [6,] 0 -3 -1 [7,] 0 0 0 summary(mult) linhyp=linear.hypothesis(mult, "x", P=P) linhyp Response transformation matrix: [,1] [,2] [,3] [,4] [1,] -1 -3 0 0 [2,] 1 -3 0 0 [3,] 0 6 2 -1 [4,] 0 6 0 0 [5,] 0 -3 -1 1 [6,] 0 -3 -1 0 [7,] 0 0 0 0 Sum of squares and products for the hypothesis: [,1] [,2] [,3] [,4] [1,] 0.06744438 -2.065499 -0.5790014 0.3233393 [2,] -2.06549912 63.256374 17.7320486 -9.9023380 [3,] -0.57900143 17.732049 4.9706540 -2.7758268 [4,] 0.32333928 -9.902338 -2.7758268 1.5501410 Sum of squares and products for error: [,1] [,2] [,3] [,4] [1,] 4.4957632 1.084781 2.196134 -0.7621832 [2,] 1.0847809 173.494183 20.425963 -7.7303319 [3,] 2.1961336 20.425963 8.584237 -3.8182268 [4,] -0.7621832 -7.730332 -3.818227 2.3045286 1-pf(diag(linhyp2$SSPH)/diag(linhyp2$SSPE),1,79) 1-pt(sqrt(diag(linhyp2$SSPH)/diag(linhyp2$SSPE)),79) ## The last two lines of code are what I am stuck with; I thought using diag() on the SSPH and SSPE matrices should give me the sums of squares for hypothesis and error; so division should yield the F values? I would be most grateful for any help! Best wishes Christoph -- Dr. Christoph Scherber University of Goettingen DNPW, Agroecology Waldweg 26 D-37073 Goettingen, Germany www.gwdg.de/~cscherb1
John Fox
2008-Jun-08 00:12 UTC
[R] Multivariate LM: calculating F-values after calling linear.hypothesis
Dear Christoph, To answer your question directly, F statistics are ratios of mean squares, not of sums of squares. You have to divide the hypothesis and error sums of squares by their respective degrees of freedom to form the mean squares before computing the F statistic for each test. Assuming that x is a quantitative variable (not a factor), the error (denominator) df will be 78 = 80 - 2 and the df for each hypothesis (numerator df) will be 1. That said, there are a couple of things that you said that trouble me: First, you mention that you scaled the response variables to [0, 1], but that doesn't imply that the variables are on the same scale in any meaningful sense, possibly rendering the hypotheses uninterpretable. Second, you have 7 responses variables but only 4 hypotheses. You aren't therefore using all 6 df for differences among the responses (not necessarily a problem), but you apparently ignore the last response variable entirely (which almost surely doesn't make sense). Regards, John ------------------------------ John Fox, Professor Department of Sociology McMaster University Hamilton, Ontario, Canada web: socserv.mcmaster.ca/jfox> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]On> Behalf Of Dr. Christoph Scherber > Sent: June-07-08 4:39 PM > To: r-help at r-project.org > Subject: [R] Multivariate LM: calculating F-values after calling > linear.hypothesis > > Dear R users, > > I am analyzing several response variables (all scaled to [0;1]) using a > multivariate linear model. > > After fitting the model, I set up a hypothesis matrix to test specific > contrasts for these response variables; for example: "a always increases > significantly more than b when regressed against x". > > What I am stuck with now is how to calculate the correct F-values (and > against how many d.f. to test them) after calling linear.hypothesis from > the car package: > > (assuming there are 80 observations) > > ## > > mult=lm(cbind(a,b,c,d,e,f,g)~x) > > summary(mult) > library(car) > > P <- cbind( > c(-1,1,0,0,0,0,0), > c(-3,-3,6,6,-3,-3,0), > c(0,0,2,0,-1,-1,0), > c(0,0,-1,0,1,0,0)) > > P > [,1] [,2] [,3] > [1,] -1 -3 0 > [2,] 1 -3 0 > [3,] 0 6 2 > [4,] 0 6 0 > [5,] 0 -3 -1 > [6,] 0 -3 -1 > [7,] 0 0 0 > > summary(mult) > > linhyp=linear.hypothesis(mult, "x", P=P) > > linhyp > > Response transformation matrix: > [,1] [,2] [,3] [,4] > [1,] -1 -3 0 0 > [2,] 1 -3 0 0 > [3,] 0 6 2 -1 > [4,] 0 6 0 0 > [5,] 0 -3 -1 1 > [6,] 0 -3 -1 0 > [7,] 0 0 0 0 > > Sum of squares and products for the hypothesis: > [,1] [,2] [,3] [,4] > [1,] 0.06744438 -2.065499 -0.5790014 0.3233393 > [2,] -2.06549912 63.256374 17.7320486 -9.9023380 > [3,] -0.57900143 17.732049 4.9706540 -2.7758268 > [4,] 0.32333928 -9.902338 -2.7758268 1.5501410 > > Sum of squares and products for error: > [,1] [,2] [,3] [,4] > [1,] 4.4957632 1.084781 2.196134 -0.7621832 > [2,] 1.0847809 173.494183 20.425963 -7.7303319 > [3,] 2.1961336 20.425963 8.584237 -3.8182268 > [4,] -0.7621832 -7.730332 -3.818227 2.3045286 > > > 1-pf(diag(linhyp2$SSPH)/diag(linhyp2$SSPE),1,79) > 1-pt(sqrt(diag(linhyp2$SSPH)/diag(linhyp2$SSPE)),79) > > ## > > The last two lines of code are what I am stuck with; I thought using > diag() on the SSPH and SSPE matrices should give me the sums of squares > for hypothesis and error; so division should yield the F values? > > I would be most grateful for any help! > > Best wishes > Christoph > > > > > > -- > Dr. Christoph Scherber > University of Goettingen > DNPW, Agroecology > Waldweg 26 > D-37073 Goettingen, Germany > www.gwdg.de/~cscherb1 > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.