vincent laperriere
2010-Mar-08 15:24 UTC
[R] fit a gamma pdf using Residual Sum-of-Squares
Hi all, I would like to fit a gamma pdf to my data using the method of RSS (Residual Sum-of-Squares). Here are the data: x <- c(86, 90, 94, 98, 102, 106, 110, 114, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 170, 174) y <- c(2, 5, 10, 17, 26, 60, 94, 128, 137, 128, 77, 68, 65, 60, 51, 26, 17, 9, 5, 2, 3, 7, 3) I have typed the following code, using nls method: fit <- nls(y ~ (1/((s^a)*gamma(a))*x^(a-1)*exp(-x/s)), start = c(s=3, a=75, x=86)) But I have the following message error (sorry, this is in German): Fehler in qr(.swts * attr(rhs, "gradient")) : Dimensionen [Produkt 3] passen nicht zur Länge des Objektes [23] Zusätzlich: Warnmeldung: In .swts * attr(rhs, "gradient") : Länge des längeren Objektes ist kein Vielfaches der Länge des kürzeren Objektes Could anyone help me with the code? I would greatly appreciate it. Sincerely yours, Vincent Laperrière. [[alternative HTML version deleted]]
Thanks for making it quickly reproducible - I was able to see that message in English within a few seconds. The start has x=86, but the data is also called x. Remove x=86 from start and you get a different error. P.S. - please do include the R version information. It saves time for us, and we like it if you save us time. "vincent laperriere" <vincent_laperriere at yahoo.fr> wrote in message news:883644.16455.qm at web24106.mail.ird.yahoo.com... Hi all, I would like to fit a gamma pdf to my data using the method of RSS (Residual Sum-of-Squares). Here are the data: x <- c(86, 90, 94, 98, 102, 106, 110, 114, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 170, 174) y <- c(2, 5, 10, 17, 26, 60, 94, 128, 137, 128, 77, 68, 65, 60, 51, 26, 17, 9, 5, 2, 3, 7, 3) I have typed the following code, using nls method: fit <- nls(y ~ (1/((s^a)*gamma(a))*x^(a-1)*exp(-x/s)), start = c(s=3, a=75, x=86)) But I have the following message error (sorry, this is in German): Fehler in qr(.swts * attr(rhs, "gradient")) : Dimensionen [Produkt 3] passen nicht zur L?nge des Objektes [23] Zus?tzlich: Warnmeldung: In .swts * attr(rhs, "gradient") : L?nge des l?ngeren Objektes ist kein Vielfaches der L?nge des k?rzeren Objektes Could anyone help me with the code? I would greatly appreciate it. Sincerely yours, Vincent Laperri?re. [[alternative HTML version deleted]] -------------------------------------------------------------------------------->
On 2010-03-08 8:24, vincent laperriere wrote:> Hi all, > > I would like to fit a gamma pdf to my data using the method of RSS (Residual Sum-of-Squares). Here are the data: > > x<- c(86, 90, 94, 98, 102, 106, 110, 114, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 170, 174) > y<- c(2, 5, 10, 17, 26, 60, 94, 128, 137, 128, 77, 68, 65, 60, 51, 26, 17, 9, 5, 2, 3, 7, 3) > > I have typed the following code, using nls method: > > fit<- nls(y ~ (1/((s^a)*gamma(a))*x^(a-1)*exp(-x/s)), start = c(s=3, a=75, x=86)) >There are a couple of problems: 1) don't include a start value for x; it's not a 'parameter'; 2) you're trying to fit a *density* function to data that's clearly not normalized. A quick check shows that your empirical curve integrates to about 4000: y[-1] * diff(x) # 3992 This almost works: fit<- nls(y ~ 4000*(1/((s^a)*gamma(a))*x^(a-1)*exp(-x/s)), start = c(s=3, a=75)) but not quite; I still get an error. So let's do the right thing and plot the data and some test fits: plot(y ~ x) curve(4000 * dgamma(x, shape=75, scale=3), add=TRUE) # no good curve(4000 * dgamma(x, shape=75, scale=1), add=TRUE) # no good curve(4000 * dgamma(x, shape=75, scale=1.6), add=TRUE) # pretty good! fit<- nls(y ~ 4000*(1/((s^a)*gamma(a))*x^(a-1)*exp(-x/s)), start = c(s=1.6, a=75)) coef(fit) # s a # 1.399638 86.395409 xx <- seq(86, 174, length=100) yy <- predict(fit, data.frame(x=xx)) plot(y ~ x) lines(yy ~ xx, col='red') -Peter Ehlers> But I have the following message error (sorry, this is in German): > > > Fehler in qr(.swts * attr(rhs, "gradient")) : > Dimensionen [Produkt 3] passen nicht zur L?nge des Objektes [23] > Zus?tzlich: Warnmeldung: > In .swts * attr(rhs, "gradient") : L?nge des l?ngeren Objektes > ist kein Vielfaches der L?nge des k?rzeren Objektes > > Could anyone help me with the code? > I would greatly appreciate it. > Sincerely yours, > Vincent Laperri?re. > > > > [[alternative HTML version deleted]] > > > > > ______________________________________________ > R-help at r-project.org 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.-- Peter Ehlers University of Calgary