> On 26 Sep 2016, at 19:41, Matti Viljamaa <mvilja...@kapsi.fi> wrote:
> 
> 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)

I mean, not to use clka to replace lka. But to use the above fit2, rather than 
your fit2.

>> On 25 Sep 2016, at 21:23, Jeff Newmiller <jdnew...@dcn.davis.ca.us> 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 <mvilja...@kapsi.fi> 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 <jdnew...@dcn.davis.ca.us> 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 <mvilja...@kapsi.fi> 
>>>>> 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 <mvilja...@kapsi.fi>
>>>>>>> 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 <mvilja...@kapsi.fi>
>>>>>>>> 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?
>>>>>>>>>> 
>>>>>>>>>> ______________________________________________
>>>>>>>>>> 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.
>>>>> 
>>>> 
>>> 
>>> 
>> 
>> ---------------------------------------------------------------------------
>> Jeff Newmiller                        The     .....       .....  Go Live...
>> DCN:<jdnew...@dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
>>                                     Live:   OO#.. Dead: OO#..  Playing
>> Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
>> /Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
>> ---------------------------------------------------------------------------
> 

______________________________________________
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