簡體   English   中英

從嵌套的模型列表創建顯示AICc值的數據框列表

[英]Create list of dataframes displaying AICc values from a nested list of models

我有一個統計模型列表:

###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))
)

以及空模型列表。 這些對應於上一個列表中的模型,因此例如,我想將“ Models”中的第一個lm與“ Models_null”中的第一個lm進行比較:

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")

我想使用以下公式為每個模型計算AICc分數:

aicc<-function(x) AIC(x)+((2*length(coef(x))*(length(coef(x))+1))/(length(resid(x))-length(coef(x))-1))

我需要根據每個完整和空模型之間的AICc分數進行比較來進行一些計算。 因此,我需要的是一個數據幀列表,其中顯示了每對模型的AICc得分,其中兩列分別為“ full”和“ null” 在此先感謝您的幫助。

這是一個雙重sapply

sapply(All_models, sapply, aicc)
#          full      res
# [1,] 267.4959 266.0534
# [2,] 251.9809 251.9127
# [3,] 253.5760 251.9127

第一個sapply僅遍歷ModelsModels_null 然后自然要針對這兩個列表中的每一個再次應用sapply ,對於每種模型,我們將在其中使用aicc 這恰好就是@Rui Barradas的解決方案。

當然,如果需要,隨后可以將結果轉換為數據幀。


為了獲得一個列表,該列表的元素為上述矩陣的行,可以使用以下三個方法之一:

lapply(seq_along(Models), function(i) 
  data.frame(full = aicc(Models[[i]]), null = aicc(Models_null[[i]])))

Map(data.frame, full = lapply(Models, aicc), null = lapply(Models_null, aicc))

do.call(Map, c(data.frame, lapply(All_models, sapply, aicc)))

這只是*apply函數的一個應用。 我選擇sapply是因為它盡可能返回一個向量。

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

為了將此數據幀拆分為df的列表,每個df使用一行,好, split 按行名,它在R中必須是唯一的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM