You should use only plain text emails, provide sample data, and indicate any 
relevant packages that you had to load. First let's load the necessary package 
and create some data:

> library(segmented)
> set.seed(42)
> x <- sort(runif(60, 10, 60))
> int <- c(rep(0, 20), rep(60, 20), rep(-80, 20))
> slp <- c(rep(2, 20), rep(0, 20), rep(3, 20))
> y <- int + slp*x + rnorm(60, 0, 2)
> plot(x, y)

You should have a plot showing 2 break points. Using psi=mean(x) puts a single 
breakpoint in the middle of the distribtution so we have to be more specific:

> lin.mod <- lm(y~x)
> segmented.mod <- segmented(lin.mod, seg.Z = ~x, psi= c(25, 55))
> plot(segmented.mod, add=T)
> sl <- slope(segmented.mod)
> inter <- intercept(segmented.mod)

Now your plot shows the segmented model. You need to know what intercept() is 
returning so you should look at the manual page: ?intercept. It returns a list 
of matrices (one matrix for each independent variable). You have only one, x, 
so you get a list with one element.

> str(inter)
List of 1
 $ x: num [1:3, 1] -0.179 60.25 -86.77
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3] "intercept1" "intercept2" "intercept3"
  .. ..$ : chr "Est."

To get the first matrix without knowing its name and the last row:

> tail(inter[[1]], 1)
             Est.
intercept3 -86.77

If you want to strip off the labels:

> as.vector(tail(inter[[1]], 1))
[1] -86.77

-----------------------------
David L. Carlson
Department of Anthropology
Texas A&M University



-----Original Message-----
From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Narendra Modi
Sent: Tuesday, July 5, 2016 1:42 PM
To: R-help@r-project.org
Subject: [R] How to extract "specific"/"last" intercept value from segmented 
package.

I am able to perform regression on a dataset as below:

plot(x,y)
lin.mod <- lm(y~x)
m <- mean(x)
m

segmented.mod <- segmented(lin.mod, seg.Z = ~x, psi= m)

plot(segmented.mod, add=T)
sl <- slope(segmented.mod)
inter <- intercept(segmented.mod)

summary(segmented.mod)    # Show Summary
sl                        # show all the slopes
inter                     # show all the intercepts


In my dataset, the above method correctly identifies the breakpoints and
hence I get two intercepts.

> inter
$x
              Est.
intercept1  -3.269
intercept2 -19.980

What I am interested is the "intercept2" value. How can I obtain this?

The method needs to be dynamic as in if the next dataset has 3 intercepts,
I would like to get "intercept3 value.

PD

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

______________________________________________
R-help@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.

Reply via email to