Vierfeldertafel aus diagnostischen Parametern errechnen

Fragen, die sich auf kein spezielles Verfahren beziehen.

Vierfeldertafel aus diagnostischen Parametern errechnen

Beitragvon stenius » Sa 23. Feb 2019, 23:57

Seid herzlichst gegrüßt :)

Wahrscheinlich passt meine Frage eher in ein Mathe-Forum für Oberstufenschüler, aber vielleicht hatte hier ja mal jemand ein ähnliches Problem.
Ich möchte eine dynamische Meta-Analyse über diagnostische Verfahren erstellen, jedoch rücken ja bekanntlich nicht Autoren ihre Rohdaten heraus.
Was jedoch immer vorhanden ist, ist das N (a+b+c+d), die Sensitivität (a/(a+c)*100) und die Spezifität (d/(b+d)*100). Nun ist die Frage, ob sich die Rohdaten über folgendes nichtlineares Gleichungssystem eindeutig bestimmen lassen und ob es dabei auch immer nur eine mögliche Lösung gibt:

a+b+c+d=N
a/(a+c)*100=Sn
d/(b+d)*100=Sp
N, Sn und Sp wiegesagt vorhanden. Sn&Sp immer in der range von 0-100, a-d immer nur ganze Zahlen.

Es sieht auf den ersten Blick sehr easy aus, jedoch bin ich bislang auf kein passendes Verfahren gestoßen, zumindest nicht für nichtlineare Gleichungssysteme. Und mein Mathe selbst ist leider viel zu eingerostet für solche Späße...
stenius
Grünschnabel
Grünschnabel
 
Beiträge: 3
Registriert: Mi 4. Nov 2015, 17:36
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Vierfeldertafel aus diagnostischen Parametern errechnen

Beitragvon strukturmarionette » Mo 25. Feb 2019, 11:30

Hi,

jedoch bin ich bislang auf kein passendes Verfahren gestoßen, zumindest nicht für nichtlineare Gleichungssysteme.

- Auf welche Linearen Verfahren bist Du denn 'gestoßen'?
- Wo bist Du darauf gestoßen?
- Warum passt keines davon?

Gruß
S.
strukturmarionette
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 3525
Registriert: Fr 17. Jun 2011, 22:15
Danke gegeben: 31
Danke bekommen: 482 mal in 479 Posts

Re: Vierfeldertafel aus diagnostischen Parametern errechnen

Beitragvon bele » Mo 25. Feb 2019, 16:37

Ist das eine Hausaufgabe oder ein real life Problem? Das wäre an dieser Stelle wichtig, denn im real life werden die Testgütekriterien ja wahrscheinlich Rundungsfehler enthalten. Außerdem könnte man im real life über ein brute force Lösung "alles mal durchprobieren" nachdenken, die als Hausaufgabe kaum je akzeptiert werden dürfte. Hängt natürlich davon ab, mit welchen N wir so rechnen müssten und wieviele tausend Studien Du einbeziehen möchtest.

Andererseits kann ich mir nicht vorstellen, dass tatsächlichen medizinischen Publikationen nicht wenigstens die Randsummen entnommen werden können. Also doch Hausaufgabe?

Gibt doch mal ein Beispiel mit einer Fallzahl, einer Sensitivität und einer Spezifität.

LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 3419
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 10
Danke bekommen: 702 mal in 692 Posts

Re: Vierfeldertafel aus diagnostischen Parametern errechnen

Beitragvon stenius » Mo 4. Mär 2019, 04:05

Zunächst vielen Dank für die Antworten! :D

Um den Anwendungsbezug zu konkretisieren:
Ich möchte per Excel eine Datenbank mit diagnostischen Studien erstellen, welche dann jeweils auch dynamische Metaanalysen für die jeweiligen diagnostischen Methoden ausgibt. In Bereichen wie der Radiologie beispielsweise geht das weitestgehend problemlos, da hier die Vierfeldertafeln (richtig-positiv, falsch-positiv, falsch-negativ, richtig-negativ) in fast allen papers angegeben werden. Bei Studien zu klinischen Tests, Befund- und Anamnesepositionen allerdings wird aufgrund der Vielzahl der Postitionen auf eine Angabe der Rohdaten oft verzichtet, sodass man in manchen Fällen nur das N und die jeweiligen Sensitivitäten und Spezifitäten vorfindet bzw. meist auch noch die Likelihoodratios. Auf dieser Datenbasis lassen sich die Ergebnisse aber nicht in eine Metaanalyse integrieren. Eine Anteilsrechnung über das N beispielsweise ist hier nicht zielführend. Daher bräuchte es also schon die Vierfeldertafeln. Die Ns liegen bei solchen Studien meistens in einem höheren zwei- oder niedrigen bis mittleren dreistelligen Bereich.

Die Methoden, die ich bisher angetroffen habe, setzten irgendwelche Bedingungen voraus, denen mein Gleichungssystem nicht entspricht oder sie waren mir schon zu hochtrabend, als dass ich sie hätte vollumfänglich verstehen, geschweige denn in Excel-Funktionen oder in einen VBA-Code hätte übersetzen können. Habe gerade noch die Freeware "Mathematik Alpha" angetestet, welche es jedoch nicht hinbekommt. Sie scheint in ihrer Funktionalität auch ein wenig begrenzt zu sein. Beispielsweise kann ich dort nicht angeben, dass ich nur ganze Zahlen benötige.

Was ich noch vergessen hatte: zusätzlich sind ja meistens die Likelihoodratios mitangegeben oder die Nachtestwahrscheinlichkeiten. Somit lässt sich das Gleichungssystem noch etwas erweitern:

a+b+c+d=N
a/(a+c)*100=Sn
d/(b+d)*100=Sp
(Sn%/100)/(1-(Sp%/100))=LR+
(100-(Sn%))/Sp%=LR-

für N, Sn,Sp, Lr+ und LR- bekannt.
Wobei einen das ja nicht weiterhilft, da sich die Odds-Ratios ja ohnehin aus Sn und Sp ergeben.

oder:

a+b+c+d=N
a/(a+c)*100=Sn
d/(b+d)*100=Sp
RP/(RP+FP)*100=PPV
RN/(RN+FN)*100=NPV

für N, Sn,Sp, PPV und NPV bekannt
Da sich PPV und NPV aus der Vierfeldertafel berechnen, dürften die zweit zustätzlichen Therme in diesem Fall die Sache ja erleichtern.

Beispiele wären:
Beispiel 1:
N=125
Sn=89; Sp=30
LR+=1,27; LR-=0,37

Beispiel 2:
N=552
Sn=75; Sp=48
PPV=18; NPV=93
LR+=1,44; LR-=0,52

Da es sich nicht um eine Hausaufgabe, sondern um ein kleines Forschungsprojekt von einer Gruppe aus mehreren Physiotherapeuten handelt, zählt in diesem Fall auch wirklich nur ein halbwegs brauchbares Endprodukt, auf welchem Weg auch immer. Wir wollen schlicht die aktuelle Evidenz von Diagnoseverfahren anhand von möglichst vielen Daten bewerten können. Da ich die Sache dynamisch gestalten möchte, sodass man die Werte beim Erscheinen neuer Studien fix aktualisieren könnte, mache ich das ganze mit Excel. Wenn ein brute-force-Code die Sache wuppen könnte, wäre mir das also auch recht. Allerdings stellt sich da natürlich die Frage, ob der Code bei einem N von 552 wie in Beispiel 2 rein von der Prozessorleistung her überhaupt noch machbar ist. Das ganze sollte sich ja auch nicht allzu lang hinziehen, da in die Datenbank ja mit einer Vielzahl solcher Zeilen gefüllt werden wird. Aber da ich ja wiegesagt nur volle Zahlen brauche und eine gewisse Toleranz in Anbetracht der höheren Gesamt-Ns auch verkraftbar wäre, hege ich noch die Hoffnung, dass das ganze doch irgendwie machbar sein könnte.

Bislang läuft das Projekt eher auf reiner Wissens- und Lernbasis. Erweist sich eine solche Datenbank und eine dazugehörige Bedienoberfläche jedoch als eine potentiell nützliche Sache für das clinical reasoning, würde ich auch eine Weiterverarbeitung in Form einer für TherapeutInnen nutzbaren App nicht ausschließen. Der wissenschaftliche Mehrwert würde sich auch aus dem Umstand ergeben, dass beispielsweise von den meisten anamnestischen Befundpositionen nur Einzelstudien, jedoch keine Metaanalysen bestehen. Wäre schade, wenn es bereits an dem hier aufgeführten Gleichungssystem scheitern würde.
stenius
Grünschnabel
Grünschnabel
 
Beiträge: 3
Registriert: Mi 4. Nov 2015, 17:36
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Vierfeldertafel aus diagnostischen Parametern errechnen

Beitragvon bele » Mo 4. Mär 2019, 14:32

In den vorgeschlagenen Beispielen ist brute force ohne weiteres machbar. Beispielergebnisse:

Code: Alles auswählen
> brute.force(N=125, Sp=30, Sn=89)

Ich schlage vor:
        a b  c  d Sp       Sn
750646 21 6 49 49 30 89.09091


bzw.
Code: Alles auswählen
> brute.force(N=552, Sn=75, Sp=48)

Ich schlage vor:
          a   b  c   d Sp Sn
15601776 48 113 52 339 48 75


Ich habe das "mal schnell" in einer Skriptsprache zusammengeschrieben, sodass da ganz sicher noch jede Menge Optimierungspotenzial drin steckt. Dieses Skript vergeudet bei Zwischenschritten unsagbar viel Speicher und Rechenzeit. Trotzdem taucht die Lösung mit N=125 sofort auf dem Bildschirm auf, die Lösung mit N=552 nach etwa 22 Sekunden Rechenzeit. Da müsste es schon sehr viele Studien mit N = 500 geben bis es sich lohnt, dieses Programm weiter zu optimieren. Ich habe es mit N=1000 ausprobiert, da scheitert mein Rechner nach 2,5 Minuten weil nicht mehr genug Speicher angefordert werden kann. Das ließe sich durch geschicktere Programmierung ganz sicher lösen, aber wahrscheinlich braucht es das ja gar nicht.

Mein Skript in R könnt Ihr gerne haben, eine Excel- oder VBA-Lösung gibt es von mir sicher nicht.

HTH,
Bernhard

Code: Alles auswählen
brute.force <- function(N, Sp, Sn){
      # Erstelle alle nur denkbaren Kombinationen von a, b und c
  alle <- expand.grid(a = 1:N, b = 1:N, c = 1:N)
      # Erstelle durch Filtern alle unter N möglichen Kombinationen a bis d
  moegliche <- subset(alle, alle$a + alle$b + alle$c <= N)
  moegliche$d <- with(moegliche, N-a-b-c)
      # Berechne für alle möglichen Kombinationen Sp und Sn
  moegliche$Sp <- with(moegliche, a/(a+c)*100)
  moegliche$Sn <- with(moegliche, d/(b+d)*100)
      # Berechne quadratische Distanz aller Sn und Sp zu Zielwerten
  moegliche$dq <- (moegliche$Sp - Sp)^2+(moegliche$Sn - Sn)^2
      # kleinste Distanzquadrate aussuchen und Kombination ausgeben:
  minimum <- which.min(moegliche$dq)
  cat("\nIch schlage vor:\n")
  print(moegliche[minimum,1:6])
}

brute.force(N=125, Sp=30, Sn=89)
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 3419
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 10
Danke bekommen: 702 mal in 692 Posts

Re: Vierfeldertafel aus diagnostischen Parametern errechnen

Beitragvon strukturmarionette » Di 5. Mär 2019, 00:44

Hi,

Datenbank mit diagnostischen Studien erstellen, welche dann jeweils auch dynamische Metaanalysen für die jeweiligen diagnostischen Methoden ausgibt...Wir wollen schlicht die aktuelle Evidenz von Diagnoseverfahren anhand von möglichst vielen Daten bewerten können. Da ich die Sache dynamisch gestalten möchte, sodass man die Werte beim Erscheinen neuer Studien fix aktualisieren könnte

- Ist IBM-Watson bekannt? bspw:

https://www.ibm.com/watson/health/explo ... analytics/

- Dort sind u.a. fertige Benutzeroberflächen integriert.
- Gewiss lassen sich damit auch Sachverhalte aus der Physiotherapie flexibel fachlich darstellen.

Gruß
S.
strukturmarionette
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 3525
Registriert: Fr 17. Jun 2011, 22:15
Danke gegeben: 31
Danke bekommen: 482 mal in 479 Posts

Re: Vierfeldertafel aus diagnostischen Parametern errechnen

Beitragvon bele » Mi 17. Apr 2019, 18:06

bele hat geschrieben:In den vorgeschlagenen Beispielen ist brute force ohne weiteres machbar.


Da muss ich mich korrigieren. Ich habe die Fragestellung als Spielbeispiel nochmal in einer compilierten Programmiersprache umgesetzt und ein ganz anderes Ergebnis bekommen.
Für das Beispiel mit N=552 hatte ich vorgeschlagen (a, b, c, d) = (48, 113, 52, 339)
Mein neues Programm schlägt vor: (a, b, c, d) = (39, 260, 13, 240)

Wenn man nachrechnet, erfüllen beide Kombinationen Sensitivität und Spezifität auf viele, viele Nachkommastellen und doch sind beide Kombinationen einander nicht ähnlich.

Im Eingangspost lautete die Frage:
Nun ist die Frage, ob sich die Rohdaten über folgendes nichtlineares Gleichungssystem eindeutig bestimmen lassen

und das ist damit eindeutig mit nein zu beantworten -- jedenfalls solange Sensitvität und Spezifität mit wenigen Nachkommastellen angegeben werden.

Wer ähnliches in Zukunft trotzdem versuchen möchte, ist mit einer schnellen, compilierten Sprache besser aufgehoben. Mein jetzt nicht besonders eleganter aber funktionierender Code in Rust kann vielleicht aus Ausgangspunkt dienen. Den Rust-Compiler erhält man kostenlos unter https://www.rust-lang.org/tools/install und man spürt einen deutlichen Geschwindigkeitsunterschied, wenn man ohne Debug-Daten arbeitet, also mit
Code: Alles auswählen
cargo run --release
.
Code: Alles auswählen
n brute_force(n:u16, target_sens : f32, target_spec : f32) {
    let mut a = 0;
    let mut best_a = 0;
    let mut best_b = 0;
    let mut best_c = 0;
    let mut best_d = 0;
    let mut best_dist = std::f32::INFINITY;

    loop{
        if a >= n { break; }
        let mut b = 0;
        loop{
            if a + b >= n { break; }
            let mut c = 0;
            loop{
                if a+b+c > n {break; }
                let d = n-a-b-c;

                let sensitivity = a as f32/ (a + c) as f32;
                let specificity = d as f32/ (b + d) as f32;
                let dist = (sensitivity - target_sens).powf(2.) + &
                    (specificity - target_spec).powf(2.);
                if dist < best_dist {
                    best_a = a; best_b = b;
                    best_c = c; best_d = d;
                    best_dist = dist;
                }
                c += 1;
            }
            b += 1;
        }
        a += 1;
        println!("trying a = {}.", a);
    }
    println!("Result:\n a = {}, b = {}, c = {}, d = {}", best_a, best_b, best_c, best_d);
}

fn main(){
    brute_force(10000, 0.75, 0.48);
}


LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 3419
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 10
Danke bekommen: 702 mal in 692 Posts


Zurück zu Allgemeine Fragen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast