Konfidenzintervalle um einen Schwerpunkt mit modifizierter Gower-Ähnlichkeit

9

Ich möchte 95% -Konfidenzintervalle für Zentroide erhalten, basierend auf der Gower-Ähnlichkeit zwischen einigen mulivariaten Proben (Community-Daten von Sedimentkernen). Bisher habe ich das vegan{}Paket in R verwendet, um eine modifizierte Gower-Ähnlichkeit zwischen Kernen zu erhalten (basierend auf Anderson 2006; jetzt in R als Teil von enthalten vegdist()). Weiß jemand, wie ich 95% -Konfidenzintervalle für die Schwerpunkte von beispielsweise Probenahmestellen basierend auf der modifizierten Gower-Ähnlichkeit berechnen kann?

Wenn möglich, möchte ich diese 95% CIs außerdem auf einem PCO darstellen, auf dem die Zentroide angezeigt werden. Es ist also offensichtlich, ob sie sich überlappen.

Um die modifizierte Gower-Ähnlichkeit zu erhalten, habe ich Folgendes verwendet:

dat.mgower <- vegdist(decostand(dat, "log"), "altGower")

Aber soweit ich weiß, bekommt man keine Zentroide von vegdist(). Ich muss Zentroide bekommen, dann 95% CIs, dann sie zeichnen ... in R. Hilfe!

Anderson, MJ, KE Ellingsen und BH McArdle. 2006. Multivariate Dispersion als Maß für die Beta-Diversität. Ecology Letters 9: 683–693.

Margaret
quelle
Wenn Sie Cluster in k-Dimensionen betrachten, sind die Zentroide nicht k-dimensional? In diesem Fall sollten Sie nach Vertrauensbereichen und nicht nach Intervallen suchen. Jeder Konfidenzbereich für eine Variable wie ein Clusterzentrum würde von allen Komponenten abhängen, die die Unsicherheit in der Schätzung ausmachen. Ich würde denken, dass dies ziemlich komplex sein könnte und dass es nicht einfach wäre, Vertrauensbereiche zu generieren. Könnten Sie nicht simulieren, um sie zu approximieren?
Michael R. Chernick
Danke, Michael. Ja, ich meinte Vertrauensbereiche, die sich im k-dimensionalen Raum befinden würden, wobei k die Anzahl der in der Gemeinschaft gefundenen Taxa ist. Ich würde Simulationen durchführen, anstatt sie zu berechnen, aber ich weiß nicht, wie ich das anstellen soll. Ungefähre CIs würden ausreichen.
Margaret
1
Ich sehe, dass es einige Diskussionen gegeben hat, während ich meine Antwort schrieb. Ich bin mir nicht sicher, was Sie beschreiben und was ich illustriere, was die Arten , da wir diese Informationen bei der Berechnung der Unähnlichkeiten weggeworfen haben. Wir können dann die Zentroide in einem Ordnungsraum berechnen, in diesem Fall einem PCO der modifizierten Gower-Unähnlichkeiten. Lassen Sie mich wissen, wenn dies nicht das ist, was Sie wollten, und ich kann versuchen, noch mehr zu helfen. k
Gavin Simpson
1
Ein anderer Ansatz wäre das Bootstrap. Für die n k-dimensionalen Punkte werden Bootstrap-Samples durch n-maliges Abtasten mit Ersetzung aus dem Datensatz erzeugt. Führen Sie den Bootstrap-Datensatz über den Clustering-Algorithmus aus. Wiederholen Sie dies viele Male. Dadurch erhalten Sie eine Verteilung ausgewählter Cluster und Schwerpunkte. Dann würden Sie für jeden Schwerpunkt (wenn Sie von einem Bootstrap-Beispiel zu einem anderen passen können) eine Verteilung der Schwerpunkte für jeden Cluster erhalten und daraus Bootstrap-Vertrauensbereiche für sie erstellen.
Michael R. Chernick
1
@MichaelChernick Das ist vielleicht kein allzu großes Problem, wenn die Gruppierungen gemäß meinem Beispiel a priori definiert sind. Das wäre typisch für die Art von Daten, die in dem von Margaret zitierten Artikel beschrieben werden.
Gavin Simpson

Antworten:

5

Mir ist nicht sofort klar, welchen Schwerpunkt Sie möchten, aber der Schwerpunkt, der mir in den Sinn kommt, ist der Punkt im multivariaten Raum im Zentrum der Masse der Punkte pro Gruppe. Darüber möchten Sie eine 95% ige Vertrauensellipse. Beide Aspekte können mit der ordiellipse()Funktion in vegan berechnet werden . Hier ist ein modifiziertes Beispiel aus der ?ordiellipseVerwendung eines PCO als Mittel zum Einbetten der Unterschiede in einen euklidischen Raum, aus dem wir Schwerpunkte und Vertrauensellipsen für Gruppen ableiten können, die auf der Nature Management-Variablen basieren Management.

require(vegan)
data(dune)
dij <- vegdist(decostand(dune, "log"), method = "altGower")
ord <- capscale(dij ~ 1) ## This does PCO

data(dune.env) ## load the environmental data

Jetzt zeigen wir die ersten 2 PCO-Achsen an und fügen eine 95% -Konfidenzellipse hinzu, die auf den Standardfehlern des Durchschnitts der Achsenwerte basiert. Wir möchten, dass Standardfehler festgelegt werden, kind="se"und verwenden Sie das confArgument, um das erforderliche Konfidenzintervall anzugeben.

plot(ord, display = "sites", type = "n")
stats <- with(dune.env,
              ordiellipse(ord, Management, kind="se", conf=0.95, 
                          lwd=2, draw = "polygon", col="skyblue",
                          border = "blue"))
points(ord)
ordipointlabel(ord, add = TRUE)

Beachten Sie, dass ich die Ausgabe von erfasse ordiellipse(). Dies gibt eine Liste zurück, eine Komponente pro Gruppe, mit Details zum Schwerpunkt und zur Ellipse. Sie können die centerKomponente aus jeder dieser Komponenten extrahieren , um zu den Schwerpunkten zu gelangen

> t(sapply(stats, `[[`, "center"))
         MDS1       MDS2
BF -1.2222687  0.1569338
HF -0.6222935 -0.1839497
NM  0.8848758  1.2061265
SF  0.2448365 -1.1313020

Beachten Sie, dass der Schwerpunkt nur für die 2d-Lösung gilt. Eine allgemeinere Option besteht darin, die Zentroide selbst zu berechnen. Der Schwerpunkt ist nur der einzelne Durchschnitt der Variablen oder in diesem Fall der PCO-Achsen. Während Sie mit den Unähnlichkeiten arbeiten, müssen sie in einen Ordnungsraum eingebettet sein, damit Sie Achsen (Variablen) haben, aus denen Sie Durchschnittswerte berechnen können. Hier sind die Achsenbewertungen in Spalten und die Stellen in Zeilen. Der Schwerpunkt einer Gruppe ist der Vektor der Spaltenmittelwerte für die Gruppe. Es gibt verschiedene Möglichkeiten, die Daten aggregate()aufzuteilen, aber hier verwende ich , um die Punktzahlen auf den ersten beiden PCO-Achsen in Gruppen aufzuteilen Managementund deren Durchschnittswerte zu berechnen

scrs <- scores(ord, display = "sites")
cent <- aggregate(scrs ~ Management, data = dune.env, FUN = mean)
names(cent)[-1] <- colnames(scrs)

Das gibt:

> cent
  Management       MDS1       MDS2
1         BF -1.2222687  0.1569338
2         HF -0.6222935 -0.1839497
3         NM  0.8848758  1.2061265
4         SF  0.2448365 -1.1313020

Dies entspricht den Werten, die statswie oben extrahiert gespeichert wurden . Der aggregate()Ansatz verallgemeinert sich auf eine beliebige Anzahl von Achsen, z.

> scrs2 <- scores(ord, choices = 1:4, display = "sites")
> cent2 <- aggregate(scrs2 ~ Management, data = dune.env, FUN = mean)
> names(cent2)[-1] <- colnames(scrs2)
> cent2
  Management       MDS1       MDS2       MDS3       MDS4
1         BF -1.2222687  0.1569338 -0.5300011 -0.1063031
2         HF -0.6222935 -0.1839497  0.3252891  1.1354676
3         NM  0.8848758  1.2061265 -0.1986570 -0.4012043
4         SF  0.2448365 -1.1313020  0.1925833 -0.4918671

Offensichtlich ändern sich die Schwerpunkte auf den ersten beiden PCO-Achsen nicht, wenn wir nach mehr Achsen fragen. Sie können also die Schwerpunkte über alle Achsen einmal berechnen und dann die gewünschte Dimension verwenden.

Sie können die Schwerpunkte zum obigen Diagramm mit hinzufügen

points(cent[, -1], pch = 22, col = "darkred", bg = "darkred", cex = 1.1)

Das resultierende Diagramm sieht nun so aus

Verwendung von Ordiellipse

Schließlich enthält vegan die adonis()und betadisper()-Funktionen, mit denen Unterschiede in den Mitteln und Varianzen multivariater Daten auf eine Weise untersucht werden sollen, die Martis Papieren / Software sehr ähnlich ist. betadisper()ist eng mit dem Inhalt des von Ihnen zitierten Papiers verknüpft und kann die Zentroide auch für Sie zurückgeben.

Gavin Simpson
quelle
1
Lesen Sie die Hilfe, ?ordiellipseum Einzelheiten darüber zu erfahren, was hier getan wird, insbesondere bei der Berechnung des Konfidenzintervalls. Ob die Theorie mit den Daten übereinstimmt, möchten Sie vielleicht mit Simulation oder Resampling untersuchen oder anstatt sich auf "Theorie" zu verlassen.
Gavin Simpson
1
Weiter zum Kommentar und zum letzten Absatz der Antwort; adonis()kann verwendet werden, um auf ähnliche Mittelwerte (Zentroide) von Gruppen zu testen, wie man ANOVA im univariaten Fall verwenden könnte. Ein Permutationstest wird verwendet, um festzustellen, ob die Daten mit der Nullhypothese ohne Unterschied der Schwerpunkte übereinstimmen. Beachten Sie auch, dass Unterschiede der Schwerpunkte durch unterschiedliche Gruppendispersionen (Varianzen) verursacht werden können. betadisper()kann Ihnen helfen, zu testen, ob dies der Fall ist, indem Sie erneut einen permutationsbasierten Test der durchschnittlichen Abstände der Stichprobenpunkte zu ihrem Schwerpunkt verwenden.
Gavin Simpson
@ Gavin-- danke. Ich habe den Test durchgeführt, um Unterschiede zwischen den Zentroiden mit PERMANOVA und PERMDISP in PRIMER zu messen (die dieselbe Aufgabe ausführen wie adonis()und betadisp(), glaube ich). Ich habe nur nach einer guten Möglichkeit gesucht, die Daten anzuzeigen. Ich habe eine Site-x-Season-Interaktion für ein Design mit wiederholten Messungen, daher wollte ich leicht zeigen können, welche Sites einen saisonalen Effekt zeigten. Ich denke, diese Ellipsen sind das, wonach ich suche. Dieses Beispiel war sehr hilfreich.
Margaret
auch ja - der multivariate Massenschwerpunkt für jede Gruppe ist der Schwerpunkttyp, für den ich versucht habe, CIs zu berechnen.
Margaret
Noch etwas: Wenn ich die Ellipsen abhängig von meinen Faktoren mit unterschiedlichen Farben füllen wollte, gibt es eine Möglichkeit, dies zu tun, ordiellipse()ohne eine for-Schleife einzubetten ? Ich habe sowohl Jahreszeiten als auch Standorte in meinen Daten, und ich wollte unterschiedliche Standorte in einem Diagramm und Jahreszeiten in einem anderen durch Farbcodierung anzeigen. Aus irgendeinem Grund funktioniert die Verwendung von col = c (1,2,1,2) usw. nicht und col = as.numeric (cent ["Site_TP"]) auch nicht. Gibt es eine elegante Möglichkeit, dies zu tun?
Margaret