[R] Interpreting lmp() results

Ann Marie Reinhold reinhold at montana.edu
Tue Aug 20 00:47:13 CEST 2013


I am running permutation regressions in package lmPerm using lmp().  I
am getting what I find to be confusing results and I would like help
understanding what is going on.  To illustrate my problem, I created a
simple example and am running lmp() such that the results of the lmp()
models should be identical to that of lm().  I'm referring to the
notes section of the lmp() documentation where it says that the
"function will behave identically to lm() if the following parameters
are set: perm="", seqs=TRUE, center=FALSE."

Here is an example wherein I am unable to match my lmp() results to my
lm() results.

library(lmPerm)
library(lattice)

x1 <- c(rnorm(60, 150, 50),rnorm(60, 150, 50),rnorm(60, 150, 50))
y1 <- c(30-0.1*x1[1:60], rep(10, 60), 0.1*x1[121:180])
factor.levels1 <- c(rep("DOWN", 60), rep("FLAT", 60), rep("UP", 60))

xyplot(y1 ~ x1, groups = factor.levels1, auto.key = TRUE)

lmp.model.1 <- lmp(y1 ~ x1*factor.levels1 - 1,  perm = "", seqs =
TRUE, center = FALSE)
summary(lmp.model.1)
lm.model.1 <- lm(y1 ~ x1*factor.levels1 - 1)
summary(lm.model.1)

Here are the results:
> summary(lmp.model.1)
Call:
lmp(formula = y1 ~ x1 * factor.levels1 - 1, perm = "", seqs = TRUE,
    center = FALSE)
Residuals:
       Min         1Q     Median         3Q        Max
-1.509e-13 -1.700e-16  4.277e-17  9.558e-16  1.621e-14
Coefficients:
                     Estimate Std. Error    t value Pr(>|t|)
factor.levels1DOWN  3.000e+01  7.359e-15  4.077e+15   <2e-16 ***
factor.levels1FLAT  1.000e+01  4.952e-15  2.019e+15   <2e-16 ***
factor.levels1UP   -5.809e-16  5.095e-15 -1.140e-01   0.9094
x1                  4.096e-17  2.137e-17  1.917e+00   0.0569 .
x1:factor.levels11 -1.000e-01  3.391e-17 -2.949e+15   <2e-16 ***
x1:factor.levels12 -4.500e-17  2.792e-17 -1.612e+00   0.1089
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.226e-14 on 174 degrees of freedom
Multiple R-Squared:     1,      Adjusted R-squared:     1
F-statistic: 3.721e+31 on 6 and 174 DF,  p-value: < 2.2e-16

> summary(lm.model.1)
Call:
lm(formula = y1 ~ x1 * factor.levels1 - 1)
Residuals:
       Min         1Q     Median         3Q        Max
-3.141e-14 -3.190e-15 -9.880e-16  8.920e-16  1.905e-13
Coefficients:
                        Estimate Std. Error    t value Pr(>|t|)
x1                    -1.000e-01  5.638e-17 -1.774e+15   <2e-16 ***
factor.levels1DOWN     3.000e+01  9.099e-15  3.297e+15   <2e-16 ***
factor.levels1FLAT     1.000e+01  6.123e-15  1.633e+15   <2e-16 ***
factor.levels1UP      -3.931e-15  6.300e-15 -6.240e-01    0.533
x1:factor.levels1FLAT  1.000e-01  6.826e-17  1.465e+15   <2e-16 ***
x1:factor.levels1UP    2.000e-01  6.931e-17  2.886e+15   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.515e-14 on 174 degrees of freedom
Multiple R-squared:      1,     Adjusted R-squared:      1


I thought that the results of summary(lmp.model.1) would be the same
as summary(lm.model.1).  However, I am concerned that I am
interpreting the results incorrectly because I can't get the results
to match.  Specifically, I simulated data with a slope for UP of 0.1,
the slope for FLAT of 0, and the slope for DOWN of -0.1. I can recover
these values in lm.model.1, but not lmp.model.1.  In the output for
the lmp.model.1, I am estimating the slope for DOWN to be
approximately -0.1 (4.096e-17-1.000e-01) and the slope of the FLAT to
be approximately 0 (4.096e-17-4.500e-17); however, the slope of UP
(what I think is equal to the reference level x1) is 4.096e-17.  Am I
interpreting the x1 term incorrectly?  Why are the lmp() results not
identical to the lm() results?

I ran a similar example using a modification of the above data wherein
factor level A is equal to FLAT, factor level B is equal to DOWN, and
factor level C is equal to UP.  Again, I was unable to match the
results from lm() and lmp().

x2 <- c(rnorm(60, 150, 50), rnorm(60, 150, 50),rnorm(60, 150, 50))
y2 <- c(rep(10, 60), 30-0.1*x2[61:120], 0.1*x2[121:180])
factor.levels2 <- c(rep("A", 60), rep("B", 60), rep("C", 60))

xyplot(y2 ~ x2, groups = factor.levels2, auto.key = TRUE)
lmp.model.2 <- lmp(y2 ~ x2*factor.levels2 - 1,  perm = "", seqs =
TRUE, center = FALSE)
summary(lmp.model.2)
lm.model.2 <- lm(y2 ~ x2*factor.levels2 - 1)
summary(lm.model.2)

Here are the results:
> summary(lmp.model.2)
Call:
lmp(formula = y2 ~ x2 * factor.levels2 - 1, perm = "", seqs = TRUE,
    center = FALSE)
Residuals:
       Min         1Q     Median         3Q        Max
-1.284e-13 -6.772e-16  1.439e-16  1.581e-15  4.323e-14
Coefficients:
                     Estimate Std. Error    t value Pr(>|t|)
factor.levels2A     1.000e+01  5.545e-15  1.803e+15  < 2e-16 ***
factor.levels2B     3.000e+01  4.707e-15  6.373e+15  < 2e-16 ***
factor.levels2C     1.556e-15  4.994e-15  3.120e-01 0.755688
x2                  6.840e-17  1.860e-17  3.677e+00 0.000314 ***
x2:factor.levels21  1.030e-16  2.734e-17  3.767e+00 0.000226 ***
x2:factor.levels22 -1.000e-01  2.550e-17 -3.921e+15  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.131e-14 on 174 degrees of freedom
Multiple R-Squared:     1,      Adjusted R-squared:     1
F-statistic: 4.719e+31 on 6 and 174 DF,  p-value: < 2.2e-16

I would expect the reference level slope (term x2 in lmp.model.2,
which I believe is the slope for factor level C) to be 0.1.  However,
it is 6.840e-17. Am I interpreting the reference levels for the lmp()
models incorrectly?  Perhaps I am specifying the models incorrectly.
Any help would be very much appreciated.


My session info is as follows:
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
other attached packages:
[1] lattice_0.20-15 lmPerm_1.1-2
loaded via a namespace (and not attached):
[1] grid_3.0.1  tools_3.0.1

Thanks,
Ann Marie



Ann Marie Reinhold | Doctoral Candidate
Montana Cooperative Fishery Research Unit
Department of Ecology | Montana State University
Box 173460 | Bozeman, MT 59717
Email: reinhold [AT] montana [DOT] edu | Office: (406) 994-6643



More information about the R-help mailing list