8 votos

La sustracción de fondo para la señal y el análisis de errores

Yo uso un CCD para ver la división de un nivel de energía debido al efecto Zeeman.

Tengo un 1 dimensiones CCD de 7926 de píxeles de 7µm cada uno. Mi CCD analizar una región de 2 dimensiones, y, a continuación, los pasos adelante de 200 veces. Por lo tanto, tengo una matriz como esta "matrix".

Yo seleccione el fondo de entre 40 y 60 píxeles y tengo que calcular para cada fila el valor de la media. A continuación, en la que proyecto estas 7926 media de los valores sobre el eje Y. Así, para cada uno de los compartimientos de la fila de la matriz(es decir, 3040) , me reste el valor del contenido de 3040 píxel del fondo

Esta es mi experiencia: "background"

(en las x hay los píxeles de mi CCD y y es la intensidad).

Tengo que restar el fondo de la señal, restando papelera de reciclaje. En cada uno de los recipientes con el fondo en el que se asocia un error de $\sigma = \sqrt{N}$ donde $N$ es la papelera de contenido.

Cada uno de los compartimientos de la señal tiene un error $\sqrt{N}$, pero cuando me restar el fondo ¿cómo puedo calcular el error exacto de la señal pura? Si $Z'_i$ es la papelera de contenido después de la sustracción, $Z_i$ el reciclaje de contenido antes de e $Y_i$ el bin contenido de los antecedentes, a continuación, $Z'_i = Z_i - Y_i$ y el error (tirar la propagación) $\sigma_{Y_i} = \sqrt{\sigma_{Z'_i}^2 + \sigma_{Y_i}^2 +....}$

De hecho, yo creo, debe haber un término de covarianza. ¿Cómo puedo calcular?

8voto

jldugger Puntos 7490

Se estima que el error correctamente será complicado. Pero me gustaría sugerir que es más importante en primer lugar encontrar un mejor procedimiento para restar de fondo. Sólo una vez un buen procedimiento está disponible sería la pena analizar la cantidad de error.

En este caso, la media está sesgada al alza por las aportaciones de la señal, que se ven lo suficientemente grande como para ser importante. En lugar de utilizar un estimador más robusto. Una simple, es la mediana. Por otra parte, un poco más se puede extraer de estos datos mediante el ajuste de las columnas y de las filas al mismo tiempo. Esto se llama "mediana polaco." Es muy rápido para llevar a cabo y está disponible en algunos programas de software (como R).

Estas figuras de los datos simulados con los 793 filas y 200 columnas muestran el resultado del ajuste de fondo con una mediana de polaco. (Ignorar las etiquetas en el eje de las y; son un artefacto de software usado para mostrar los datos.)

Figure 1

Una muy ligera tendencia es todavía evidente en los datos ajustados: la parte superior e inferior trimestres, en los que la señal no está presente en ninguna columna, son un poco más verde que la mitad de la mitad. Sin embargo, por el contrario, simplemente restando la fila de los medios a partir de los datos produce un evidente sesgo:

Figure 2

Diagramas de dispersión (no se muestra aquí, sino que se produce por el código) de fondo real contra estimado de fondo confirmar la superioridad de la mediana polaco.

Ahora, esto es algo desleal la comparación, debido a que para calcular el fondo se ha seleccionado previamente columnas se cree que no tiene señal. Pero hay problemas con esto:

  • Si hay señales de bajo nivel presentes en esas zonas (los que no han visto o se espera), el sesgo de los resultados.

  • Sólo un pequeño subconjunto de los datos se ha utilizado, la ampliación de la estimación de errores en segundo plano. (El uso de sólo una décima parte de las columnas disponibles aproximadamente triplica el error en la estimación de fondo en comparación con el uso de las nueve décimas partes de las columnas que parecen tener poca o ninguna señal).

Además, incluso cuando se tiene la certeza de que algunas de las columnas no contienen las señales, usted todavía puede solicitar la mediana de polaco a esas columnas. Esto te protegerá de manera inesperada a las violaciones de sus expectativas (que estos son señal de áreas libres). Por otra parte, esta robustez le permitirá ampliar el conjunto de las columnas utilizadas para la estimación de fondo, porque si, inadvertidamente, se incluyen algunas con algo de señal, que sólo tendrá un efecto insignificante.

Procesamiento adicional para identificar valores atípicos aislados y para estimar y extraer la señal de que se puede hacer, tal vez en el espíritu de mi respuesta a una reciente relacionada con la pregunta.


R código de:

#
# Create background.
#
set.seed(17)
i <- 1:793
row.sd <- 0.08
row.mean <- log(60) - row.sd^2/2
background <- exp(rnorm(length(i), row.mean, row.sd))
k <- sample.int(length(background), 6)
background[k] <- background[k] * 1.7

par(mfrow=c(1,1))
plot(background, type="l", col="#000080")
#
# Create a signal.
#
j <- 1:200
f <- function(i, j, center, amp=1, hwidth=5, l=0, u=6000) {
  0.2*amp*outer(dbeta((i-l)/(u-l), 3, 1.1), pmax(0, 1-((j-center)/hwidth)^4))
}
#curve(f(x, 10, center=10), 0, 6000)
#image(t(f(i,j, center=100,u=600)), col=c("White", rainbow(100)))

u <- 600
signal <- f(i,j, center=10, amp=110, u=u) +
  f(i,j, center=90, amp=90, u=u) +
  f(i,j, center=130, amp=80, u=u)
#
# Combine signal and background, both with some iid multiplicative error.
#
ccd <- outer(background, j, function(i,j) i) * exp(rnorm(length(signal), sd=0.05)) + 
  signal * exp(rnorm(length(signal), sd=0.1))
ccd <- matrix(pmin(120, ccd), nrow=length(i))
#image(j, i, t(ccd), col=c(rep("#f8f8f8",20), rainbow(100)),main="CCD")
#
# Compute background via row means (not recommended).
# (Returns $row and $overall to match the values of `medpolish`.)
#
mean.subtract <- function(x) {
  row <- apply(x, 1, mean)
  overall <- mean(row)
  row <- row - overall
  return(list(row=row, overall=overall))
}
#
# Estimate background and adjust the image.
#
fit <- medpolish(ccd)
#fit <- mean.subtract(ccd)
ccd.adj <- ccd - outer(fit$row, j, function(i,j) i)
    image(j, i, t(ccd.adj), col=c(rep("#f8f8f8",20), rainbow(100)), 
          main="Background Subtracted")
    plot(fit$row + fit$overall, type="l", xlab="i")
    plot(background, fit$row)
#
# Plot the results.
#
require(raster)
show <- function(y, nrows, ncols, hillshade=TRUE, aspect=1, ...) {
  x <- apply(y, 2, rev)
  x <- raster(x, xmn=0, xmx=ncols, ymn=0, ymx=nrows*aspect)
  crs(x) <- "+proj=lcc +ellps=WGS84"
  if (hillshade) {
    slope <- terrain(x, opt='slope')
    aspect <- terrain(x, opt='aspect')
    hill <- hillShade(slope, aspect, 10, 60)
    plot(hill, col=grey(0:100/100), legend=FALSE, ...)
    alpha <- 0.5; add <- TRUE
  } else {
    alpha <- 1; add <- FALSE
  }
  plot(x, col=rainbow(127, alpha=alpha), add=add, ...)
}

par(mfrow=c(1,2))
asp <- length(j)/length(i) * 6/8
show(ccd, length(i), length(j), aspect=asp, main="Raw Data")
show(ccd.adj, length(i), length(j), aspect=asp, main="Adjusted Data")

0voto

pedrofigueira Puntos 468

En el fondo de cálculo: Ya que lo que están haciendo es medir el fondo mediante el cálculo de la media de los valores con backgroung sólo, puede utilizar el error de la media ($\sigma_{Bckg}/\sqrt{n_{avg}}$) y esto se debe estimar correctamente el fondo de la variación, teniendo en cuenta la variación del fondo entre el $n_{avg}$ píxeles que se considera.

También se puede calcular el $Z_i$ de error, si he entendido correctamente, y es dado por $\sqrt{N}$, por lo que este se resuelva. Con el fin de calcular la covarianza entre los errores que tal vez usted puede utilizar la fórmula de la covarianza (y echar un vistazo aquí para ver un ejemplo en la covarianza entre dos variables). Yo no soy la persona más informada sobre ella, así que espero que esta divagando atraer a las personas más preparadas para la discusión. =)

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