6 votos

Evitando un baño de spline

En primer lugar, yo no soy muy experimentado en matemáticas técnicas, así que estoy abierta a sugerencias.

Estoy trabajando con un conjunto de datos en R. tengo una curva (en su mayoría lineal en la primera, con un pico de repente, luego disminuyendo.) Quiero alisar hacia fuera, así que he usado un spline y que logre lo que quiero (especialmente el pico de la curva de "fuera de centro" desde el punto más alto). Pero hay un chapuzón a la derecha debajo del pico que quiero evitar en la medida de sus esencialmente lineal a la derecha allí. enter image description here

Yo entiendo (en un no-matemático manera) ¿por qué esta salsa tiene que estar ahí, para dar la curva de tiempo suficiente para ángulo hacia arriba. Pero no representan los datos.

Hay alguna forma de evitar este dip? He pensado en la gráfica como dos líneas separadas (una lineal y una curva), pero que no resulta atractivo. Hay algo además de una spline? O código que puede utilizar para conseguir alrededor de esto?

Time          Feave
0.04    138.8181818
   7    1258.636364
  14    1320.545455
  21     2110.37037
  28    13730.37037
  35    1550.909091

Todo lo que estoy usando es splinefun en R (por lo cúbicos)

plot(P0mM$Time,P0mM$Feave, ylab="Fe2+ uM", xlab="Time", main="0mM P", ylim=c(0,15000))
arrows(P0mM$Time, P0mM$Feave-P0mM$Festerr, P0mM$Time, P0mM$Feave+P0mM$Festerr, length=0.05, angle=90, code=3)
lines(spline(P0mM$Time,P0mM$Feave,n=200))

9voto

AdamSane Puntos 1825

Hay un número de maneras de evitar tales efectos (por ejemplo, splines de suavizado a menudo puede ser ajustado para evitar un baño, o tal vez alguna forma de monotónica spline a la izquierda del pico será necesario), pero creo que en este caso particular un enfoque simple podría ser la de transformar (quizá sacar los troncos o raíces cuadradas), el ajuste de una curva spline en esa escala y transformar la espalda.

Unimodal splines existen y pueden adaptarse mejor a usted.

No lo he utilizado (edit: bueno, tengo ahora! ver más abajo), pero creo que el paquete uniReg (CRAN) unimodal splines.

...

enter image description here

Algo de código. Aquí tuve anteriormente, pero imaginativo leer los datos en una estructura de datos llamada a:

library(uniReg)
z=seq(min(a$Time),max(a$Time),length=201)
uf=with(a,unireg(Time,Fe2.,g=5,sigma=1))
plot(Fe2.~Time,a,ylim=c(0,14500))
lines(z,uf$unimod.func(z))

El autor también tiene un papel en unimodal splines - publicado desde entonces por la mirada, pero voy a dejar de perseguir la hoja de papel si usted lo desea - pero no parece que lo menciona en la documentación del paquete.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X