[R] nonmonotonic glm?

Michael Dewey info at aghmed.fsnet.co.uk
Mon Jan 12 16:26:40 CET 2015


Comments in line

On 12/01/2015 13:13, Vito M. R. Muggeo wrote:
> dear Stanislav,
> Your data show two slopes with a kink at around 0. Thus, yet another
> approach would be to use segmented regression to fit a piecewise linear
> relationship with unknown breakpoint (being estimated as part of model
> fitting). While the resulting fitting is likely to be (slightly) worse
> than the one coming from splines, the advantage is that you get
> interpretable parameter estimates, left and right slopes and breakpoint.

Dear Stanislav
You might also want to search for 'broken stick', another name for this 
sort of model. I suppose it is also a linear spline. If you know on 
scientific grounds where the breakpoint is you can force its position.

I am not sure how relevant this is but in your original example the 
slopes would have been constrained to be equal although I wonder whether 
that was really what you intended.

Michael

> Relevant syntax is
>
> library(segmented)
> o<-glm(DV~IV, data= YourDataFrame, family=binomial)
> os<-segmented(o, ~IV, psi=0)
>
> vito
>
>
> Il 12/01/2015 13.45, Stanislav Aggerwal ha scritto:
>> Thanks very much Marc and Ben for the helpful suggestions
>>
>> Stan
>>
>> On Sun, Jan 11, 2015 at 10:28 PM, Ben Bolker <bbolker at gmail.com> wrote:
>>
>>> If you're going to use splines, another possibility is mgcv::gam (also
>>> part of standard R installation)
>>>
>>>    require(mgcv)
>>>    gam(DV ~ s(IV), data= YourDataFrame, family=binomial)
>>>
>>> this has the advantage that the complexity of the spline is
>>> automatically adjusted/selected by the fitting algorithm (although
>>> occasionally you need to use s(IV,k=something_bigger) to adjust the
>>> default *maximum* complexity chosen by the code)
>>>
>>>
>>> On Sun, Jan 11, 2015 at 5:23 PM, Marc Schwartz <marc_schwartz at me.com>
>>> wrote:
>>>>
>>>>> On Jan 11, 2015, at 4:00 PM, Ben Bolker <bbolker at gmail.com> wrote:
>>>>>
>>>>> Stanislav Aggerwal <stan.aggerwal <at> gmail.com> writes:
>>>>>
>>>>>>
>>>>>> I have the following problem.
>>>>>> DV is binomial p
>>>>>> IV is quantitative variable that goes from negative to positive
>>>>>> values.
>>>>>>
>>>>>> The data look like this (need nonproportional font to view):
>>>>>
>>>>>
>>>>>   [snip to make gmane happy]
>>>>>
>>>>>> If these data were symmetrical about zero,
>>>>>> I could use abs(IV) and do glm(p
>>>>>> ~ absIV).
>>>>>> I suppose I could fit two glms, one to positive and one to
>>>>>> negative IV
>>>>>> values. Seems a rather ugly approach.
>>>>>>
>>>>>
>>>>> [snip]
>>>>>
>>>>>
>>>>>   What's wrong with a GLM with quadratic terms in the predictor
>>>>> variable?
>>>>>
>>>>> This is perfectly respectable, well-defined, and easy to implement:
>>>>>
>>>>>   glm(y~poly(x,2),family=binomial,data=...)
>>>>>
>>>>> or   y~x+I(x^2)  or y~poly(x,2,raw=TRUE)
>>>>>
>>>>>> (To complicate things further, this is within-subjects design)
>>>>>
>>>>> glmer, glmmPQL, glmmML, etc. should all support this just fine.
>>>>
>>>>
>>>> As an alternative to Ben's recommendation, consider using a piecewise
>>> cubic spline on the IV. This can be done using glm():
>>>>
>>>>    # splines is part of the Base R distribution
>>>>    # I am using 'df = 5' below, but this can be adjusted up or down as
>>> may be apropos
>>>>    require(splines)
>>>>    glm(DV ~ ns(IV, df = 5), family = binomial, data = YourDataFrame)
>>>>
>>>>
>>>> and as Ben's notes, is more generally supported in mixed models.
>>>>
>>>> If this was not mixed model, another logistic regression implementation
>>> is in Frank's rms package on CRAN, using his lrm() instead of glm() and
>
>>> rcs() instead of ns():
>>>>
>>>> # after installing rms from CRAN
>>>> require(rms)
>>>> lrm(DV ~ rcs(IV, 5), data = YourDataFrame)
>>>>
>>>>
>>>> Regards,
>>>>
>>>> Marc Schwartz
>>>>
>>>>
>>>
>>
>>     [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> 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.
>>
>

-- 
Michael
http://www.dewey.myzen.co.uk



More information about the R-help mailing list