caragar datos en eviroment/importar dataset/poner un nombre y yes en cabecera/importar
Datos <- read.csv("C:/LUGO/CURSOR/Bases_datos/TreeVolumes.csv")
View(Datos)#ver los datos
View(Datos$volume.dm3)#Ver la columna volumen unicamnete
#agregar columas
Datos$d2<-Datos$dbh.cm**2 #Calcular la columna d2
Datos$vd2<-Datos$volume.dm3*Datos$d2 #Calcular la columna vd2
Datos$d4<-Datos$dbh**4 #Calcular la columna d4
# Calcualr el valor b
mumb<-sum(Datos$vd2)-sum(Datos$volume.dm3)*sum(Datos$d2)/length(Datos$d2)
denb<-sum(Datos$d4)-(sum(Datos$d2))**2/length(Datos$d2)
b<-mumb/denb
#Calcular el valor a
a<-mean(Datos$volume.dm3)-b*mean(Datos$d2)
#por lo tanto tendremos la recta V=-115.1388+0.6862*d2 en cm.
variables dependientes(Y)=variables independientes(x+z)
recta<-lm(volume.dm3~d2, Datos) #Es igual lm(Datos$volume.dm3~Datos$d2), se recomienda la primera obción.
Al poner nombre(recta) aparece en Evironmente los datos con una serie de descripción. por ejemplo en el coeficientes nos muetra el valor de los coeficientes a y b. siguiente scrib.
recta$coefficients #para que nos muestre los coeficientes de la recta.
## (Intercept) d2
## -115.1388740 0.6862423
summary(recta) #para que nos muestre el resumen del modelo.
##
## Call:
## lm(formula = volume.dm3 ~ d2, data = Datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -99.011 -51.517 -0.093 51.615 131.836
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -115.13887 30.69128 -3.752 0.000815 ***
## d2 0.68624 0.04549 15.086 5.66e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 65.74 on 28 degrees of freedom
## Multiple R-squared: 0.8904, Adjusted R-squared: 0.8865
## F-statistic: 227.6 on 1 and 28 DF, p-value: 5.658e-15
en esta parte nos muestra el residual mas pequeño, el mas grande, primer cuartil, mediana, 3q. El residual standartd error es llamada tambien root mean squarer error o la raiz del error medio cuadratico(RMSE). El multiple R-squared nos muestra el error, por lo tanto el error seria lo faltante(10.06)#?revisar el adjusted r-squared es la que se utiliza para comparar modelos, ya que toma en cuenta los variables empleados.
obtener el r2, los residuales se pueden ver en la caja (lado derecho).
numr2<-sum((recta$residuals)**2)
denr2<-sum((Datos$volume.dm3-mean(Datos$volume.dm3))**2)
r2<-1-numr2/denr2
#r ajustado
numr2a<-numr2/28
denr2a<-denr2/29
r2a<-1-numr2a/denr2a
rmse<-sqrt(numr2/28)
anova(recta)
## Analysis of Variance Table
##
## Response: volume.dm3
## Df Sum Sq Mean Sq F value Pr(>F)
## d2 1 983438 983438 227.58 5.658e-15 ***
## Residuals 28 120994 4321
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
sqrt(4321)
## [1] 65.73431
recta2<-lm(volume.dm3~d2+tree, Datos)
summary(recta2)
##
## Call:
## lm(formula = volume.dm3 ~ d2 + tree, data = Datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -96.211 -63.983 -3.883 39.874 126.608
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -132.83369 39.15559 -3.392 0.00215 **
## d2 0.68892 0.04601 14.974 1.34e-14 ***
## tree 1.03433 1.40241 0.738 0.46716
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 66.28 on 27 degrees of freedom
## Multiple R-squared: 0.8926, Adjusted R-squared: 0.8847
## F-statistic: 112.2 on 2 and 27 DF, p-value: 8.279e-14
coparar los l?os modelos
modelo 1 r2=0.8904, r2 adj=0.8865, Residual standard error (RMSE): 65.74
modelo 2 r2=0.8926,, r2 adj=0.8847,
este modelo (2)es mejor segun r, pero r2 ajustado nos dice que el primero (1) es mejor, por lo tanto el mejor es el primero (1).
quitar el termino independiente y compara modelos.
recta3<-lm(volume.dm3~d2-1,Datos)
summary(recta3)
##
## Call:
## lm(formula = volume.dm3 ~ d2 - 1, data = Datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -126.53 -74.25 -40.17 42.55 147.88
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## d2 0.52918 0.02143 24.7 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 79.18 on 29 degrees of freedom
## Multiple R-squared: 0.9546, Adjusted R-squared: 0.9531
## F-statistic: 610 on 1 and 29 DF, p-value: < 2.2e-16
modelo 3 r2=0.9546,, r2 adj=0.9531, Residual standard error (RMSE): 76.18
Este modelo nos muestra ser la mejor sun embargo el RMSE mustra que el error es mayor por lo tanto el mejor es la primera por el RMSE menor.
numr22<-sum((recta3$residuals)**2)
denr22<-sum((Datos$volume.dm3-mean(Datos$volume.dm3))**2)
r22<-1-numr22/denr22
Datos$d2h<-Datos$d2*Datos$height.m
recta4<-lm(volume.dm3~d2h, Datos)
summary(recta4)
##
## Call:
## lm(formula = volume.dm3 ~ d2h, data = Datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -71.689 -10.537 -0.636 9.910 56.056
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.426e+01 9.663e+00 1.476 0.151
## d2h 3.596e-02 9.862e-04 36.459 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 28.53 on 28 degrees of freedom
## Multiple R-squared: 0.9794, Adjusted R-squared: 0.9786
## F-statistic: 1329 on 1 and 28 DF, p-value: < 2.2e-16
modelo 4 r2=0.9794, r2 adj=0.9794, Residual standard error (RMSE): 28.53
este modelo es el mejor
estra trabajando con los mismos datos
que todos tengan un termino independiente
que la variable dependiente se ala misma(v)
recta5<-lm(volume.dm3~d2h-1, Datos)
summary(recta5)
##
## Call:
## lm(formula = volume.dm3 ~ d2h - 1, data = Datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -73.851 -5.979 6.771 18.455 52.602
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## d2h 0.0371823 0.0005422 68.57 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 29.1 on 29 degrees of freedom
## Multiple R-squared: 0.9939, Adjusted R-squared: 0.9937
## F-statistic: 4702 on 1 and 29 DF, p-value: < 2.2e-16
esta pero por no tener variable independiente
calcular el r2 verdadero del modelo
obtener el r2, los residuales enla caja (lado derecho) muestran los errores
numr5<-sum((recta5$residuals)**2)
denr5<-sum((Datos$volume.dm3-mean(Datos$volume.dm3))**2)
r2<-1-numr5/denr5
r ajustado
numr5a<-numr5/28 #(20-(n-p)),n=numero total de observaciones-p(2)
denr5a<-denr5/29 #
r5a<-1-numr5a/denr5a
rmse<-sqrt(numr5/28)
anova(recta5)
## Analysis of Variance Table
##
## Response: volume.dm3
## Df Sum Sq Mean Sq F value Pr(>F)
## d2h 1 3981455 3981455 4702 < 2.2e-16 ***
## Residuals 29 24556 847
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
sqrt(877) #Comprobar el rmse que coincidan(sqrt(el valor de numr5a))
## [1] 29.61419
ajustar un modelo no lineal v=ad(b)h(c) con nls
Datos <- read.csv("C:/LUGO/CURSOR/Bases_datos/TreeVolumes.csv")
ajuste.nl<-nls(volume.dm3~a*dbh.cm**b*height.m**c, Datos,start=c(a=0.04, b=2, c=1))
start=es el valor de partida de los parametros, dede el valor de b y c se toman de la formula general para calcular el volumen de un arbol v=s(pi/4)d2h
summary(ajuste.nl)
##
## Formula: volume.dm3 ~ a * dbh.cm^b * height.m^c
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 0.07684 0.03096 2.482 0.0196 *
## b 1.73748 0.14275 12.171 1.79e-12 ***
## c 1.05803 0.09499 11.138 1.34e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 28.34 on 27 degrees of freedom
##
## Number of iterations to convergence: 7
## Achieved convergence tolerance: 4.581e-07
calcular r2
numr<-sum((resid(ajuste.nl)**2)) #
sqrt(numr/27)#calculo de numr(anterior)
## [1] 28.33802
denr<-sum((Datos$volume.dm3-mean(Datos$volume.dm3))**2)
r2<-1-numr/denr
modelo r2=0.9803, Residual standard error (RMSE): 28.34
r2 llamarlo eficiencia de modelo (ME)
hacer un ajuste lineal
r2lineal<-lm(Datos$volume.dm3~fitted(ajuste.nl))
summary(r2lineal)#este ajuste nos da mejro ajuste que el anterior, (utilizar cualquiera de las dos)
##
## Call:
## lm(formula = Datos$volume.dm3 ~ fitted(ajuste.nl))
##
## Residuals:
## Min 1Q Median 3Q Max
## -65.137 -11.306 -0.071 10.336 56.394
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.60370 9.63948 0.374 0.711
## fitted(ajuste.nl) 0.99159 0.02645 37.488 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 27.76 on 28 degrees of freedom
## Multiple R-squared: 0.9805, Adjusted R-squared: 0.9798
## F-statistic: 1405 on 1 and 28 DF, p-value: < 2.2e-16
nos muestra que el a es cero(.71, significativo) y b1(.99)
si no se sabe los valores de los parametros se realiza la linealizacion del modelo.
primero que hay que comvertirlo en un modelo no lineal e intentar linealizarlo para tener solo una solucion, para el caso del modelo trabajo aplicar log.
v=ad(b)h(c)==logv=loga+blogd+clogh, fijar que cuando se tiene en la base datos un valor negativo el log no sirve poque no hay log en numeros negativos.
ocupar el mismo logaritmo para todo el modelo
Datos$logy<-log(Datos$volume.dm3)
Datos$logd<-log(Datos$dbh.cm)
Datos$logh<-log(Datos$height.m)
ajuste.log<-lm(logy~logd+logh,Datos)
summary(ajuste.log)
##
## Call:
## lm(formula = logy ~ logd + logh, data = Datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.154020 -0.072066 -0.001231 0.055804 0.134780
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.66057 0.23557 -7.049 1.41e-07 ***
## logd 1.37648 0.12994 10.593 4.06e-11 ***
## logh 1.16540 0.09097 12.810 5.49e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08461 on 27 degrees of freedom
## Multiple R-squared: 0.99, Adjusted R-squared: 0.9892
## F-statistic: 1334 on 2 and 27 DF, p-value: < 2.2e-16
logv=loga+blogd+clogh, como no cambiaron los coeficinetes d y h , los valores no cambian pero el coeficinete a si cambia por lo tanto hay que convertirlo (log=e^el)
exp(-1.66057)
## [1] 0.1900306
Estos resultados de rs no se pueden comparar con los ajustes anteriore, ya que los variables no son iguales, aqui se trabaja con log y en las anteriores no se aplica log
ajuste.nl<-nls(volume.dm3~a*dbh.cm**b*height.m**c, Datos,start=c(a=1.37648, b=1.16540, c=0.1900306))
summary(ajuste.nl)
##
## Formula: volume.dm3 ~ a * dbh.cm^b * height.m^c
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 0.07684 0.03096 2.482 0.0196 *
## b 1.73748 0.14275 12.171 1.79e-12 ***
## c 1.05803 0.09499 11.138 1.34e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 28.34 on 27 degrees of freedom
##
## Number of iterations to convergence: 10
## Achieved convergence tolerance: 3.12e-07
esto nos da lo mismo si no se linealiza
Ley Eichorn, vio que la existencia de produccion depende de la altura media del rodal+edad o diametro cuadratico(dg), sin embargo la altura es afecta por los tratamientos por lo tanto se emplea la altura dominantes, considerando que los tratamientos no afecten los arboles dominantes, entonces produccion=altura dominante+edad.
metodo de la curva guia
metodo de las curvas de diferencias algebraicas (ADA)
metodo de estimacion de parametros(muy bueno pero poco utilizado)
cubrir todas las edades
todos lo sitios desde los mejores hasta los peores
tener datos representativos
parcelas temporales (una medicion)
parcelas pemanentes (3 o mas mediciones)
parcelas de intervalos (se miden 2 veces, coindicen con los tratamientos)
análisis de troco (el Árbol tiene que ser dominante, sin embargo no sabes de su pasado, pudo no ser el denominate y empezo a serlo despues de la corta de los dominates)
deben de ser crecientes
tener dos puntos de inflexion (al inicio y al final).
la curvas deben de tener asintota (un punto maximo de crecimiento).
pasar por el punto 0,0 (comportamiento biologico razonable).
deben de tener un edad de referencia que se le conoce como indice de sitio (turno)
En este metodo se puede ocupar todo tipo de datos, da igual de donde venga sera dificil encontrar masas abanzadas con edades mas altas, ya que se cortan antes.
se debe elieguir un modelo que cumple con las 4 caracteristicas y por regresion no lineal,se agusta la curva guia a todos esos puntos
figar una ead de referencia, se debe escoger de la mitad del turno hacia adelante porque al inicio las plantas pueden tener lento o rapido crecimeinto po el calidad de sitio y despues se muestran el verdadero comportamiento de las cuvas guias.
ver los valores maximos y minimos a la edad de referencia, un poco por encima y por debajo del ultimo punto tenindo dos curvas(una arriba y otra abajo) en la diferencia entre ambos puntos se sacan el resto de los puntos.
tienen que ser polimorficas
tener difeentes asintontas (forma de s) (asintoto= edad maxima que alcanzan los arboles).
curvas anamorficas (proporcionales)
curvas polimorficas (no proporcionales)
las curvas son proporcionales cuando todos los factores son iguales excepto un factor, lo logico es que no sean proporcionaes
datoscg <- read.csv("C:/LUGO/CURSOR/Bases_datos/StemAnalysis161PinusRadiata.csv")
View(datoscg)
tail(datoscg)#para que nos mueste los ultimos datos, cola.
## plot tree age.yr height.m
## 1905 BAC2 161 8 6.69
## 1906 BAC2 161 9 8.17
## 1907 BAC2 161 10 9.40
## 1908 BAC2 161 11 10.40
## 1909 BAC2 161 12 11.44
## 1910 BAC2 161 13 12.89
datoscg[1910, ] #para que nos muestre la ultima fila de datos
## plot tree age.yr height.m
## 1910 BAC2 161 13 12.89
plot(datoscg$age.yr,datoscg$height.m)#primero crear un plot para ver como se distribuyen los puntos
notar que a edades avanzadas no hay muchos datos de pinus radiata
trabajar con el modelo de HOSSFELD, uno de los de amediado del siglo XIX,
es facil de trabjar
HO=t2/(a+bt)2
datoscg$y<-datoscg$age.yr/(datoscg$height.m)**0.5 #crear una columna de Y, 0.5 es para la raiz
plot(datoscg$age.yr,datoscg$y) #crear un plot con el nuevo columa creado
#LINEALIZAR MODELO (lm)
HO=t2/(a+bt)2
raiz(HO)=t/(a+bt)
despejar a+bt=y
a+bt=t/raiz(Ho)
y=t/raiz(H0)#modelo linealizado a ajustar
reg.lineal<-lm(y~age.yr, datoscg ) #ajustar modelo
summary(reg.lineal) #el sumary es significativo y el r2 no nos sirve ya que el modelo no es lineal
##
## Call:
## lm(formula = y ~ age.yr, data = datoscg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.14581 -0.33954 -0.07457 0.20745 2.83346
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.859381 0.021693 85.71 <2e-16 ***
## age.yr 0.140788 0.001281 109.87 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4803 on 1908 degrees of freedom
## Multiple R-squared: 0.8635, Adjusted R-squared: 0.8634
## F-statistic: 1.207e+04 on 1 and 1908 DF, p-value: < 2.2e-16
HO=t2/(a+bt)2
lim(t>-inf) t2/(a+bt)2
inf/inf=interminada
t2/(a+b2t^2abt)
1/(a2/t2+b^2+2ab/t)
1/(0+b^2+0) este se empleara en la siguinete parte para obtener el asintota
1/0.1408**2 #asisntota qe se va a utilizar en ln.. 0.1408 se obtiene del modelo anterior
## [1] 50.44228
con este ajuste nos da a=1.8593 y b=0.1408, las cuales se van a utilizar para el ajuste del nls
HO=t2/(a+bt)2
reg.nl<-nls(height.m~(age.yr**2)/(a+b*age.yr)**2,datoscg, start=c(a=1.86, b=0.14))
summary(reg.nl)
##
## Formula: height.m ~ (age.yr^2)/(a + b * age.yr)^2
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 1.778673 0.023522 75.62 <2e-16 ***
## b 0.141209 0.001182 119.51 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.777 on 1908 degrees of freedom
##
## Number of iterations to convergence: 3
## Achieved convergence tolerance: 1.923e-06
1/0.1412**2 #asintota de b en nls
## [1] 50.15689
HO=t2/(a+bt)2
HO=t2(años)/(1.7787+0.1412t(años))2, con un RMSE=2.777 m
fijar una edad de referencia, en este caso sera 20 años
buscar losdos puntos guia de los extremos a 20 años, seran 8m y 28 m
crear otros tres dentro del intervalo de as dos, seran a 13m, 18m y 23m
HO=t2/(a+bt)2
8=202/(a+b(20))2 para la primera curva, mismo procedimiento para el resto.
utilizar el valor de a obtenido en el ajuste de nls
8=202/(1.7787+b8(20))2 sustituir en a
20/raiz(8)=1.7787+b8(20)
b8=((20/raiz(8))-1.7787)/20 #la cual se aplicara a cada recta
1-. a=1.778(fijo) y b=cambia, Familia polimorfica con multiples asintotas, a utilizar
2-. a=cambia y b=0.1412(fijo), polimorficas con asintota unica
b8<-(20/sqrt(8)-1.7787)/20
b13<-(20/sqrt(13)-1.7787)/20
b18<-(20/sqrt(18)-1.7787)/20
b23<-(20/sqrt(23)-1.7787)/20
b28<-(20/sqrt(28)-1.7787)/20
x<-c(0,1:40) #hasta la edad maxima en x
HO=t2/(a+bt)2 sustituir en la formula original
y8<-x**2/(1.7787+0.2646*x)**2 #en el paraemtro a= valor obtenido al ajustar,b=obtenido derivar b ventana a lado derecho
y13<-x**2/(1.7787+0.1884*x)**2
y18<-x**2/(1.7787+0.1467*x)**2
y23<-x**2/(1.7787+0.1195*x)**2
y28<-x**2/(1.7787+0.1000*x)**2
plot(datoscg$age.yr,datoscg$height.m)
lines(x,y8, col="red", lwd=2) # curvas sobre plot de distribucion
lines(x,y13, col="red",lwd=2)
lines(x,y18, col="red",lwd=2)
lines(x,y23, col="red",lwd=2)
lines(x,y28, col="red",lwd=2)
esta familia de curva no se agusta muy bien a los puntos, en la parte de los 10 primeros años y en la quinta parte.
8=202/(a+b(20))2 para la primera curva, mismo procedimiento para el resto.
8=202/(a+0.1412(20))2
8=202/(a+2.824)2
20/raiz(8)=a+2.824
a8=20/raiz(8)-2.824
a8<-(20/sqrt(8)-2.824)
a13<-(20/sqrt(13)-2.824)
a18<-(20/sqrt(18)-2.824)
a23<-(20/sqrt(23)-2.824)
a28<-(20/sqrt(28)-2.824)
HO=t2/(a+bt)2 sustituir en la formula original
z8<-x**2/(4.2470+0.1412*x)**2 #en el paraemtro b= valor obtenido al ajustar, b=obtenido derivar a
z13<-x**2/(2.7230+0.1412*x)**2
z18<-x**2/(1.8900+0.1412*x)**2
z23<-x**2/(1.3462+0.1412*x)**2
z28<-x**2/(0.9556+0.1412*x)**2
plot(datoscg$age.yr,datoscg$height.m)
lines(x,z8, col="blue",lwd=2) ## curvas sobre plot de distribucion
lines(x,z13, col="blue",lwd=2)
lines(x,z18, col="blue", lwd=2)
lines(x,z23, col="blue",lwd=2)
lines(x,z28, col="blue",lwd=2)
esta curva se ajusta mejor a los datos.
en ambas familias se ajusto unicamente la curva central y de ahi se distrbuyen los otros.
Ho=a(1-e-bt)c
Primero buscar donde esta la asintota si esta se desconoce o si se conoce de otros trabajos utilizarlos
asintota= valor al que tiende la curva cuando la edad es muy grande
asintota lim(t>inf) a(1-e-bt)c, donde:
-bt=inf e^-bt=0 1-e-bt=1c por lo tanto tendriamos
a*1, entonces nuestra asintota tiene un valor a(valor del parametro) cuando b>0
tenemos que quitar el exponente en nuestra formula original obteniendo
log Ho= log a + c log(1-e^(-bt)) donde:
log Ho=y log a=a log(1-e^(-bt))=x,
obteniedo y=a+cx, sin embargo, este modelo no es lineal debido a que no se conoce y no se puede calcular el valor ede b ya que es un parametro
datoscg$y<-log(datoscg$height.m)
entonces buscaremos el mayor r2 y el menor RMSE sustituyendo valores en el parametro b hasta encontra el mejor, como se muestra acontinuación.
datoscg$x8<-log(1-exp(-8*datoscg$age.yr))#cuando el valor es 8
ajuste<-lm(y~x8, datoscg)
summary(ajuste)
##
## Call:
## lm(formula = y ~ x8, data = datoscg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.9556 -0.4343 0.1526 0.5909 1.1878
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.362e+00 1.704e-02 138.632 < 2e-16 ***
## x8 7.092e+03 1.110e+03 6.391 2.06e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7438 on 1908 degrees of freedom
## Multiple R-squared: 0.02096, Adjusted R-squared: 0.02045
## F-statistic: 40.85 on 1 and 1908 DF, p-value: 2.062e-10
datoscg$x30<-log(1-exp(-30*datoscg$age.yr))#cuando el valor es 30, donde el r2 es menor, entonces se descarta los que son >30 ya que buscamos el valor mas grande
ajuste<-lm(y~x30, datoscg)
summary(ajuste)
##
## Call:
## lm(formula = y ~ x30, data = datoscg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.9564 -0.4343 0.1527 0.5909 1.1878
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.362e+00 1.704e-02 138.627 < 2e-16 ***
## x30 2.538e+13 3.978e+12 6.381 2.2e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7438 on 1908 degrees of freedom
## Multiple R-squared: 0.0209, Adjusted R-squared: 0.02038
## F-statistic: 40.72 on 1 and 1908 DF, p-value: 2.2e-10
datoscg$x6<-log(1-exp(-6*datoscg$age.yr))# obtenermos valor > al 8 por lo tanto descartamos el valor de 8
ajuste<-lm(y~x6, datoscg)
summary(ajuste)
##
## Call:
## lm(formula = y ~ x6, data = datoscg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.9505 -0.4344 0.1525 0.5907 1.1877
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.36195 0.01703 138.665 < 2e-16 ***
## x6 968.30040 149.97208 6.457 1.36e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7436 on 1908 degrees of freedom
## Multiple R-squared: 0.02138, Adjusted R-squared: 0.02087
## F-statistic: 41.69 on 1 and 1908 DF, p-value: 1.355e-10
datoscg$x005<-log(1-exp(-0.05*datoscg$age.yr))# obtenemos el mejor r2= .8837y rmse=0.2563(revisar)
ajuste<-lm(y~x005, datoscg)
summary(ajuste)
##
## Call:
## lm(formula = y ~ x005, data = datoscg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.33589 -0.12545 0.03531 0.16724 1.09789
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.57249 0.01168 306.0 <2e-16 ***
## x005 1.44194 0.01197 120.4 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2563 on 1908 degrees of freedom
## Multiple R-squared: 0.8837, Adjusted R-squared: 0.8837
## F-statistic: 1.45e+04 on 1 and 1908 DF, p-value: < 2.2e-16
con esto tenemos b=0.05, a=1.5, a=e^3.6
exp(3.6)#calcular la asintota, la cual nos da 36 y es muy alta a la recta que estamos ajustando, recordad que se está ajustando la curva central, ver en plot
## [1] 36.59823
plot(datoscg$age.yr, datoscg$height.m)
ajuste.nl<-nls(height.m~a*(1-exp(-b*age.yr))**c,datoscg, start=c(a=36, b=0.05, c=1.5))# ajustar el modelo no lineal, en la cual nos da una asintota de 31( valor de a)
summary(ajuste.nl)
##
## Formula: height.m ~ a * (1 - exp(-b * age.yr))^c
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 31.012002 0.712315 43.54 <2e-16 ***
## b 0.069592 0.003904 17.83 <2e-16 ***
## c 1.686666 0.067585 24.96 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.774 on 1907 degrees of freedom
##
## Number of iterations to convergence: 4
## Achieved convergence tolerance: 9.714e-06
con esto obtenemos Ho=31.012*(1-e-0.070t)1.687
por lo tanto tenemos tres obciones de familia (a,b y c)
x<-c(0:40) #Crear un vector de acurdo a la edad mayor
a=variable, b=fija c=fija —–multiples asintotas
HoI/HoII=aI(1-e(-bt))c/aII(1-e-bt)c #cambios en aI y aII
HoI/HoII=aI/aII—–Curvas anamorficas o proporcionales
Del modelo origina despejamos a
a=Ho/(1-e-bt)c
a8=8/(1-e-0.070(20))1.687
a8<-8/(1-exp(-0.070*20))**1.687
a13<-13/(1-exp(-0.070*20))**1.687
a18<-18/(1-exp(-0.070*20))**1.687
a23<-23/(1-exp(-0.070*20))**1.687
a28<-28/(1-exp(-0.070*20))**1.687
y8<-a8*(1-exp(-0.070*x))**1.687
y13<-a13*(1-exp(-0.070*x))**1.687
y18<-a18*(1-exp(-0.070*x))**1.687
y23<-a23*(1-exp(-0.070*x))**1.687
y28<-a28*(1-exp(-0.070*x))**1.687
#crear curvas en el plot edad y altura
plot(datoscg$age.yr, datoscg$height.m)
lines(x, y8, col="red")
lines(x, y13, col="red")
lines(x, y18, col="red")
lines(x, y23, col="red")
lines(x, y28, col="red")
estas curvas en la parte de abajo no van muy bien
a=fijo, b=variable, c=fijo —–asintotas fija
HoI/HoII=a(1-e(-bIt))c/a(1-e-bIIt)c #cambios en bI y bII
HoI/HoII=[(1-e(-bIt))/(1-e(-bIIt))]^c curvas polimorficas
despejamos b del modelo original
a=Ho/(1-e-bt)c
Ho/a=(1-e-bt)c
(Ho/a)(1/c)=(1-e-bt)
(e(-bt))-t=(Ho/a)(1/c) donde e^(-bt)=-btloge y loge=1 por lo tanto
-bt=log(1-(Ho/a)^(1/c)) donde el valor de (Ho/a)^(1/c) tiene que ser menor a 1, de lo contrario nos daria error por el log.
-b=log(1-(Ho/a)^(1/2))/t
b=-log(1-(Ho/a)^(1/2))/t
b8<--log(1-(8/31.012)**(1/1.687))/20
b13<--log(1-(13/31.012)**(1/1.687))/20
b18<--log(1-(18/31.012)**(1/1.687))/20 # este valor nos tiene que dar un valor al rededor de 0.07
b23<--log(1-(23/31.012)**(1/1.687))/20
b28<--log(1-(28/31.012)**(1/1.687))/20
y8<-31.012*(1-exp(-b8*x))**1.687
y13<-31.012*(1-exp(-b13*x))**1.687
y18<-31.012*(1-exp(-b18*x))**1.687
y23<-31.012*(1-exp(-b23*x))**1.687
y28<-31.012*(1-exp(-b28*x))**1.687
plot(datoscg$age.yr, datoscg$height.m)
lines(x, y8, col="green")
lines(x, y13, col="green")
lines(x, y18, col="green")
lines(x, y23, col="green")
lines(x, y28, col="green")
# FAMILIA C
a=fijo, b=fijo, c=variable —–asintotas fija
HoI/HoII=a(1-e(-bt))cI/a(1-e-bIt)c1 #cambios en cI y cII
HoI/HoII=(1-e(-bt))(cI-cII) curvas polimorficas
despejamos c del modelo original
a=Ho/(1-e-bt)c despejar C
Ho/a=(1-e-bt)c
log(Ho/a)=(1-e^-bt)
c=(log (Ho/a)/log(1-e^-bt)) utilizar para sustituir
c8<-log(8/31.012)/log(1-exp(-0.070*20))
c13<-log(13/31.012)/log(1-exp(-0.070*20))
c18<-log(18/31.012)/log(1-exp(-0.070*20))
c23<-log(23/31.012)/log(1-exp(-0.070*20))
c28<-log(28/31.012)/log(1-exp(-0.070*20))
y8<-31.012*(1-exp(-0.069*x))**c8
y13<-31.012*(1-exp(-0.069*x))**c13
y18<-31.012*(1-exp(-0.069*x))**c18
y23<-31.012*(1-exp(-0.069*x))**c23
y28<-31.012*(1-exp(-0.069*x))**c28
plot(datoscg$age.yr, datoscg$height.m)
lines(x, y8, col="green")
lines(x, y13, col="green")
lines(x, y18, col="green")
lines(x, y23, col="green")
lines(x, y28, col="green")
DE LOS TRES FAMILIAS EL QUE MEJOR SE ADAPTA A NUESTROS PUNTOS ES LA SEGUNDA FAMILIA.
tambien conocido como modelo de Korft, bailey y clutter y/o schumacher, es uno de los modelos mas usados y sobre todo en plantas de crecimiento muy rapido
datoscg <- read.csv("C:/LUGO/CURSOR/Bases_datos/StemAnalysis161PinusRadiata.csv")
Ho=e(a+(b/(tc))
log Ho= a+(a/(t^c))
Y= a+b(1/(t^c))
datoscg$y<-log(datoscg$height.m)
buscad los valores mas aceptables para c
datoscg$x08<-1/datoscg$age.yr**0.8
ajuste<-lm(y~x08,datoscg)
summary(ajuste)
##
## Call:
## lm(formula = y ~ x08, data = datoscg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.5241 -0.1792 0.0436 0.2136 3.3866
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.38378 0.01483 228.13 <2e-16 ***
## x08 -6.45561 0.07831 -82.44 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3519 on 1908 degrees of freedom
## Multiple R-squared: 0.7808, Adjusted R-squared: 0.7807
## F-statistic: 6797 on 1 and 1908 DF, p-value: < 2.2e-16
datoscg$x2<-1/datoscg$age.yr**2
ajuste<-lm(y~x2,datoscg)
summary(ajuste)
##
## Call:
## lm(formula = y ~ x2, data = datoscg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.7494 -0.4245 0.0682 0.4768 4.9811
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.49791 0.01528 163.45 <2e-16 ***
## x2 -7.16418 0.25364 -28.25 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6312 on 1908 degrees of freedom
## Multiple R-squared: 0.2949, Adjusted R-squared: 0.2945
## F-statistic: 797.8 on 1 and 1908 DF, p-value: < 2.2e-16
datoscg$x01<-1/datoscg$age.yr**0.1 # es la mas aceptable por los valores en r2 y RMSE
ajuste<-lm(y~x01,datoscg)
summary(ajuste)
##
## Call:
## lm(formula = y ~ x01, data = datoscg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.30695 -0.13530 0.03017 0.17143 0.89014
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12.84084 0.08919 144.0 <2e-16 ***
## x01 -13.41617 0.11388 -117.8 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2613 on 1908 degrees of freedom
## Multiple R-squared: 0.8791, Adjusted R-squared: 0.8791
## F-statistic: 1.388e+04 on 1 and 1908 DF, p-value: < 2.2e-16
datoscg$x05<-1/datoscg$age.yr**0.5 #cuando el modelo no corre por lo tanto busca otro valor
ajuste<-lm(y~x05,datoscg)
summary(ajuste)
##
## Call:
## lm(formula = y ~ x05, data = datoscg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.42276 -0.14371 0.04043 0.18270 2.24037
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.23875 0.01915 221.3 <2e-16 ***
## x05 -6.16431 0.05887 -104.7 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2894 on 1908 degrees of freedom
## Multiple R-squared: 0.8518, Adjusted R-squared: 0.8517
## F-statistic: 1.096e+04 on 1 and 1908 DF, p-value: < 2.2e-16
meter formulas
exp(4.23) #el valor de a viene de cuadro de ajuste anterior
## [1] 68.71723
ajuste
ajuste.nl<-nls (height.m~exp(a+b/(age.yr**c)),datoscg,start=c(a=4.3,b=-6,c=0.5))
summary(ajuste.nl)
##
## Formula: height.m ~ exp(a + b/(age.yr^c))
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 4.18734 0.08937 46.85 <2e-16 ***
## b -7.61138 0.31873 -23.88 <2e-16 ***
## c 0.60362 0.03766 16.03 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.781 on 1907 degrees of freedom
##
## Number of iterations to convergence: 5
## Achieved convergence tolerance: 7.525e-06
con esto nuestra curva quedaria de la siguiente forma
Ho(m)=e(4.18734-7.61138/t0.60362(años))
tener en cuenta la separacion de las curvas con el RMSE, ejemplo si se tiene una curva en 28,20 y otra 27, donde se tenga un RMSE DE 2.781 no se podra diferenciar ya que el rango de error es de 2.781, ´por lo qque ambas se sobreponen tendremos3 familias una por cada parametro
plot(datoscg$age.yr,datoscg$height.m)
#FAMILIA a
meter formulas
despejar a
8=ea-7.6114/200.6036
log8=a-7.6114/20^0.6036
a=log8+7.6114/20^0,6036
a8<-log(8)+7.6114/20**0.6036
a13<-log(13)+7.6114/20**0.6036
a18<-log(18)+7.6114/20**0.6036
a23<-log(23)+7.6114/20**0.6036
a28<-log(28)+7.6114/20**0.6036
y8<-exp(a8-7.6114/x**0.6036)
y13<-exp(a13-7.6114/x**0.6036)
y18<-exp(a18-7.6114/x**0.6036)
y23<-exp(a23-7.6114/x**0.6036)
y28<-exp(a28-7.6114/x**0.6036)
plot(datoscg$age.yr,datoscg$height.m)
lines(x, y8, col="green")
lines(x, y13, col="green")
lines(x, y18, col="green")
lines(x, y23, col="green")
lines(x, y28, col="green")
esta familia es buena
meter formulas
despejar b
8=e4.1873-b/200.6036
log8=4.1873+b/20^0.6036
b=(log8-4.1873)*20^0,6036
b8<-(log(8)-4.1873)*20**0.6036
b13<-(log(13)-4.1873)*20**0.6036
b18<-(log(18)-4.1873)*20**0.6036
b23<-(log(23)-4.1873)*20**0.6036
b28<-(log(28)-4.1873)*20**0.6036
#para saber si vamos bien el b tiene que dar el valor de 7.61
y8<-exp(4.1873+b8/x**0.6036)
y13<-exp(4.1873+b13/x**0.6036)
y18<-exp(4.1873+b18/x**0.6036)
y23<-exp(4.1873+b23/x**0.6036)
y28<-exp(4.1873+b28/x**0.6036)
plot(datoscg$age.yr,datoscg$height.m)
lines(x, y8, col="red")
lines(x, y13, col="red")
lines(x, y18, col="red")
lines(x, y23, col="red")
lines(x, y28, col="red")
#FAMILIA C
meter formulas
despejar b
8=e4.1873-7.6114/20C
log8=4.1873-7.6114/20^c
7.6114/20^c=4.1416-log8
20^c=7.6114/(4.1873-log8)
clog8=log(7.6114/(4.1873-log8))
c=log(7.6114/(4.1873-log8))/log20
c8<-log(7.6114/(4.1873-log(8)))/log(20)
c13<-log(7.6114/(4.1873-log(13)))/log(20)
c18<-log(7.6114/(4.1873-log(18)))/log(20)
c23<-log(7.6114/(4.1873-log(23)))/log(20)
c28<-log(7.6114/(4.1873-log(28)))/log(20)
#para saber si vamos bien el C tiene que dar el valor de 0.60
y8<-exp(4.1873-7.6114/x**c8)
y13<-exp(4.1873-7.6114/x**c13)
y18<-exp(4.1873-7.6114/x**c18)
y23<-exp(4.1873-7.6114/x**c23)
y28<-exp(4.1873-7.6114/x**c28)
plot(datoscg$age.yr,datoscg$height.m)
lines(x, y8, col="blue")
lines(x, y13, col="blue")
lines(x, y18, col="blue")
lines(x, y23, col="blue")
lines(x, y28, col="blue")
#este familia es buena
H1=a(1-e(-bt))c modelo original
se despajan H para dos mediciones
t1—-H1=a(1-e(-bt1))c t2—-H2=a(1-e(-bt1))c donde se obseva que lo unico que cambia es el tiempo, a,b y c son los mismos porque se trabaja con los mismos datos
despejar un parametro en t1 y sustituir en otro (t2)
a=H1/(1-e(-bt1))c se despejo a en H1
H2=H1(1-e(-bt2))c/(1-e(-bt1))c se sustituye en H2
El modelo da como resultado un conjunto de rectas con multiples asintotas
H2=H1(1-e(-bt2))c/(1-e(-bt1))c
despejar b en t1 anamorfica
H1/a=(1-e(-bt2))c
(H1/a)(1/c)=1-e(-bt1)
e(-bt1)=1-(H1/a)(1/c)
-bt1=log(1-(H1/a)^(1/c))
-b=log(1-(H1/a)^(1/c))/t1
Sustituir en el T2 anamorfica
H2=a(1-e(log(1-(H1/a)(1/c)))*(t2/t1))
H2=1-elog(1-(H1/a)(1/c)(t2/t1)c)
H2=a-(1-(H1/a)(1/c)(t2/t1)^c)
despeje de c anamorfica
H1/a=(1-e(-bt1)c)
log(H1/a)=c log(1-e^(-bt))
c=(log H1/a)/log(1-e^(-bt))
sustutuir
H2=a(1-e(-bt2)((log H1/a)/(log(1-e^(-bt1)))) se convierte en polimorfica con asintota unica
estos son tres ecuaciones ADAS