R 如何访问其他对象列表中lm()对象的名称?

R 如何访问其他对象列表中lm()对象的名称?,r,indexing,linear-regression,R,Indexing,Linear Regression,我有一些难以控制的数据,我试图用一些不同的线性模型来建模,我给了它们不同的名字。然后我创建了一个名为“比较拟合”的数据框。我能够使用下面的代码存储来自各种模型的一些更相关的输出 for(i in 1:length(regressionmodels.listed)) { comparedfits[i, 2] = summary(regressionmodels.listed[[i]])$df[2] comparedfits[i, 3] = summary(regressionmodels.

我有一些难以控制的数据,我试图用一些不同的线性模型来建模,我给了它们不同的名字。然后我创建了一个名为“比较拟合”的数据框。我能够使用下面的代码存储来自各种模型的一些更相关的输出

for(i in 1:length(regressionmodels.listed))
{
  comparedfits[i, 2] = summary(regressionmodels.listed[[i]])$df[2]
  comparedfits[i, 3] = summary(regressionmodels.listed[[i]])$r.squared 
  comparedfits[i, 4] = summary(modelnow)$adj.r.squared 
#See code snippet below for explanation  
#name = deparse(get(substitute(regressionmodels.listed[[i]])))
#names_models[i] = name
}

“列出的回归模型”是一个类型为list的对象,我仅使用以下方法创建:

regressionmodels.listed <- list(fit1, fit2 ...etc)
请注意,如果我在一个单独安装的型号上运行deparse代码,比如fit1,它确实可以工作。我只是无法让它与已安装型号列表中的元素一起工作。这显然是一种“很好拥有”的东西,但由于我将比较10个或更多的模型,如果我能找到一种方法来做到这一点,并将其添加到上面的其他数据框中,我的生活将变得更加轻松

编辑这是regressionmodels.listed的外观:

regressionmodels.listed <- list(lmobject1, lmobject2, lmobject3)


regressionmodels.listed我想出了这个快速解决方案。您希望将模型列表中的一些摘要统计信息(例如
lm()
中的线性模型)存储在
data.frame
中。我将此对象称为
result
,它的维度为
NxP
,其中
N
是您存储在列表中的模型数,
P
是您要收集的统计数据数。在这种情况下,d.o.f.
P=3
,R平方和调整后的R平方

这里我使用的是内置数据
mtcars

data("mtcars")
mod1 = lm( mpg ~ hp, data = mtcars )
mod2 = lm( mpg ~ wt, data = mtcars )
mod3 = lm( mpg ~ qsec, data = mtcars )

regressionmodels.listed = list( mod1, mod2, mod3 )
N = length( regressionmodels.listed )

results = data.frame( df = rep( NA_integer_, N ),
                      r.squared = rep( NA_real_, N ),
                      adj.r.squared = rep( NA_real_, N ) )

for ( i_mod in seq_along( regressionmodels.listed ) ) {

  results[ i_mod, "df" ] = regressionmodels.listed[[ i_mod ]]$df
  results[ i_mod, "r.squared" ] = summary(regressionmodels.listed[[ i_mod ]])$r.squared
  results[ i_mod, "adj.r.squared" ] = summary(regressionmodels.listed[[ i_mod ]])$adj.r.squared

}
这是你想要的吗?
如果是这样,那么用您的模型替换
mod*
,您应该会没事。

我想出了这个快速解决方案。您希望将模型列表中的一些摘要统计信息(例如
lm()
中的线性模型)存储在
data.frame
中。我将此对象称为
result
,它的维度为
NxP
,其中
N
是您存储在列表中的模型数,
P
是您要收集的统计数据数。在这种情况下,d.o.f.
P=3
,R平方和调整后的R平方

这里我使用的是内置数据
mtcars

data("mtcars")
mod1 = lm( mpg ~ hp, data = mtcars )
mod2 = lm( mpg ~ wt, data = mtcars )
mod3 = lm( mpg ~ qsec, data = mtcars )

regressionmodels.listed = list( mod1, mod2, mod3 )
N = length( regressionmodels.listed )

results = data.frame( df = rep( NA_integer_, N ),
                      r.squared = rep( NA_real_, N ),
                      adj.r.squared = rep( NA_real_, N ) )

for ( i_mod in seq_along( regressionmodels.listed ) ) {

  results[ i_mod, "df" ] = regressionmodels.listed[[ i_mod ]]$df
  results[ i_mod, "r.squared" ] = summary(regressionmodels.listed[[ i_mod ]])$r.squared
  results[ i_mod, "adj.r.squared" ] = summary(regressionmodels.listed[[ i_mod ]])$adj.r.squared

}
这是你想要的吗?
如果是这样,那么用您的模型替换
mod*
,您应该会没事。

您的模型列表没有命名,因此无法返回“lmobject1”等,一种方法是在开始时命名它们:

regressionmodels.listed <- list(lmobject1, lmobject2, lmobject3)
names(regressionmodels.listed) = c("lmobject1","lmobject2","lmobject3")
#or
names(regressionmodels.listed) = paste0("lmobject",1:length(regressionmodels.listed))

namesofmodels = names(regressionmodels.listed)
regressionmodels.listed%mutate(name=paste0(“model”,1:n()),stats=map(models,glance))
#一个tibble:3x3
模型名称统计
1模型1
2模式2
3模式3
我们可以忽略这一点:

res %>% unnest(cols=stats)

# A tibble: 3 x 13
  models names r.squared adj.r.squared sigma statistic  p.value    df logLik
  <list> <chr>     <dbl>         <dbl> <dbl>     <dbl>    <dbl> <int>  <dbl>
1 <lm>   mode…     0.726         0.717  3.21      79.6 6.11e-10     2  -81.7
2 <lm>   mode…     0.718         0.709  3.25      76.5 9.38e-10     2  -82.1
3 <lm>   mode…     0.602         0.589  3.86      45.5 1.79e- 7     2  -87.6
# … with 4 more variables: AIC <dbl>, BIC <dbl>, deviance <dbl>,
#   df.residual <int>
res%>%unest(cols=stats)
#一个tibble:3x13
模型名称r.squared adj.r.squared sigma统计p.value df logLik
1模式…0.726 0.717 3.21 79.6 6.11e-10 2-81.7
2模式…0.718 0.709 3.25 76.5 9.38e-10 2-82.1
3模式…0.602 0.589 3.86 45.5 1.79e-72-87.6
#…还有4个变量:AIC、BIC、偏差、,
#残差
并显示您喜欢的列:

res %>% unnest(cols=stats) %>% select(names,df,r.squared,adj.r.squared)
# A tibble: 3 x 4
  names     df r.squared adj.r.squared
  <chr>  <int>     <dbl>         <dbl>
1 model1     2     0.726         0.717
2 model2     2     0.718         0.709
3 model3     2     0.602         0.589
res%%>%unest(cols=stats)%%>%select(名称、df、r.squared、adj.r.squared)
#一个tibble:3x4
名称r.平方adj.r.平方
1型号12 0.726 0.717
2型号2 0.718 0.709
3型号3 0.602 0.589

您的模型列表未命名,因此无法返回“lmobject1”等,一种方法是在开始时命名它们:

regressionmodels.listed <- list(lmobject1, lmobject2, lmobject3)
names(regressionmodels.listed) = c("lmobject1","lmobject2","lmobject3")
#or
names(regressionmodels.listed) = paste0("lmobject",1:length(regressionmodels.listed))

namesofmodels = names(regressionmodels.listed)
regressionmodels.listed%mutate(name=paste0(“model”,1:n()),stats=map(models,glance))
#一个tibble:3x3
模型名称统计
1模型1
2模式2
3模式3
我们可以忽略这一点:

res %>% unnest(cols=stats)

# A tibble: 3 x 13
  models names r.squared adj.r.squared sigma statistic  p.value    df logLik
  <list> <chr>     <dbl>         <dbl> <dbl>     <dbl>    <dbl> <int>  <dbl>
1 <lm>   mode…     0.726         0.717  3.21      79.6 6.11e-10     2  -81.7
2 <lm>   mode…     0.718         0.709  3.25      76.5 9.38e-10     2  -82.1
3 <lm>   mode…     0.602         0.589  3.86      45.5 1.79e- 7     2  -87.6
# … with 4 more variables: AIC <dbl>, BIC <dbl>, deviance <dbl>,
#   df.residual <int>
res%>%unest(cols=stats)
#一个tibble:3x13
模型名称r.squared adj.r.squared sigma统计p.value df logLik
1模式…0.726 0.717 3.21 79.6 6.11e-10 2-81.7
2模式…0.718 0.709 3.25 76.5 9.38e-10 2-82.1
3模式…0.602 0.589 3.86 45.5 1.79e-72-87.6
#…还有4个变量:AIC、BIC、偏差、,
#残差
并显示您喜欢的列:

res %>% unnest(cols=stats) %>% select(names,df,r.squared,adj.r.squared)
# A tibble: 3 x 4
  names     df r.squared adj.r.squared
  <chr>  <int>     <dbl>         <dbl>
1 model1     2     0.726         0.717
2 model2     2     0.718         0.709
3 model3     2     0.602         0.589
res%%>%unest(cols=stats)%%>%select(名称、df、r.squared、adj.r.squared)
#一个tibble:3x4
名称r.平方adj.r.平方
1型号12 0.726 0.717
2型号2 0.718 0.709
3型号3 0.602 0.589

如果没有可复制的示例,很难为您提供帮助。您能否提供有关回归模型的更多详细信息。列出的
:它是模型对象的列表,例如lm、glm等?您能否使其更具可复制性(即可以复制和粘贴以测试可能的解决方案)?使用一些内置的制作“虚拟”模型。我已经编辑并展示了我是如何制作这个列表的。如果没有一个可复制的例子,很难帮助你。您能否提供有关回归模型的更多详细信息。列出的:它是模型对象的列表,例如lm、glm等?您能否使其更具可复制性(即可以复制和粘贴以测试可能的解决方案)?使用一些内置来制作“虚拟”模型。我已经编辑并展示了我是如何制作这个列表的。谢谢你的建议!谢谢你的建议!