Ich habe eine Liste statistischer Modelle:
###Data import
Responses <- as.data.frame(matrix(sample(0:10, 1*100, replace=TRUE), ncol=2))
colnames(Responses) <- c("A","B")
Explanatories <- as.data.frame(matrix(sample(20:30, 1*100, replace=TRUE), ncol=2))
colnames(Explanatories) <- c("x","y")
###Create models
Models <- list(
lm(Responses$A ~ Explanatories$x),
lm(Responses$B ~ log10(Explanatories$x)),
lm(Responses$B ~ exp(Explanatories$y))
)
Und eine Liste von Nullmodellen. Diese entsprechen den Modellen in der vorherigen Liste, daher möchte ich zum Beispiel den ersten Film in 'Models' mit dem ersten Film in 'Models_null' vergleichen:
Models_null <- list(
lm(Responses$A ~ 1),
lm(Responses$B ~ 1),
lm(Responses$B ~ 1)
)
All_models <- list(Models,Models_null)
names(All_models)<-c("full","res")
Ich möchte einen AICc-Score für jedes Modell anhand dieser Formel berechnen:
aicc<-function(x) AIC(x)+((2*length(coef(x))*(length(coef(x))+1))/(length(resid(x))-length(coef(x))-1))
Ich muss einige Berechnungen durchführen, die darauf basieren, wie die AICc-Werte zwischen den jeweiligen Voll- und Nullmodellen verglichen werden. Was ich also brauchen würde, ist eine Liste von Datenrahmen, die die AICc-Werte für jedes Modellpaar anzeigen, mit 2 Spalten für 'voll' und 'null' . Vielen Dank im Voraus für jede Hilfe dabei.
Dies ist nur eine Anwendung von *apply
Funktionen. Ich habe gewählt, sapply
weil es wenn möglich einen Vektor zurückgibt.
Full <- sapply(Models, aicc)
Null <- sapply(Models_null, aicc)
df_aicc <- data.frame(Full, Null)
df_aicc
# Full Null
#1 269.7858 268.5274
#2 254.6533 253.0980
#3 254.8408 253.0980
Um diesen Datenrahmen in eine Liste von df's mit einer Zeile pro df aufzuteilen, verwenden Sie split
. Nach Zeilennamen, der in R eindeutig sein muss.
list_aicc <- split(df_aicc, row.names(df_aicc))
list_aicc
#$`1`
# Full Null
#1 269.7858 268.5274
#
#$`2`
# Full Null
#2 254.6533 253.098
#
#$`3`
# Full Null
#3 254.8408 253.098
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen