Eliminando valores atípicos a 3 desviaciones estándar de la media de una función monoexponencial en R.
Tengo un gran conjunto de datos que analiza el consumo de oxígeno de sujetos que hacen ejercicio a lo largo del tiempo (x = Tiempo, y = VO2). Estos datos se ajustan a una función monoexponencial.
Aquí hay un breve ejemplo de un marco de datos de muestra:
”’
VO2 <- c(11.71,9.84,17.96,18.87,14.58,13.38,5.89,20.28,20.03,31.17,22.07,30.29,29.08,32.89,29.01,29.21,32.42,25.47,30.51,37.86,23.48,40.27,36.25,19.34,36.53,35.19,22.45,30.23,3,19.48,25.35,22.74)
Tiempo <- c(0,2,27,29,31,33,39,77,80,94,99,131,133,134,135,149,167,170,177,178,183,184,192,222,239,241,244,245,250,251,255,256)
DF <- data.frame(VO2,Tiempo)
Soy algo nuevo en R y no soy un experto en matemáticas. Agradecería su ayuda con los dos objetivos de este conjunto de datos.
Según las convenciones típicas del laboratorio en el que trabajo, estos datos deben ajustarse a una función monoexponencial.
- Me encantaría obtener una idea de cómo ajustar los datos a una función como esta. Tenga en cuenta que tengo muchos conjuntos de datos similares (para diferentes sujetos) y necesito ajustar una función monoexponencial a cada uno de ellos. Sería mejor si el ajuste se pudiera aplicar de forma genérica en mis conjuntos de datos.
- Basándome en esta función monoexponencial, me gustaría identificar y eliminar cualquier punto atípico. Aquí definiré un punto atípico como cualquier punto >3 desviaciones estándar de la media de la función monoexponencial.
Hasta ahora, tengo este código (sin éxito) para ajustar una función a los datos anteriores. No solo no se ajusta bien, sino que tampoco puedo crear una función suave.
'''
fit <- lm(VO2~poly(Tiempo,2,raw=TRUE))
xx <- seq(1,250, length=32)
plot(Tiempo,VO2,pch=19,ylim=c(0,50))+
lines(xx, predict(fit, data.frame(DF=xx)), col="red")
'''
Gracias a todas las personas que han comentado y proporcionado sus valiosos comentarios. A medida que sigo aprendiendo e investigando, agregaré a esta publicación intentos exitosos/menos exitosos del código para este proceso. Gracias por su conocimiento, ayuda y comprensión.
davy.ai
Para ajustar los datos a una función monoexponencial, podemos utilizar la función
nls()
en R. Aquí tienes un ejemplo de código:En este código, definimos una función
monoexp()
que representa la función monoexponencial, con dos parámetrosA
yk
. Luego utilizamos la funciónnls()
para ajustar los datos a esta función, empezando con una estimación inicial deA = 35
yk = 0.005
. La funciónnls()
ajustará estos parámetros para encontrar el mejor ajuste a los datos.Para identificar y eliminar valores atípicos, podemos calcular los valores predichos de la función monoexponencial para cada punto de tiempo en los datos, y luego encontrar cualquier valor que esté más de 3 desviaciones estándar lejos de la media de estos valores predichos. Aquí tienes un ejemplo de código:
En este código, primero utilizamos la función
predict()
para obtener los valores predichos de la función monoexponencial para cada punto de tiempo en los datos. Luego calculamos la media y la desviación estándar de estos valores predichos. Finalmente, utilizamos la funciónwhich()
para identificar cualquier valor que esté más de 3 desviaciones estándar lejos de la media, y eliminamos esos valores del marco de datos utilizando la indexación (DF[-outliers, ]
).Espero que esto te ayude. Avísame si tienes alguna pregunta adicional.