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