Hallo Paul,
Paul_CU hat geschrieben: ↑Mi Mai 31, 2017 1:13 amHier der Code fuer den Teil des Datensatzes der fuer die Diskussion mir relevant erscheint (ich habe den Datensatz in mehrere Teile zerlegt und moechte das hier Erreichte am Ende mit zwei anderen Teilen replizieren):
bzw. fuer den fuer meine Fragestellung vollen Datensatz
hm, dann sollte in der Funktion
jedesLand() der formale Parameter anders benannt werden. Außerdem wollte ich sehen, ob die explizite Umwandlung zu Faktor, z.B.
factor(dfcr$lr), notwendig ist (hätte ja sein können, dass die entsprechende Spalte schon als Faktor gespeichert ist). Also die Umwandlung ist nötig: das kann man implizit machen, indem man eine andere Aufrufkonvention für die Funktion leveneTest() nutzt:
leveneTest(x, lr)
Da gibt es die entsprechenden warnings - das ist unsauber programmiert (ansonsten entspricht es dem bisherigen Vorgehen). Allerdings würde ich empfehlen, möglichst früh die Spalte $lr in einen Faktor umzuwandeln - eventuell gleich nach dem Einlesen (im Datadrame
df)
Code: Alles auswählen
df$lr <- factor(df$lr) # oder df$lr <- as.factor(df$lr)
Wenn der Dataframe
dfcr ein Subset von
df ist, müsste die Eigenschaft, dass diese Spalte ein Faktor ist, erhalten bleiben. Ein Nachteil kann sein, dass so ein Faktor immer seine ursprünglichen Levels (Faktorstufen) mit rumschleppt - insofern kann es sein, dass Du erst im Dataframe
dfcr die Spalte in einen Faktor umwandeln möchtest.
Du kannst ja einfach mal etwas rumprobieren:
Code: Alles auswählen
library("car")
my.stat <- function(x, d) {
lev <- leveneTest(x ~ d$lr)
c( sd05= sd(x[d[,81] == 5], na.rm = TRUE),
sd10= sd(x[d[,81] == 10], na.rm = TRUE),
df2 = lev$Df[2], F = lev$'F value'[1], p = lev$'Pr(>F)'[1]
)
}
jedesLand <- function(d) {
ext.var <- 614:623
x3 <- sapply(d[ext.var], my.stat, d=d)
colnames(x3) <- names(d)[ext.var]
x3
}
df$lr <- factor(df$lr) # oder df$lr <- as.factor(df$lr)
L <- split(df, df[, 625])
lapply(L, jedesLand)
Wenn das nicht funktioniert, bleibt es einfach bei:
Code: Alles auswählen
library("car")
my.stat <- function(x, d) {
lev <- leveneTest(x ~ factor(d$lr))
c( sd05= sd(x[d[,81] == 5], na.rm = TRUE),
sd10= sd(x[d[,81] == 10], na.rm = TRUE),
df2 = lev$Df[2], F = lev$'F value'[1], p = lev$'Pr(>F)'[1]
)
}
jedesLand <- function(d) sapply(d[614:623], my.stat, d=d) # ext.var <- 614:623
lapply(split(df, df[, 625]), jedesLand)
Achtung, ich habe noch mal an einigen Stellen die Parameter umgestellt - ist jetzt sicherer so.
Dein Code laeuft super durch, allerdings sieht das Ergebnis seltsam aus, da die Differenzen der Standardabweichungen nicht mit den p-Werten korrelieren (selbst bei gleichem Stichprobenumfang). Ich weiss nicht, inwieweit es noch moeglich ist Tipps zu geben, ohne den Datensatz zu sehen.
Freut mich, dass mein blindes Programmieren erfolgreich war - ist nicht immer ganz einfach.
Ich hoffe, Du weißt, wie bei einem t-Test t-Wert, p-value und Standardfehler des Schätzers miteinander zusammenhängen ...
Ansonsten, lass bitte mal die neue Version laufen (ich habe da so einen Verdacht, was ich evtl. vorher falsch gemacht habe).
Gruß, Jörg