Asymptoten der binomialen Regression

8

Die binomiale logistische Regression weist obere und untere Asymptoten von 1 bzw. 0 auf. Genauigkeitsdaten (nur als Beispiel) können jedoch obere und untere Asymptoten aufweisen, die sich stark von 1 und / oder 0 unterscheiden. Ich kann drei mögliche Lösungen dafür sehen:

  1. Machen Sie sich keine Sorgen, wenn Sie gute Passungen im gewünschten Bereich erhalten. Wenn Sie nicht gut passen, dann:
  2. Transformieren Sie die Daten so, dass die minimale und maximale Anzahl korrekter Antworten in der Stichprobe Proportionen von 0 und 1 ergibt (anstelle von 0 und 0,15).
    oder
  3. Verwenden Sie eine nichtlineare Regression, damit Sie entweder die Asymptoten angeben oder den Monteur dies für Sie tun lassen können.

Es scheint mir, dass die Optionen 1 und 2 weitgehend aus Gründen der Einfachheit gegenüber Option 3 bevorzugt würden. In diesem Fall ist Option 3 möglicherweise die bessere Option, da sie mehr Informationen liefern kann.

edit
Hier ist ein Beispiel. Die insgesamt mögliche Genauigkeit für die Genauigkeit beträgt 100, in diesem Fall beträgt die maximale Genauigkeit jedoch ~ 15.

accuracy <- c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)
x<-1:length(accuracy)
glmx<-glm(cbind(accuracy, 100-accuracy) ~ x, family=binomial)
ndf<- data.frame(x=x)
ndf$fit<-predict(glmx, newdata=ndf, type="response")
plot(accuracy/100 ~ x)
with(ndf, lines(fit ~ x))

Option 2 (gemäß den Kommentaren und um meine Bedeutung zu verdeutlichen) wäre dann das Modell

glmx2<-glm(cbind(accuracy, 16-accuracy) ~ x, family=binomial)

Option 3 (der Vollständigkeit halber) wäre ungefähr so:

fitnls<-nls(accuracy ~ upAsym + (y0 - upAsym)/(1 + (x/midPoint)^slope), 
  start = list("upAsym" = max(accuracy), "y0" = 0, "midPoint" = 10, "slope" = 5), 
  lower = list("upAsym" = 0, "y0" = 0, "midPoint" = 1, "slope" = 0), 
  upper = list("upAsym" = 100, "y0" = 0, "midPoint" = 19, hillslope = Inf), 
  control = nls.control(warnOnly = TRUE, maxiter=1000),
  algorithm = "port")
Matt Albrecht
quelle
Warum gibt es hier ein Problem? Die logistische Regression setzt voraus, dass das Logit (Log Odds) der Wahrscheinlichkeit eine lineare Beziehung zu den erklärenden Variablen hat. Der gültige Bereich der Log-Quoten ist der gesamte Satz reeller Zahlen. Es gibt keine Möglichkeit, darüber hinauszugehen!
whuber
Angenommen, es gibt eine obere Wahrscheinlichkeitsasymptote von 0,15. Die Regression ist dann schlecht an die Daten angepasst. Ich werde ein Beispiel aufstellen.
Matt Albrecht
+1 tolle Frage. Mein Instinkt wäre, 16 als Maximum anstelle von 100 ( cbind(accuracy, 16-accuracy)) zu verwenden, aber ich mache mir Sorgen darüber, ob dies mathematisch gerechtfertigt ist.
David Robinson

Antworten:

3

Interessante Frage. Eine Möglichkeit, die mir in den Sinn kommt, ist die Aufnahme eines zusätzlichen Parameters , um die Obergrenze der 'Link'-Funktion zu steuern.p[0,1]

Sei , unabhängige Beobachtungen, wobei , , ist ein Vektor erklärender Variablen, ist ein Vektor von Regressionskoeffizienten und ist die Verknüpfungsfunktion. Dann ist die Wahrscheinlichkeitsfunktion gegeben durch{xj,yj,nj}j=1,...,nyjBinomial{ni,pF(xjTβ)}p[0,1]xj=(1,xj1,...,xjk)Tβ=(β0,...,βk)F1

L(β,p)j=1npyjF(xjTβ)yj[1pF(xjTβ)]njyj

Der nächste Schritt besteht darin, einen Link auszuwählen, beispielsweise die logistische Verteilung, und die entsprechende MLE von .(β,p)

Betrachten Sie das folgende simulierte Spielzeugbeispiel unter Verwendung eines Dosis-Wirkungs-Modells mit undn = 31(β0,β1,p)=(0.5,0.5,0.25)n=31

dose = seq(-15,15,1)
a = 0.5
b = 0.5
n=length(dose)
sim = rep(0,n)
for(i in 1:n) sim[i] = rbinom(1,100,0.25*plogis(a+b*dose[i]))

plot(dose,sim/100)

lp = function(par){
if(par[3]>0& par[3]<1) return(-(n*mean(sim)*log(par[3]) +  sum(sim*log(plogis(par[1]+par[2]*dose)))  + sum((100-sim)*log(1-par[3]*plogis(par[1]+par[2]*dose))) ))
else return(-Inf)
}

optim(c(0.5,0.5,0.25),lp)

Eines der Ergebnisse, die ich erhalten habe, ist . Daher scheint es genau zu sein. Natürlich wäre eine detailliertere Untersuchung dieses Modells erforderlich, da das Einbeziehen von Parametern in ein binäres Regressionsmodell schwierig sein kann und Probleme der Identifizierbarkeit oder Existenz des MLE auf die Stufe 1 2 springen können .(β^0,β^1,p^)=(0.4526650,0.4589112,0.2395564)

Bearbeiten

Angesichts der Bearbeitung (die das Problem erheblich ändert) kann die zuvor vorgeschlagene Methode geändert werden, um die von Ihnen angegebenen Daten anzupassen. Betrachten Sie das Modell

accuracy=pF(x;μ,σ),

Dabei ist die logistische CDF, ein Standortparameter, ein Skalierungsparameter und der Parameter die Höhe der Kurve ähnlich wie im vorherigen Modell steuert. Dieses Modell kann mit nichtlinearen kleinsten Quadraten angepasst werden . Der folgende R-Code zeigt, wie Sie dies für Ihre Daten tun.μ σ pFμσp

rm(list=ls())
y = c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)/100
x = 1:length(y)
N = length(y)

plot(y ~ x)

Data = data.frame(x,y)

nls_fit = nls(y ~ p*plogis(x,m,s), Data, start = list(m = 10, s = 1,  p = 0.2) )

lines(Data$x, predict(nls_fit), col = "red")

quelle
1
Dies ist ein interessanter Ansatz. Was wären die Vorteile dieser Methode gegenüber einer nichtlinearen Regressionsfunktion mit drei Parametern?
Matt Albrecht
@MattAlbrecht Danke für das Interesse. Ich kann Vor- und Nachteile dieses Ansatzes erkennen. Einer der Vorteile ist die Interpretierbarkeit des Ansatzes, die der Logit-Regression ähnelt. Andererseits könnte eine nichtlineare Regressionsfunktion flexibler sein. Um eine gute Schätzung von , scheint es notwendig zu sein, ein gutes experimentelles Design zu haben, das sich nicht auf die Schwänze der Verbindungsfunktion konzentriert. Ich weiß nicht, ob das Modell zuvor untersucht wurde. p
2
Der Vorteil wäre die korrekte Einbeziehung der Binomialvariabilität.
Aniko
@MattAlbrecht Beachten Sie, dass diese Methode die Form der angepassten Funktion auf Sigmoid beschränkt und der Parameter die Höhe steuert, während die von Ihnen in Betracht gezogene nichtparametrische Methode dies nicht tut. Übrigens sind die geschätzten Parameter mit diesem Modell . p(μ^,σ^,p^)=(8.5121,0.8987,0.1483)
2

Ich würde das Maximum des X-Vektors als die insgesamt mögliche Anzahl von Erfolgen verwenden. (Dies ist eine voreingenommene Schätzung der tatsächlichen maximalen Anzahl von Erfolgen, sollte jedoch recht gut funktionieren, wenn Sie über genügend Daten verfügen.)

accuracy <- c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)
x<-1:length(accuracy)
glmx<-glm(cbind(accuracy, max(accuracy)-accuracy) ~ x, family=binomial)
ndf<- data.frame(x=x)
ndf$fit<-predict(glmx, newdata=ndf, type="response")
plot(accuracy/max(accuracy) ~ x)
with(ndf, lines(fit ~ x))

Dadurch wird eine Handlung erstellt, die wie folgt aussieht:

Geben Sie hier die Bildbeschreibung ein

David Robinson
quelle
1

Beachten Sie, dass die binomiale Regression auf einer binären Antwort für jeden Einzelfall basiert. Jede einzelne Antwort muss einen von zwei Werten annehmen können. Wenn der Anteil begrenzt ist, muss es auch Fälle gegeben haben, in denen nur ein Wert angenommen werden konnte.

Es hört sich so an, als hätten Sie es nicht mit Binärdaten zu tun, sondern mit Daten über einen endlichen Bereich. Wenn dies der Fall ist, klingt die Beta-Regression angemessener. Wir können die Beta-Distribution wie folgt schreiben:

p(di|LUμiϕ)=(diL)μiϕ1(Udi)(1μi)ϕ1B(μiϕ,(1μi)ϕ)(UL)ϕ1

Sie setzen dann wie jede Verknüpfungsfunktion, die das Intervall in die Reals abbildet . Es gibt ein R-Paket, das für diese Modelle verwendet werden kann, obwohl ich denke, dass Sie die Grenzen kennen müssen. Wenn Sie dies tun, definieren Sie die neue Variable .[ L , U ] y i = d i - L.g(μi)=xiTβ[L,U]yi=diLUL

Wahrscheinlichkeitslogik
quelle
Danke für die Antwort. Diese Daten bestehen aus der Simulation einer T | F-Reihe mit insgesamt 100 dichotomen Auswahlmöglichkeiten für jeden x-Punkt. Die Grenzwerte sind also 0 korrekt oder 100 korrekt, aber in diesem speziellen Fall werden ca. 15 korrekt. Verwenden des Betareg-Pakets ... pacc <- Genauigkeit / 100 + 0,00001; b1 <- betareg (pacc ~ x) ... gibt mir die gleiche Regression wie das Binomial. Hast du das gemeint? Oder schlagen Sie vor, ein datenbasiertes Post-hoc-Limit festzulegen? In welchem ​​Fall unterscheidet sich das Beta vom Binomial, wenn beiden Post-hoc-Grenzwerte zugewiesen wurden?
Matt Albrecht