Hola a todos los R-ayudas estoy tratando de escribir una función en R que me devuelva los estimadores (coef()) de un análisis de regresión no lineal. La estructura de mi base de datos es la siguiente: ##str(nigra) ''data.frame'': 334 obs. of 3 variables: $ parcela: Factor w/ 55 levels "cu1","cu10","cu11",..: 1 1 1 1 1 1 1 1 12 12 ... $ edad : int 46 51 56 61 66 71 79 88 44 49 ... $ ho : num 12.4 12.6 12.8 13.4 14.2 14.9 16.2 16.4 14.2 14.9 ... ## donde, como se puede observar, son 334 observaciones, un factor (parcela) con 55 niveles y dos variables numéricas edad y ho, he logrado aplicar un modelo no lineal con la función nls() así: ## hossfeldIV <- nls(ho~edad*exp(0.1)/(a+b*(edad*exp(0.1))), data=nigra, start=list(a=30, b=10), trace=TRUE) coef(hossfeldIV) ## con lo cual me devuelve los coeficientes globales de la base de datos, pero lo que quiero es obtener los estimadores por cada uno de los niveles del factor parcela al correr el modelo, soy novato en R, pero intento aprovechar su funcionalidad, leyendo sobre programar funciones puedo escribir algo así: ##> parameters <- function(datos){+ hossfeldIV <- nls(ho~edad*exp(0.1)/(a+b*(edad*exp(0.1))), + data=datos, start=list(a=30, b=10), trace=TRUE) + asint_pend <- coef(hossfeldIV) + return(asint_pend) + } ## con lo cual está en función de "datos", es decir, si le doy un dataframe en lugar de datos, debería obtener lo que quiero, pero no es así... por favor si alguien puede ayudarme se lo agradecería.. saludos cordiales Roy [[alternative HTML version deleted]]
marcelino.delacruz en upm.es
2012-Nov-11 19:46 UTC
[R-es] programación en R_escribir función
Tal vez así (si no he olvidado algún paréntesis): parameters <- function(datos){ asint_pend <- NULL for (p in unique(datos$parcela)){ hossfeldIV <- nls(ho~edad*exp(0.1)/(a+b*(edad*exp(0.1))), data=datos[datos$parcela==p,], start=list(a=30, b=10), trace=TRUE) asint_pend <- rbind(c(p,coef(hossfeldIV))) } return(asint_pend) } Marcelino Con fecha 11/11/2012, "Roy Vera" <roy_2roger en yahoo.com.mx> escribió:>Hola a todos los R-ayudas > >estoy tratando de escribir una función en R que me devuelva los estimadores (coef()) de un análisis de regresión no lineal. La estructura de mi base de datos es la siguiente: > >##str(nigra) > >'data.frame': 334 obs. of 3 variables: > $ parcela: Factor w/ 55 levels "cu1","cu10","cu11",..: 1 1 1 1 1 1 1 1 12 12 ... > $ edad : int 46 51 56 61 66 71 79 88 44 49 ... > $ ho : num 12.4 12.6 12.8 13.4 14.2 14.9 16.2 16.4 14.2 149 ... > > >## > >donde, como se puede observar, son 334 observaciones, un factor (parcela) con 55 niveles y dos variables numéricas edad y ho, > >he logrado aplicar un modelo no lineal con la función nls() así: > >## > >hossfeldIV <- nls(ho~edad*exp(0.1)/(a+b*(edad*exp(0.1))), data=nigra, start=list(a=30, b=10), trace=TRUE) >coef(hossfeldIV) > >## > >con lo cual me devuelve los coeficientes globales de la base de datos, pero lo que quiero es obtener los estimadores por cada uno de los niveles del factor parcela al correr el modelo, soy novato en R, pero intento aprovechar su funcionalidad, leyendo sobre programar funciones puedo escribir algo así: > > >## > >> parameters <- function(datos){ >+ hossfeldIV <- nls(ho~edad*exp(0.1)/(a+b*(edad*exp(0.1))), >+ data=datos, start=list(a=30, b=10), trace=TRUE) >+ asint_pend <- coef(hossfeldIV) >+ return(asint_pend) >+ } >## > > >con lo cual está en función de "datos", es decir, si le doy un dataframe en lugar de datos, debería obtener lo que quiero, pero no es así... por favor si alguien puede ayudarme se lo agradecería.. > >saludos cordiales > >Roy > [[alternative HTML version deleted]] >