Datentransformation vermeidet verschachtelte Schleifen in R

9

Ich habe eine Kontingenztabellen-Datenmatrix mit 6 Spalten und 37 Zeilen. Ich muss eine Chi-Quadrat-Transformation anwenden, um mir Zeilen- und Spaltenprofile für eine Korrespondenzanalyse zu geben.

Leider wurde mir gesagt, dass ich verschachtelte Schleifen verwenden muss, um die Daten zu transformieren und die CA auszuführen (anstatt es vernünftiger zu machen in R). Ich erhielt die Struktur für meine verschachtelte Schleife:

%Vor%

Was ich unter Verwendung der verschachtelten Schleife verstehe, wird meine "TRANSFORMATION" zuerst auf die Zeilen und dann auf die Spalten anwenden.

Die Umwandlung, die ich an den Daten vornehmen möchte, um die Zeilenprofile zu erhalten, lautet:

  

( X ( ij ) / Summe (X ( i )) ) / sqrt (Summe (X ( j )))

Während die Umwandlung, die ich an den Daten vornehmen möchte, um die Spaltenprofile zu erhalten, ist:

  

( X ( ij ) / Summe (X ( j )) ) / sqrt (Summe (X ( i )))

Was würde ich als meine "TRANSFORMATION" in der letzten Zeile der verschachtelten Schleife eingeben, damit sie die gewünschte Transformation für Profile ausgibt? Ansonsten, wenn ich den Punkt einer verschachtelten Schleife hier nicht verstanden habe, beschreibe bitte, was es mir erlauben würde.

Dies ist der Code für eine Teilmenge meiner Daten:

%Vor%

Wenn ich nur diese Teilmenge verwende, würde ich erwarten, dass das Zeilenprofil für die erste Zeile lautet:

%Vor%

Und das Spaltenprofil für die erste Spalte lautet:

%Vor%     
Confused 08.09.2012, 02:19
quelle

1 Antwort

1

Sie können dies in diesen Arten von Berechnungen verwenden, ohne auch nur eine einzige Schleife zu benötigen. Schreibe deine Gleichung um und dann bekommst du:

Xtrans [i, j] = X [i, j] / ( Summe ( X [ i,]) * sqrt (Summe ( X [, j])) )

Um eine Matrix zu erhalten, die den Ausdruck darstellt - Summe ( X [i,]) * sqrt (Summe ( X [, j])) - verwenden Sie die Funktion outer() oder %o% gefällt das:

%Vor%

Oder für die Spaltenumwandlung:

%Vor%

Das einzige, was Sie tun müssen, ist Ihre ursprüngliche Matrix durch diese zu teilen, zB für die col-Transformation:

%Vor%

Auf die gleiche Weise können Sie die Zeilenumwandlung berechnen.

Mit den Handberechnungen kann ich bestätigen, dass meine Lösung korrekt ist, vorausgesetzt, ich habe Ihre Indexnotation richtig verstanden (was bedeutet, dass ich für Zeilen und j für Spalten steht). Die Zahlen, die Sie erwarten, sind nicht die, die Sie erwarten. Um es Ihnen zu zeigen:

%Vor%

Die Chi-Quadrat-Normalisierung, über die Sie sprechen, kann tatsächlich in der Funktion decostand des vegan -Pakets gefunden werden. Beachten Sie, dass die Methode standardmäßig durch Multiplikation mit der Quadratwurzel der Matrixsumme angepasst wird. Dies ist in einer Korrespondenzanalyse sinnvoll.

Wenn Sie diese Korrektur nicht verwenden wollen, dann können Sie zB die Spaltenumwandlung auch wie folgt bekommen:

%Vor%     
Joris Meys 02.10.2012 13:20
quelle

Tags und Links