Modelos no lineales directos e inversos

Las malandanzas de Circiter la han conducido al siguiente entuerto: estimar $latex \alpha$ donde

$$ y = f_\alpha(x) + \epsilon$$

y $latex f_\alpha$ es una función no lineal horrible. Sin embargo, $latex f^{-1}_\alpha$ es mucho más manejable y podría plantearse el modelo

$$ x = f^{-1}_\alpha(y) + \epsilon$$

(donde este nuevo $latex \epsilon$ no coincide con el anterior: piénsese en el método delta y léase la nota final).

Un ejemplo. Que arranca con unos datos autoexplicativos:

1
2
3
4
5
6
7
8
n <- 100

a <- 1
b <- -1/2
sigma <- 0.1

x <- runif(n, -1, 1)
y <- exp(a * x + b) + rnorm(n, 0, sigma)

El modelo directo da:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
mod_directo <- nls(y ~ exp(a * x + b),
                    start = list(a = 0.1, b = 0.1))
summary(mod_directo)

# Formula: y ~ exp(a * x + b)
#
# Parameters:
#   Estimate Std. Error t value Pr(>|t|)
# a  1.04285    0.02814   37.05   <2e-16 ***
# b -0.52418    0.01971  -26.60   <2e-16 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 0.09199 on 98 degrees of freedom
#
# Number of iterations to convergence: 5
# Achieved convergence tolerance: 1.816e-07

Y el inverso,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
mod_inverso <- nls(x ~ (log(y) - b) / a, start = list(a = 0.1, b = 0.1))
summary(mod_inverso)

# Formula: x ~ (log(y) - b)/a
#
# Parameters:
#   Estimate Std. Error t value Pr(>|t|)
# a  1.20718    0.03900   30.95   <2e-16 ***
# b -0.56361    0.02187  -25.77   <2e-16 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 0.1792 on 98 degrees of freedom
#
# Number of iterations to convergence: 8
# Achieved convergence tolerance: 1.185e-09

Pas mal!

Nota: No me concedo el tiempo de pintar la geometría de la cosa, pero es un buen ejercicio imaginársela (y ver qué representan los errores de ambos modelos).