Faktorenanalysen pro Land

Varianzanalyse, Diskriminanzanalyse, Kontingenzanalyse, Faktorenanalyse, Clusteranalyse, MDS, ....

Moderator: EDi

jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Faktorenanalysen pro Land

Beitrag von jogo »

Hallo Michelle,
Michelle_Magnum hat geschrieben: Do Dez 12, 2019 5:07 pm wenn ich das genau nach deinem Vorschlag anwende,

Code: Alles auswählen

pcaergebnis <- base::by(dataframe.with.items, dataframe.allvariables$country, function(x) principal(x, nfactors = 3, rotate = "oblimin"))
, bekomme ich die Fehler-Meldung "missing values (NAs) in the correlation matrix do not allow me to continue. Please drop those variables and try again."
bitte lies die Dokumentation zur Funktion principal(). Dort ist genau beschrieben, wie die Funktion vorgeht, wenn NAs in den Daten sind.
Bei Dir ist sehr wahrscheinlich der Fall, dass bei einem Land der Ausschluss der NAs dazu führt, dass die Korrelation der Variablen nicht mehr berechnet werden kann.
Hier ein kleines Beispiel:

Code: Alles auswählen

D <- data.frame(x=c(1,2,NA,4,5,NA), y=c(7,3,4,NA,8,5), country=c(1,1,1,2,2,2))
D

cor(D[-3], use="pair")
cor(D[4:6,-3], use="pair")
cor(D[1:3,-3], use="pair")
Dieselbe Meldung bekomme ich, wenn ich beide "x" mit dataframe.with.items ersetze.
Wenn ich jedoch nur ein x ersetze,

Code: Alles auswählen

pcaergebnis <- base::by(dataframe.with.items, dataframe.allvariables$country, function(x) principal(dataframe.with.items, nfactors = 3, rotate = "oblimin"))
, bekomme ich die Fehlermeldung nicht. Das irritiert mich, da meinem Verständnis nach durch x eigentlich der dataframe.with.items angesprochen wird.
Das ist aber nicht das, was Du laut der bisherigen Beschreibung möchtest.
Auch wenn ich principal() über alle Länder laufen lasse, sind die NAs kein Problem.
klar, weil immer noch genügend Daten übrig bleiben, um die Korrelation zu berechnen. (nochmal der Hinweis auf die Dokumentation der Funktion)
also:

Code: Alles auswählen

cor(D[-3], use="pair") # versus
by(D[-3], D$country, cor, use="pair")
Den dataframe.with.items habe ich folgendermaßen konstruiert:

Code: Alles auswählen

dataframe.with.items <- data.frame(dataframe.allvariables$item1, dataframe.allvariables$item2, dataframe.allvariables$item3, dataframe.allvariables$item4, dataframe.allvariables$item5, dataframe.allvariables$item6)
Das ist identisch mit:

Code: Alles auswählen

items <- paste0("item", 1:6)
dataframe.with.items <- dataframe.allvariables[items]
oder auch (zu?) kurz:

Code: Alles auswählen

dataframe.with.items <- dataframe.allvariables[paste0("item", 1:6)]
Du kannst also einfach mal testen:

Code: Alles auswählen

by(dataframe.allvariables[items], dataframe.allvariables$country, function(x) any(is.na(cor(x, use="pair"))) )

Gruß, Jörg
Antworten