If I surmise correctly, you want something like contr.sum but with the
option to select the level with the row of '-1' and no column. Here '3' is
that level:
contr.sum(3)
[,1] [,2]
1 1 0
2 0 1
3 -1 -1
relevel() and contr.sum() generally will not do what you want without
some awful twists and turns, I think.
Better to roll your own contrast function like this:
contr.mysum <-
function (n, contrasts = TRUE, sparse = FALSE, base=length(levels))
{
if (length(n) <= 1L) {
if (is.numeric(n) && length(n) == 1L && n > 1L)
levels <- seq_len(n)
else stop("not enough degrees of freedom to define contrasts")
}
else levels <- n
levels <- as.character(levels)
cont <- .Diag(levels, sparse = sparse)
if (contrasts) {
cont <- cont[, -base, drop = FALSE]
cont[base, ] <- -1
colnames(cont) <- NULL
}
cont
}
# now pick the base you want:
# Here is a reproducible example
lm(weight~C(Diet,contr.mysum),ChickWeight) # default like contr.sum
lm(weight~C(Diet,contr.mysum,base=1),ChickWeight)
lm(weight~C(Diet,contr.mysum,base=2),ChickWeight)
lm(weight~C(Diet,contr.mysum,base=3),ChickWeight)
lm(weight~C(Diet,contr.mysum,base=4),ChickWeight)
Next time, please do set up code others can run as David W. requested.
See
library(help='datasets')
for good example datasets or see the posting guide for details on how to
include your own data sets.
Chuck
p.s. I have never noticed that posters on this list stop answering a
question just because others have already answered it. Try asking a
question like 'How do I use a regex to solve this problem?' and start
counting the responses. ;-)
On Wed, 7 Jul 2010, David Winsemius wrote:
Please do not post with ambiguous questions lacking sufficient R code and
data to represent the problem.
On Jul 7, 2010, at 4:41 PM, Bond, Stephen wrote:
Please, do not post if you do not know the answer. People will see this has
answers and skip.
More likely people will see that it has insufficient detail to answer ,,, and
then also skip. You still have not provided any insight into the structure of
"fixw".
I tried with
mat1=contrasts(fixw$snconv)
mat1=mat1[,-2]
summary(frm2sum <- glm(resp.frm ~
C(snconv,contr=mat1)+mprime+mshape,data=fixw,family="quasibinomial"))
the unwanted level is still there.
But did you try:
summary(frm2sum <- glm(resp.frm ~ relevel(snconv, ref="03") + mprime +
mshape, data=fixw, family="quasibinomial"))
(The above obviously not tested on "fixw" in the absence of a reproducible
example, but was an analog modulo the minimal information offered was tested
on the quasipoisson example in help page of "family".)
--
David.
Unbelievable.
<snarky comment deleted>
Stephen Bond
-----Original Message-----
From: David Winsemius [mailto:dwinsem...@comcast.net]
Sent: Wednesday, July 07, 2010 4:15 PM
To: Bond, Stephen
Cc: r-help@r-project.org
Subject: Re: [R] forcing a zero level in contr.sum
On Jul 7, 2010, at 4:04 PM, Bond, Stephen wrote:
> Clarifying my question:
>
> options(contrasts = c("contr.sum", "contr.poly"))
> > contrasts()
> [,1] [,2] [,3] [,4] [,5]
> 01 1 0 0 0 0
> 03 0 1 0 0 0
> 05 0 0 1 0 0
> 06 0 0 0 1 0
> 07 0 0 0 0 1
> 09 -1 -1 -1 -1 -1
>
> I need to force the coefficient on level 03 to be zero.
?factor
?relevel
Perhaps worth a try:
fixw$snconv <- relevel(fixw$snconv, ref="03")
(But I wonder if using contr.sum will ever generally satisfy that
goal, since contr.sum calculates the difference from a grand mean and
this will only work if a) the GM=0 and b) there is only one term on
the RHS of the model, and c) probably a bunch of other restrictions.)
--
David.
>
> Thank you.
>
> Stephen Bond
> -----Original Message-----
> From: David Winsemius [mailto:dwinsem...@comcast.net]
> Sent: Wednesday, July 07, 2010 3:44 PM
> To: Bond, Stephen
> Cc: r-help@r-project.org
> Subject: Re: [R] forcing a zero level in contr.sum
>
>
> On Jul 7, 2010, at 3:13 PM, Bond, Stephen wrote:
>
> > I need to use contr.sum and observe that some levels are not
> > statistically different from the overall mean of zero.
> > What is the proper way of forcing the zero estimate? It seems the
> > column corresponding to that level should become a column of zeros.
> > Is there a way to achieve that without me constructing the design
> > matrix?
> > Thank you.
>
> lm( formula = z ~ x + y + 0, ...) _might_ do something close to
> what you want.
>
>
>
>
> David Winsemius, MD
> West Hartford, CT
>
David Winsemius, MD
West Hartford, CT
______________________________________________
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.
David Winsemius, MD
West Hartford, CT
______________________________________________
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.
Charles C. Berry (858) 534-2098
Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
______________________________________________
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.