it's that easy, eh?

thank you for your input, it's much appreciated.
i will have a look at nlmer as well.


markus


On Thu, Feb 16, 2012 at 23:17, David Winsemius [via R] <
ml-node+s789695n4395634h76@n4.nabble.com> wrote:

>
> On Feb 16, 2012, at 11:43 AM, protoplast wrote:
>
> > hello mailing list!
> > i still consider myself an R beginner, so please bear with me if my
> > questions seems strange.
> >
> > i'm in the field of biology, and have done consecutive hydraulic
> > conductivity measurements in three parallels ("Sample"), resulting
> > in three
> > sets of conductivity values ("PLC" for percent loss of conductivity,
> > relative to 100%) at multiple pressures ("MPa").
> >
> > ---
> >   Sample      MPa    PLC
> >     1      -0.3498324    0.000000
> >     1      -1.2414770   15.207821
> >     1      -1.7993249   23.819995
> >     1      -3.0162866   33.598570
> >     1      -3.5184321   46.376933
> >     1      -3.9899791   67.532226
> >     1      -4.2731145   89.735541
> >     1      -4.7597244   99.836239
> >     2      -0.2754036    0.000000
> >     2      -1.2912619   12.476132
> >     2      -1.5128974   13.543273
> > ...
> > ---
> >
> > since each sample is a statistical unit, i have fitted each sample-
> > subset to
> > a sigmoid curve:
> >
> > ---
> > plot(
> > NA,
> > NA,
> > main="",
> > xlim=c(-20,0),
> > ylim=c(0,100),
> > xlab = "water potential [MPa]",
> > ylab = "percent loss of conductivity [%]",
> > xaxp = c(0,-20,4),
> > yaxp = c(0,100,5),
> > tck = 0.02,
> > mgp = c(1.5,0.1,0),
> > )
> >
> > for(i in 1:3){
> > x <- subset(curvedata,Group == i)$MPa
> > y <- subset(curvedata,Group == i)$PLC
> > name <- subset(curvedata,Group == i)$Sample
> > points(x,y)
> >
> > vlc <- nls(y ~ 100/(1+exp(a*(x-b))), start=c(a=1, b=-3),
> > data=list(x,y))
> >
> > curve(100/(1+exp(coef(vlc)[1]*(x-coef(vlc)[2]))), col=1, add = TRUE)
> >
> > Rsquared <- 1 - var(residuals(vlc))/var(y)
> >
> > summarizeall[i ,"Run"] <- i
> > summarizeall[i ,"Sample"] <- name[1]
> > summarizeall[i ,"a"] <- coef(vlc)[1]
> > summarizeall[i ,"b"] <- coef(vlc)[2]
> > summarizeall[i ,"R2"] <- Rsquared
> >
> > listnow <- data.frame(list(Run = c(i),Sample = c(name[1]), a =
> > c(coef(vlc)[1]), b = c(coef(vlc)[2]), R2 = c(Rsquared)))
> > print(listnow)
> >
> > i <- i+1
> > }
> > ---
> >
> > ...and get three slightly different curves with three different
> > estimatinos
> > of fit (r², Rsquared).
> >
> > ---
> >> summarizeall
> >  Sample   a       b        R2
> > 1   1 1.388352 -3.277755 0.9379886
> > 2   2 1.800007 -3.363075 0.9327164
> > 3   3 1.736857 -2.743972 0.9882998
> >
> >> average
> >   Var n     a          b         R2
> > 1 Mean 3 1.6417389 -3.1282673 NA
> > 2   SE . 0.1279981  0.1937197 NA
> > ---
> >
> > by averaging parameters a and b of the curve, i create a "mean
> > curve" that
> > is added to the plot (red curve in the attached image).
> >
> > http://r.789695.n4.nabble.com/file/n4394609/conductivity-curve.gif
> >
> > ---
> > meana <- average[1,"a"]
> > meanb <- average[1,"b"]
> > curve(), col=2, lwd=2, add = TRUE)
> > ---
> >
> > and now here's my problem:
> > i'd like to calculate R squared for all points on that mean curve.
> > since i have to average the curve parameters, i loose the curve's
> > residuals
> > that are stored in my variable vlc (the result of the nls function)
> > for
> > every sample.
> > just fitting one curve to all the data points is not good enough.
>
> So just calculate them?
> # pseudo-code: residual= actual - predicted
>
> gresid <- curvedata$PLC - 100/(1+exp(meana*(curvedata$MPa-meanb))
>
>
> If you are convinced that your formula for R^2 makes sense and this
> practice is generally accepted in your domain, then you can apply it
> across the whole dataset. I would have thought that a single
> regression model built with nlmer might have been more statistically
> sound. (But this is a bit outside my domain of comfort for giving
> advice.)
>
> >
> > an extensive google search over several days hasn't gotten me
> > anywhere, but
> > maybe someone here can help me?
> >
> > is there an efficient way to calculate r squared for a predefined
> > function
> > with "unrelated" data points?
> > (unrelated as in "not used directly for fitting")
> >
> >
> > thanks in advance
> > markus
>
> David Winsemius, MD
> West Hartford, CT
>
> ______________________________________________
> [hidden email] <http://user/SendEmail.jtp?type=node&node=4395634&i=0>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.
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://r.789695.n4.nabble.com/how-to-get-r-squared-for-a-predefined-curve-or-function-with-other-data-points-tp4394609p4395634.html
>  To unsubscribe from how to get r-squared for a predefined curve or
> function with "other" data points, click here<http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4394609&code=bm9sZi5tYXJrdXNAZ21haWwuY29tfDQzOTQ2MDl8LTE0MDUwOTcyOTk=>
> .
> NAML<http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>


--
View this message in context: http://r.789695.n4.nabble.com/how-to-get-r-squared-for-a-predefined-curve-or-function-with-other-data-points-tp4394609p4396720.html
Sent from the R help mailing list archive at Nabble.com.
	[[alternative HTML version deleted]]

