Adattamento lineare ai campioni di dati da una funzione logistica
Supponiamo di campionare uniformemente punti dati da un intervallo [-$a$;$a$], quindi passare questi punti dati a una funzione logistica del modulo
$f(x) = \frac{1}{1+e^{-\beta\cdot x}}$,
e adattare una linea lineare a questi campioni di dati (x, f(x)). La pendenza prevista di questo adattamento lineare può essere espressa in funzione di$\beta$e$a$?
(Bonus: funzione tangente iperbolica$f(x)=\tanh(\beta x)$invece della funzione logistica)
Risposte
Hai dei dati$X_1,\dots,X_n\stackrel{\text{iid}}\sim\text{Unif}(-a,a)$e ottenere$Y_i = \sigma(X_i)$dove$\sigma(z) = \frac{1}{1+e^{-bx}}$.
La pendenza della popolazione di una regressione lineare semplice è$\newcommand{\E}{\operatorname{E}}$ $$ \beta := \frac{\text{Cov}(X_i, Y_i)}{\text{Var}(X_i)} = \frac{\E(X\sigma(X)) - (\E X) (\E \sigma(X))}{\text{Var}(X)}. $$ $X$è simmetrico rispetto a$0$e la varianza è proprio quella di un RV uniforme che è noto, quindi tutto ciò che dobbiamo veramente calcolare è$\E(X\sigma(X))$. Questo è$$ \E(X\sigma(X)) = \frac 1{2a} \int_{-a}^a \frac{x}{1+e^{-bx}}\,\text dx. $$Possiamo notarlo$$ \int \frac{1}{e^{-bx} + 1}\,\text dx = \int \frac{e^{bx}}{1 + e^{bx}}\,\text dx \\ = \frac 1b \int \frac 1u \,\text du = \frac 1b \log (e^{bx} + 1) $$quindi possiamo integrare per parti per ottenere$$ \E(X\sigma(X)) = \frac{1}{2ab}x\log(e^{bx}+1)\bigg\vert_{-a}^a - \frac 1{2ab}\int_{-a}^a \log(e^{bx} + 1)\,\text dx. $$Con il primo termine (a parte alcune costanti di scala) finiamo con$$ \log(e^{ab}+1) + \log(e^{-ab}+1) = \log\left[e^{ab}(e^{-ab}+1)\right] + \log(e^{-ab}+1) \\ = ab + 2\log(e^{-ab}+1) $$Così$$ \frac{1}{2ab}x\log(e^{bx}+1)\bigg\vert_{-a}^a = \frac a2 + \frac 1b \log(e^{-ab}+1). $$Per l'altro termine, possiamo lasciare$u = -e^{bx}$Così$\frac 1{bu}\,\text du = \text dx$che significa$\newcommand{\Li}{\operatorname{Li}_2}$ $$ \int_{-a}^a \log(e^{bx} + 1)\,\text dx = -\frac 1b \int_{-e^{ab}}^{e^{ab}} \frac{\log(1-u)}u\,\text du \\ = \frac 1b\left[\Li(e^{ab}) - \Li(-e^{ab})\right] $$dove$\Li$è la funzione dilogaritmica . Tutti insieme questo significa$$ \E(X \sigma(X)) = \frac a2 + \frac 1b \log(e^{-ab}+1) + \frac{\Li(-e^{ab}) - \Li(-e^{-ab})}{2ab^2}. $$Ho qualcosa della forma$\Li(z) - \Li(1/z)$. Usando il fatto che$$ \Li(z) + \Li(1/z) = -\frac{\pi^2}6 - \frac 12 \log^2(-z) $$Posso riscriverlo con un solo singolo$\Li$dentro:$$ \E(X \sigma(X)) = \frac a2 + \frac 1b \log(e^{-ab}+1) + \frac{-\frac{\pi^2}6 - \frac 12 a^2b^2 - 2 \Li(-e^{-ab})}{2ab^2} \\ = \frac a4 + \frac 1b \log(e^{-ab}+1) - \frac{\pi^2 + 12 \Li(-e^{-ab})}{12ab^2}. $$Questo significa$$ \beta(a,b) = \frac{\frac a4 + \frac 1b \log(e^{-ab}+1) - \frac{\pi^2 + 12 \Li(-e^{-ab})}{12ab^2}}{a^2/3} \\ = \frac{3}{4a} + \frac{3}{a^2b}\log(e^{-ab}+1) - \frac{\pi^2 + 12 \Li(-e^{-ab})}{4a^3b^2}. $$
$\Li$è una funzione speciale e non può essere espressa in termini di funzioni elementari in generale, e poiché potrebbe essere risolta$\Li$ciò significa che non esiste un'espressione elementare generale per$\beta$. Ma possiamo valutarlo in termini di funzioni elementari per particolari valori di$a$e$b$. Uno di questi valori è$$ \Li\left(-\varphi\right) = -\frac{\pi^2}{10} - \log^2\varphi $$quindi se$ab = -\log(\varphi)$poi potremo valutare$\beta$in termini di funzioni elementari. Come esempio di questo, potremmo prendere$$ a = \sqrt 2 \\ b = -\frac 1{\sqrt 2}\log(\varphi). $$Anche se questa è ancora un'espressione davvero disordinata anche se è solo in termini di funzioni elementari.
Questo è stato un sacco di lavoro solo per esprimere l'integrale$\int_{-a}^a \frac{x}{1+e^{-bx}}\,\text dx$in termini di un integrale diverso, ma penso che il valore sia che mostra che non esiste una forma chiusa per$\beta(a,b)$che ci manca, e lo mette in relazione con una funzione speciale ben studiata che ha a disposizione implementazioni di alta qualità.
Ecco una simulazione da controllare.
set.seed(111)
nsim <- 1e6
a <- 2.34
b <- 1.2
x <- runif(nsim, -a, a)
y <- 1 / (1 + exp(-b * x))
curve(plogis(b*x), -a, a, 500, col=4)
points(y[1:100]~x[1:100], cex=.5)
# I'm just integrating to avoid needing to load other libraries
Li2 <- function(z) -integrate(function(u) log(1-u)/u, 0, z)$value
slopefunc <- function(a,b) {
3/(4*a) + 3 / (a^2 * b) * log(exp(-a*b) + 1) - (pi^2 + 12*Li2(-exp(-a*b))) / (4*a^3*b^2)
}
lm(y~x)$coef[2]
slopefunc(a,b)
cov(x, y) / var(x)