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

Xing Zhao zhaoxing at uw.edu
Tue Apr 15 19:17:58 CEST 2014

```Dear Michael and Fox

Thanks for your elaboration. Combining your explanations would, to my
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)
- 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
> Hamilton, Ontario, Canada
> 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
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>
>
>
>

```