I think you are going to have to be more specific than "having some trouble". Your plot used lka as the x-axis.
FWIW note that lm(ruotsi.pist ~ mies + koulu + clka + koulu*clka, data=dta) is the same as lm(ruotsi.pist ~ mies + koulu*clka, data=dta) -- Sent from my phone. Please excuse my brevity. On September 26, 2016 9:41:57 AM PDT, Matti Viljamaa <mvilja...@kapsi.fi> wrote: > >> 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.