# [R] The explanation of ns() with df =2

John Fox jfox at mcmaster.ca
Wed Apr 16 13:11:31 CEST 2014

```Dear Xing,

My point wasn't that you should add 1 df for a constant to each cubic but that you need not subtract 1 for continuity. I'm sorry that I didn't make that clear. When you use the natural spline in a regression, there's a constant in the model as a separate term with 1 df, which in effect adjusts the level of the regression curve (assuming one X for simplicity). If you add a constant to each component cubic, the constant in the model is rendered redundant, accounting for the extra df.

I'm afraid that if this is still not sufficiently clear, I'll have to defer to someone with greater powers of explanation.

Best,
John

-------------------------------------------------------------
John Fox
McMaster University
http://socserv.socsci.mcmaster.ca/jfox

> On Apr 16, 2014, at 12:10 AM, Xing Zhao <zhaoxing at uw.edu> wrote:
>
> Dear John
>
> Sorry I use 3 degree of freedom for  cubic spline. After using 4, it
> is still not 2. I may make some naive mistake, but I cannot figure
> out. Where is the problem?
>
> 4 (cubic on the right side of the *interior* knot 8)
> + 4 (cubic on the left side of the *interior* knot 8)
> - 1 (two curves must be continuous at the *interior* knot 8)
> - 1 (two curves must have 1st order derivative continuous at the
> *interior* knot 8)
> - 1 (two curves must have 2nd order derivative continuous at the
> *interior* knot 8)
> - 1 (right side cubic curve must have 2nd order derivative = 0 at the
> boundary knot 15 due to the linearity constraint)
> - 1 (similar for the left)
> = 3, not 2
>
> Thanks
> Xing
>
>> On Tue, Apr 15, 2014 at 10:54 AM, John Fox <jfox at mcmaster.ca> wrote:
>> Dear Xing,
>>
>>> -----Original Message-----
>>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
>>> project.org] On Behalf Of Xing Zhao
>>> Sent: Tuesday, April 15, 2014 1:18 PM
>>> To: John Fox
>>> Cc: r-help at r-project.org; Michael Friendly
>>> Subject: Re: [R] The explanation of ns() with df =2
>>>
>>> Dear Michael and Fox
>>>
>>> understanding, lead to the following  calculation of degree of
>>> freedoms.
>>>
>>> 3 (cubic on the right side of the *interior* knot 8)
>>> + 3 (cubic on the left side of the *interior* knot 8)
>>> - 1 (two curves must be continuous at the *interior* knot 8)
>>
>> You shouldn't subtract 1 for continuity since you haven't allowed a
>> different level on each side of the knot (that is your initial counting of 3
>> parameters for the cubic doesn't include a constant).
>>
>> Best,
>> John
>>
>>> - 1 (two curves must have 1st order derivative continuous at the
>>> *interior* knot 8)
>>> - 1 (two curves must have 2nd order derivative continuous at the
>>> *interior* knot 8)
>>> - 1 (right side cubic curve must have 2nd order derivative = 0 at the
>>> boundary knot 15 due to the linearity constraint)
>>> - 1 (similar for the left)
>>> = 1, not 2
>>>
>>> Where is the problem?
>>>
>>> Best,
>>> Xing
>>>
>>>> On Tue, Apr 15, 2014 at 6:17 AM, John Fox <jfox at mcmaster.ca> wrote:
>>>> Dear Xing Zhao,
>>>>
>>>> To elaborate slightly on Michael's comments, a natural cubic spline
>>> with 2 df has one *interior* knot and two boundary knots (as is
>>> apparent in the output you provided). The linearity constraint applies
>>> beyond the boundary knots.
>>>>
>>>> I hope this helps,
>>>> John
>>>>
>>>> ------------------------------------------------
>>>> John Fox, Professor
>>>> McMaster University
>>>> http://socserv.mcmaster.ca/jfox/
>>>>
>>>> On Tue, 15 Apr 2014 08:18:40 -0400
>>>> Michael Friendly <friendly at yorku.ca> wrote:
>>>>> No, the curves on each side of the know are cubics, joined
>>>>> so they are continuous.  Se the discussion in \S 17.2 in
>>>>> Fox's Applied Regression Analysis.
>>>>>
>>>>>> On 4/15/2014 4:14 AM, Xing Zhao wrote:
>>>>>> Dear all
>>>>>>
>>>>>> I understand the definition of Natural Cubic Splines are those
>>> with
>>>>>> linear constraints on the end points. However, it is hard to think
>>>>>> about how this can be implement when df=2. df=2 implies there is
>>> just
>>>>>> one knot, which, according the the definition, the curves on its
>>> left
>>>>>> and its right should be both be lines. This means the whole line
>>>>>> should be a line. But when making some fits. the result still
>>> looks
>>>>>> like 2nd order polynomial.
>>>>>>
>>>>>>
>>>>>> Thanks
>>>>>> Xing
>>>>>>
>>>>>> ns(1:15,df =2)
>>>>>>               1           2
>>>>>>  [1,] 0.0000000  0.00000000
>>>>>>  [2,] 0.1084782 -0.07183290
>>>>>>  [3,] 0.2135085 -0.13845171
>>>>>>  [4,] 0.3116429 -0.19464237
>>>>>>  [5,] 0.3994334 -0.23519080
>>>>>>  [6,] 0.4734322 -0.25488292
>>>>>>  [7,] 0.5301914 -0.24850464
>>>>>>  [8,] 0.5662628 -0.21084190
>>>>>>  [9,] 0.5793481 -0.13841863
>>>>>> [10,] 0.5717456 -0.03471090
>>>>>> [11,] 0.5469035  0.09506722
>>>>>> [12,] 0.5082697  0.24570166
>>>>>> [13,] 0.4592920  0.41197833
>>>>>> [14,] 0.4034184  0.58868315
>>>>>> [15,] 0.3440969  0.77060206
>>>>>> attr(,"degree")
>>>>>> [1] 3
>>>>>> attr(,"knots")
>>>>>> 50%
>>>>>>   8
>>>>>> attr(,"Boundary.knots")
>>>>>> [1]  1 15
>>>>>> attr(,"intercept")
>>>>>> [1] FALSE
>>>>>> attr(,"class")
>>>>>> [1] "ns"     "basis"  "matrix"
>>>>>
>>>>>
>>>>> --
>>>>> Michael Friendly     Email: friendly AT yorku DOT ca
>>>>> Professor, Psychology Dept. & Chair, Quantitative Methods
>>>>> York University      Voice: 416 736-2100 x66249 Fax: 416 736-5814
>>>>> 4700 Keele Street    Web:   http://www.datavis.ca
>>>>> Toronto, ONT  M3J 1P3 CANADA
>>>>>
>>>>> ______________________________________________
>>>>> R-help at r-project.org mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> guide.html
>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help