问题描述
我有一个包含不同线性回归总结的列表。我想提取线性回归的所有元素的系数和 p 值,并将它们放入一个数据框(每个 lm 元素一个数据框)。
例如,要提取我正在使用的截距的系数:
func_coef_intercept <- function(x) list[[x]][["coefficients"]][1,1]
coef_intercept <- lapply(list,func_coef_intercept)
提取 p 值:
func_coef_intercept <- function(x) list[[x]][["coefficients"]][1,4]
pvalue_intercept <- lapply(list,func_coef_intercept)
但我收到此错误
Error in list[[x]] : invalid subscript type 'list'
如何提取线性回归的所有元素的系数?
这是列表前两个摘要的示例:
list(`1` = structure(list(call = lm(formula = a ~ b * c + d),terms = a ~ b * c + d,residuals = structure(c(`1002` = 0.0118681256952383,`1007` = 0.0419256575878256,`1008` = -0.0963910775101885,`1011` = 0.22304807403332,`1012` = -0.167863579846024,`1013` = -0.0613889863570078,`1014` = 0.0357270798843175,`1015` = -0.172203913653826,`1018` = -0.156689137194,`1019` = -0.129444770996805,`1021` = -0.175019531525519,`1023` = 0.146466383569852,`1025` = 0.110813999746634,`1031` = -0.0920873415380558,`1033` = 0.000742586091925349,`1034` = 0.181961137021771,`1035` = 0.146326238597575,`1036` = -0.118020186381677,`1037` = -0.0739688858000257,`1041` = -0.0423164099136734,`2001` = 0.157510857198006,`2002` = 0.07637420233757,`2003` = 0.155257829487471,`2004` = 0.0572168560821465,`2006` = -0.208582520792082,`2007` = -0.0177446511035586,`2010` = -0.124058959053879,`2011` = 0.0418804695467237,`2012` = 0.099707284045702,`2013` = 0.0359360286074771,`2014` = 0.0443211605035362,`2016` = -0.13800300853893,`2018` = -0.0498636395982077,`3001` = 0.0792281291001036,`3002` = 0.0802210096384973,`3004` = 0.121633097720208,`3005` = 0.0565084671537361,`3006` = -0.0579659743139385,`4001` = 0.0156785346591978,`4006` = 0.0993721443703216,`4007` = -0.183195864294347,`5001` = -0.0122235224182978,`5003` = -0.183684629956499,`5012` = -0.16755820464269,`5014` = 0.143741030413913,`5018` = -0.141967798211089,`5021` = 0.0306606708795011,`5027` = 0.179594762371493,`5028` = 0.120975533264822,`5029` = -0.129648450802276,`5031` = 0.0509203479149378,`6001` = 0.247698053357657,`6003` = -0.0067528112519499,`6005` = -0.123955921792593,`6008` = -0.0504640448301967,`6011` = 0.142375204051896,`6012` = 0.136298047052455,`6015` = 0.141367201888835,`6017` = -0.0560805093001182,`6018` = -0.146050167802696,`6020` = -0.229903190067814,`6022` = 0.147507242415981,`6025` = -0.0335256628186052,`6026` = -0.0806432468946914,`7008` = 0.056379262737679,`7010` = 0.0253746420351423,`8003` = 0.0693474302565438,`8006` = -0.0536899517817604,`9001` = 0.0475058919529396,`9004` = 0.0543135016213903,`9005` = 0.0213019529348318,`9011` = -0.126252808227583,`9013` = -0.0278767686185694
),.Dim = 73L,.Dimnames = list(c("1002","1007","1008","1011","1012","1013","1014","1015","1018","1019","1021","1023","1025","1031","1033","1034","1035","1036","1037","1041","2001","2002","2003","2004","2006","2007","2010","2011","2012","2013","2014","2016","2018","3001","3002","3004","3005","3006","4001","4006","4007","5001","5003","5012","5014","5018","5021","5027","5028","5029","5031","6001","6003","6005","6008","6011","6012","6015","6017","6018","6020","6022","6025","6026","7008","7010","8003","8006","9001","9004","9005","9011","9013"))),coefficients = structure(c(-0.00397153563921837,0.341578798274534,-0.139319915370845,0.000896071157731704,1.09794729645418,0.015147052709038,0.092737093652735,0.145373948252719,0.000447094773201659,0.963032924564176,-0.262198575228343,3.68330281681693,-0.958355448451128,2.00420852902152,1.14009320808119,0.793961023095372,0.000457621377693468,0.341278649254439,0.0490327040240946,0.25824730720917),.Dim = 5:4,.Dimnames = list(
c("(Intercept)","b","c","d","b:c"),c("Estimate","Std. Error","t value","Pr(>|t|)"))),aliased = c(`(Intercept)` = FALSE,b = FALSE,c = FALSE,d = FALSE,`b:c` = FALSE),sigma = 0.12089767430346,df = c(5L,68L,5L),r.squared = 0.230894512279432,adj.r.squared = 0.185653013001751,fstatistic = c(value = 5.10359992409318,numdf = 4,dendf = 68
),cov.unscaled = structure(c(0.0156971345336508,0.00228620672711246,-0.0177546074340744,-0.000138674927777783,0.00210552637725186,0.58839783944054,-0.00305591977935581,-5.18791289583915e-05,-0.586754865532256,1.44589673996892,0.00034158306687199,-8.28386215614676,1.36761322730522e-05,-0.000381233934849903,63.4521551547907),.Dim = c(5L,5L
),.Dimnames = list(c("(Intercept)","b:c"
),c("(Intercept)","b:c")))),class = "summary.lm"),`10005` = structure(list(call = lm(formula = a ~ b * c +
d),residuals = structure(c(`1002` = 0.0187421617609578,`1007` = -0.188448583704918,`1008` = 0.153893088127834,`1011` = -0.0457630912535438,`1012` = 0.0404843307903381,`1013` = 0.130151895395599,`1014` = 0.114287043586286,`1015` = 0.113657175701791,`1018` = -0.0688198422536628,`1019` = -0.300487949059847,`1021` = 0.427885578924476,`1023` = 0.114428274713097,`1025` = -0.278157663045114,`1031` = 0.213947755501182,`1033` = -0.0504476261677984,`1034` = 0.0699549135624495,`1035` = -0.0849815620672379,`1036` = -0.137089410376454,`1037` = 0.450333414230324,`1041` = -0.163440857416823,`2001` = -0.00124584145399394,`2002` = 0.391009123413889,`2003` = -0.306817622497255,`2004` = -0.0509569271622155,`2006` = -0.356474495908554,`2007` = -0.0872195400782593,`2010` = 0.159666418255182,`2011` = -0.015748357988549,`2012` = -0.419884099549585,`2013` = 0.0182516508985773,`2014` = -0.382996383712274,`2016` = -0.172159567245906,`2018` = 0.0445901611973861,`3001` = 0.128229814452709,`3002` = 0.255302353394398,`3004` = -0.241955175096404,`3005` = -0.575641150113639,`3006` = -0.0910796612018084,`4001` = -0.0620198072407937,`4006` = 0.143912701831265,`4007` = 0.0808817918985259,`5001` = -0.187192834816796,`5003` = 0.568476264401867,`5012` = 0.300702938570628,`5014` = -0.4560350408085,`5018` = -0.00848653960194647,`5021` = 0.00957704877249509,`5027` = -0.24110496425874,`5028` = -0.345492109461339,`5029` = 0.249405987254773,`5031` = 0.0320913446994224,`6001` = -0.0351426453859569,`6003` = 0.335221232977152,`6005` = -0.0825636357399562,`6008` = 0.0244166685815588,`6011` = -0.228748294884997,`6012` = -0.0953103316656939,`6015` = 0.179929598504696,`6017` = 0.240092861975075,`6018` = 0.236650982207435,`6020` = 0.34790759483171,`6022` = 0.180188611758191,`6025` = 0.199766542093749,`6026` = 0.189429952399034,`7008` = -0.0556828704790727,`7010` = -0.0208925809968781,`8003` = -0.172382119699295,`8006` = -0.0616931970974188,`9001` = 0.0628803668679693,`9004` = -0.241658058098228,`9005` = -0.0935380282058113,`9011` = 0.348007141737809,`9013` = -0.166596319474566),.Dimnames = list(
c("1002",coefficients = structure(c(-0.0215512238688343,0.882664068869997,0.112689386248365,3.18086709307044e-05,0.323131323928193,0.0331228590383073,0.0930593548886002,0.0622430065698782,0.000869130701922098,0.204375349678183,-0.650645037733908,9.48495795964435,1.81047466146823,0.036598259456672,1.58106799296983,0.517468135410013,4.52946909054405e-14,0.0746401933888581,0.970912559215124,0.118503083862495),sigma = 0.235512709292802,r.squared = 0.658368394847432,adj.r.squared = 0.638272418073752,fstatistic = c(value = 32.7612040092369,dendf = 68
),cov.unscaled = structure(c(0.019780029532837,-0.00791428965948656,-0.0170945331340147,-0.000152915994786481,0.0135606288377018,0.156131804131347,0.0104146731175132,-2.91371264679668e-06,-0.14991987347644,0.0698477511652982,0.000105323084392133,0.0396223016159103,1.36188829142178e-05,-2.24663759602837e-05,0.753057831011354),class = "summary.lm"))
解决方法
将您的功能更改为 -
func_coef_intercept <- function(x) x[["coefficients"]][1,1]
然后你就可以使用你的代码了。 -
coef_intercept <- lapply(list,func_coef_intercept)