In view of our private communication on this matter (to the effect that
you had not been able to elicit a response from Vito Muggeo) I did a
little delving into the code of segmented.lm().  I ***think*** I have found
the problem.  On line 243 (of the code as seen from loading the package)
the construction:

    initial <- unlist(mapply(function(x, y) {

should read:

    initial <- as.vector(mapply(function(x, y) {

(The unlist() construction  has no effect.)

Once this change is made, the function runs on the example
without throwing an error (or warning).

I have not investigated as to whether the result returned is sensible.

It is also possible that the "fix" I have suggested will induce other problems
in other contexts; I don't really understand what's going on well enough to
be certain.

I hope that this is of some help, but.

    cheers,

            Rolf Turner


On 01/12/2010 12:32 AM, Benedikt Drosse wrote:

(BTW --- shouldn't that date read "01/12/2012"?  I don't *think*
your posting sat in my inbox for two *years*!!!)

Dear R-users,

I am trying to understand how the 'segmented'-package works to determine
breakpoints and slopes of regression lines in broken-line regression models.
However, I am not able to repeat the example on the "plant"-dataset,
which was reported in the accompanying paper of the package. (V.M.R
Muggeo, "Segmented: an R package to fit regression models with
broken-line relationships")

I would be grateful for any ideas, why this function is not working the
way it was described in the paper. The error message points to a wrong
length of row- and dimnames. Unfortunately this doesn't help me very
much in understanding the function, if it does not work on the example data.

Do you think the error will be somewhere in the function, or is it my
stupidity?
I am using R version 2.15.1 and the package was built in 2.15.2, but in
respect to the error message I cannot imagine that this will cause my
problems.


Below you will find the code as it was reported in the paper:

library(segmented)

data("plant")
attach(plant)

X <- model.matrix(~0 + group)*time

time.KV <- X[,1]
time.KW <- X[,2]
time.WC <- X[,3]

olm <- lm(y~0+ group + time.KV + time.KW + time.WC)

os <- segmented(olm, seg.Z= ~ time.KV + time.KW + time.WC,
psi=list(time.KV=c(300,500), time.KW=c(450,600), time.WC=c(300,450)))


The error message is as follows:

Error in `rownames<-`(`*tmp*`, value = c("psi1.time.KV", "psi2.time.KV",  :
    Length of 'dimnames' [1] not equal to array extent
Zusätzlich:Warnmeldung:
In cbind(initial, psi, sqrt(vv)) :
    number of rows of result is not a multiple of vector length (arg 2)



However, when I take out one break.point from any of the groups (e.g.
time.KV=300), the function works fine without reporting any errors:

code as follows:
os <- segmented(olm, seg.Z= ~ time.KV + time.KW + time.WC,
psi=list(time.KV=300, time.KW=c(450,600), time.WC=c(300,450)))


Thanks alot for your comments.

______________________________________________
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.

Reply via email to