Thank you.

However, I’m having some trouble converting your code to use clka, because the 
model I was using was:

fit2 <- lm(ruotsi.pist ~ mies + koulu + clka + koulu*clka, data=dta)


> On 25 Sep 2016, at 21:23, Jeff Newmiller <[email protected]> wrote:
> 
> This illustrates why you need to post a reproducible example. You have a 
> number of confounding factors in your code.
> 
> First, "data" is a commonly-used function... avoid using it for variable 
> names.
> 
> Second, using the attach function this way leads to confusion... best to 
> forget this function until you start building packages.
> 
> Third, clka is linearly dependent on lka, so having them both in the 
> regression is not possible. In this case lm has chosen to ignore clka so that 
> bs("clka") is NA.
> 
> Fourth, curve expects you to give it a function, and instead you have given 
> it a vector.
> 
> Fifth, you are plotting versus lka, but attempting to vary clka in the curve 
> call.
> 
> There are a number of directions you could go with this to get a working 
> output... below is my version.
> 
> dta <- read.table( 
> "http://users.jyu.fi/~slahola/files/glm1_datoja/yoruotsi.txt";, header=TRUE )
> fit2 <- lm( ruotsi.pist ~ mies + koulu*lka, data=dta )
> bs <- coef( fit2 )
> rpBylka <- function( lka ) {
>  kouluB <- factor( "B", levels = levels( dta$koulu ) )
>  newdta <- expand.grid( mies=0, koulu=kouluB, lka=lka )
>  predict( fit2, newdata = newdta )
> }
> dtaKouluB <- subset( dta, koulu == "B" )
> varitB <- dtaKouluB$mies
> varitB[ varitB == 0 ] <- 2
> plot( dtaKouluB$lka
>    , dtaKouluB$ruotsi.pist
>    , col=varitB
>    , pch=16
>    , xlab='lka'
>    , ylab='ruotsi.pist'
>    , main='Lukio B'
>    )
> curve( rpBylka, from = min( dta$lka ), max( dta$lka ), add=TRUE, col="red" )
> 
> On Sun, 25 Sep 2016, Matti Viljamaa wrote:
> 
>> 
>>> On 25 Sep 2016, at 19:37, Matti Viljamaa <[email protected]> wrote:
>>> 
>>> Okay here?s a pretty short code to reproduce it:
>>> 
>>> data <- 
>>> read.table("http://users.jyu.fi/~slahola/files/glm1_datoja/yoruotsi.txt";, 
>>> header=TRUE)
>> 
>> data$clka <- I(data$lka - mean(data$lka))
>> 
>>> attach(data)
>>> 
>>> fit2 <- lm(ruotsi.pist ~ mies + koulu + lka + koulu*clka)
>>> 
>>> bs <- coef(fit2)
>>> 
>>> varitB <- c(data[koulu == 'B',]$mies)
>>> varitB[varitB == 0] = 2
>>> plot(data[data$koulu == 'B',]$lka, data[koulu == 'B',]$ruotsi.pist, 
>>> col=varitB, pch=16, xlab='', ylab='', main='Lukio B?)
>>> 
>>> curve(bs["(Intercept)"]+bs["mies"]*0+bs["kouluB"]+bs["lka"]*x+bs["kouluB:clka"]*clka,
>>>  from=min(lka), to=max(lka), add=TRUE, col='red')
>>> 
>>> 
>>>> On 25 Sep 2016, at 19:24, Jeff Newmiller <[email protected]> wrote:
>>>> 
>>>> Go directly to C. Do not pass go, do not collect $200.
>>>> 
>>>> You think curve does something, but you are missing what it actually does. 
>>>> Since you don't seem to be learning from reading ?curve or from our 
>>>> responses, you need to give us an example you can learn from.
>>>> --
>>>> Sent from my phone. Please excuse my brevity.
>>>> 
>>>> On September 25, 2016 9:04:09 AM PDT, mviljamaa <[email protected]> wrote:
>>>>> On 2016-09-25 18:52, Jeff Newmiller wrote:
>>>>>> You seem to be confused about what curve is doing vs. what you are
>>>>>> doing.
>>>>> 
>>>>> But my x-range in curve()'s parameters from and to should be the entire
>>>>> 
>>>>> lka vector, since they are from=min(lka) and to=max(lka). Then why does
>>>>> 
>>>>> this not span the entire of lka? Because of duplicate entries or what?
>>>>> 
>>>>> It seems like I cannot use curve(), since my x-axis must be exactly lka
>>>>> 
>>>>> for the function to plot the y value for every lka value.
>>>>> 
>>>>>> A) Compute the points you want to plot and put them into 2 vectors.
>>>>>> Then figure out how to plot those vectors. Then (perhaps) consider
>>>>>> putting that all into one line of code again.
>>>>>> 
>>>>>> B) The predict function is the preferred way to compute points. It
>>>>> may
>>>>>> be educational for you to do the computations by hand at first, but
>>>>> in
>>>>>> the long run using predict will help you avoid problems getting the
>>>>>> equations right in multiple places in your script.
>>>>>> 
>>>>>> C) Learn what makes an example reproducible (e.g. [1] or [2]), and
>>>>> ask
>>>>>> your questions with reproducible code and data so we can give you
>>>>>> concrete responses.
>>>>>> 
>>>>>> [1] http://adv-r.had.co.nz/Reproducibility.html
>>>>>> [2]
>>>>>> 
>>>>> http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example
>>>>>> --
>>>>>> Sent from my phone. Please excuse my brevity.
>>>>>> 
>>>>>> On September 25, 2016 8:36:49 AM PDT, mviljamaa <[email protected]>
>>>>>> wrote:
>>>>>>> On 2016-09-25 18:30, Duncan Murdoch wrote:
>>>>>>>> On 25/09/2016 9:10 AM, Matti Viljamaa wrote:
>>>>>>>>> Writing:
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>> bs["(Intercept)"]+bs["mies"]*0+bs["kouluB"]+bs["lka"]*lka+bs["kouluB:clka"]*clka
>>>>>>>>> 
>>>>>>>>> i.e. without that being inside curve produces a vector of length
>>>>>>> 375.
>>>>>>>>> 
>>>>>>>>> So now it seems that curve() is really skipping some
>>>>> lka-/x-values.
>>>>>>>> 
>>>>>>>> How could curve() know what the length of lka is?  You're telling
>>>>> it
>>>>>>>> to set x to a sequence of values of length 101 (the default) from
>>>>>>>> min(lka) to max(lka).  You never tell it to set x to lka.
>>>>>>>> 
>>>>>>>> curve() is designed to plot expressions or functions, not vectors.
>>>>>>> If
>>>>>>>> you actually want to plot line segments using your original data,
>>>>> use
>>>>>>>> lines().  (You'll likely need to sort your x values into increasing
>>>>>>>> order if you do that, or you'll get a pretty ugly plot.)
>>>>>>>> 
>>>>>>>> Duncan Murdoch
>>>>>>> 
>>>>>>> I know that about curve(), but since this function uses lka as a
>>>>>>> parameter, then how should I formulate it for curve so that I don't
>>>>>>> get
>>>>>>> 
>>>>>>> the error about wrong lengths?
>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> On 25 Sep 2016, at 16:01, Matti Viljamaa <[email protected]>
>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> I?m trying to plot regression lines using curve()
>>>>>>>>>> 
>>>>>>>>>> The way I do it is:
>>>>>>>>>> 
>>>>>>>>>> bs <- coef(fit2)
>>>>>>>>>> 
>>>>>>>>>> and then for example:
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>> 
>>>>> curve(bs["(Intercept)"]+bs["mies"]*0+bs["kouluB"]+bs["lka"]*x+bs["kouluB:clka"]*clka,
>>>>>>> 
>>>>>>>>>> from=min(lka), to=max(lka), add=TRUE, col='red')
>>>>>>>>>> 
>>>>>>>>>> This above code runs into error:
>>>>>>>>>> 
>>>>>>>>>> Error in curve(bs["(Intercept)"] + bs["mies"] * 0 + bs["kouluB"]
>>>>> +
>>>>>>>>>> bs["lka"] *  :
>>>>>>>>>> 'expr' did not evaluate to an object of length 'n'
>>>>>>>>>> In addition: Warning message:
>>>>>>>>>> In bs["(Intercept)"] + bs["mies"] * 0 + bs["kouluB"] + bs["lka"]
>>>>> *
>>>>>>> :
>>>>>>>>>> longer object length is not a multiple of shorter object length
>>>>>>>>>> 
>>>>>>>>>> Which I?ve investigated might be related to the lengths of the
>>>>>>>>>> different objects being multiplied or summed.
>>>>>>>>>> Taking length(g$x) or length(g$y) of
>>>>>>>>>> 
>>>>>>>>>> g <-
>>>>> curve(bs["(Intercept)"]+bs["mies"]*0+bs["kouluB"]+bs["lka"]*x,
>>>>>>> 
>>>>>>>>>> from=min(lka), to=max(lka), add=TRUE, col='red')
>>>>>>>>>> 
>>>>>>>>>> returns 101.
>>>>>>>>>> 
>>>>>>>>>> However length(lka) is 375. But perhaps these being different is
>>>>>>> not
>>>>>>>>>> the problem?
>>>>>>>>>> 
>>>>>>>>>> I however do see that the whole range of lka is not plotted, for
>>>>>>> some
>>>>>>>>>> reason. So how can I be sure
>>>>>>>>>> that it passes through all x-values in lka? And i.e. that the
>>>>>>> lengths
>>>>>>>>>> of objects inside curve() are correct?
>>>>>>>>>> 
>>>>>>>>>> What can I do?
>>>>>>>>> 
>>>>>>>>> ______________________________________________
>>>>>>>>> [email protected] 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.
>>>>>>>>> 
>>>>>>> 
>>>>>>> ______________________________________________
>>>>>>> [email protected] 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.
>>>> 
>>> 
>> 
>> 
> 
> ---------------------------------------------------------------------------
> Jeff Newmiller                        The     .....       .....  Go Live...
> DCN:<[email protected]>        Basics: ##.#.       ##.#.  Live Go...
>                                      Live:   OO#.. Dead: OO#..  Playing
> Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
> /Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
> ---------------------------------------------------------------------------

______________________________________________
[email protected] 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