Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr对分组后的多个回归模型进行拟合,并将所得模型应用于测试集_R_Dplyr_Broom - Fatal编程技术网

使用dplyr对分组后的多个回归模型进行拟合,并将所得模型应用于测试集

使用dplyr对分组后的多个回归模型进行拟合,并将所得模型应用于测试集,r,dplyr,broom,R,Dplyr,Broom,我有一个大的数据集,我想根据案例生命周期中某个特定变量的值对其进行分区,然后在每个分区上运行逻辑回归。根据中@tchakravarty的回答,我编写了以下代码: lifetimemodels = data %>% group_by(lifetime) %>% sample_frac(0.7)%>% do(lifeModel = glm(churn ~., x= TRUE, family=binomial(link='logit'), data = .)) 我现在的问

我有一个大的数据集,我想根据案例生命周期中某个特定变量的值对其进行分区,然后在每个分区上运行逻辑回归。根据中@tchakravarty的回答,我编写了以下代码:

lifetimemodels = data %>% group_by(lifetime) %>% sample_frac(0.7)%>%
     do(lifeModel = glm(churn ~., x= TRUE, family=binomial(link='logit'), data = .))
我现在的问题是,我如何使用得到的逻辑模型计算剩余数据的AUC(未选择的0.3部分,应再次按寿命分组)

提前多谢

您可以调整dplyr方法以使用tidyr和purrr框架。您可以查看分组/嵌套以及mutate和map函数,以创建列表框架来存储工作流的各个部分

您正在寻找的测试/培训分离是modelr的一部分,modelr是一个用于在purrr框架内协助建模的包。特别是cross_vmc和cross_vkfold函数

一个使用mtcars的玩具示例仅用于说明框架

library(dplyr)
library(tidyr)
library(purrr)
library(modelr)

analysis <- mtcars %>%
  nest(-cyl) %>%
  unnest(map(data, ~crossv_mc(.x, 1, test = 0.3))) %>%
  mutate(model = map(train, ~lm(mpg ~ wt, data = .x))) %>%
  mutate(pred = map2(model, train, predict)) %>%
  mutate(error = map2_dbl(model, test, rmse))
这:

乘地铁 嵌套到名为data by cyl的列表框中 通过将crossv_mc映射到每个元素,然后使用unnest生成测试和训练列表列,将每个数据分离到训练集中。 将lm模型映射到每个列车,并将其存储在模型中 将预测函数映射到模型,并在pred中进行训练和存储 将rmse函数映射到模型和测试集,并存储在错误中。 可能有比我更熟悉工作流的用户,因此请更正/详细说明。

您可以调整dplyr方法以使用tidyr和purrr框架。您可以查看分组/嵌套以及mutate和map函数,以创建列表框架来存储工作流的各个部分

您正在寻找的测试/培训分离是modelr的一部分,modelr是一个用于在purrr框架内协助建模的包。特别是cross_vmc和cross_vkfold函数

一个使用mtcars的玩具示例仅用于说明框架

library(dplyr)
library(tidyr)
library(purrr)
library(modelr)

analysis <- mtcars %>%
  nest(-cyl) %>%
  unnest(map(data, ~crossv_mc(.x, 1, test = 0.3))) %>%
  mutate(model = map(train, ~lm(mpg ~ wt, data = .x))) %>%
  mutate(pred = map2(model, train, predict)) %>%
  mutate(error = map2_dbl(model, test, rmse))
这:

乘地铁 嵌套到名为data by cyl的列表框中 通过将crossv_mc映射到每个元素,然后使用unnest生成测试和训练列表列,将每个数据分离到训练集中。 将lm模型映射到每个列车,并将其存储在模型中 将预测函数映射到模型,并在pred中进行训练和存储 将rmse函数映射到模型和测试集,并存储在错误中。
可能有比我更熟悉工作流的用户,所以请更正/详细说明。

引入一列training=samplecT,F,size=n,prob=c0.3,0.7,replace=TRUE,然后保留glm中training=TRUE的行。引入一列training=samplecT,F,size=n,prob=c0.3,0.7,replace=TRUE,然后从glm中保留这些行,其中training==TRUE。感谢您提供了非常好的答案!我实际上是想得到一个AUC,因为我有一个分类问题。你知道如何获得AUC而不是rmse吗?我在一个数据集中这样做的方式是使用AUC软件包,但我不知道是否可以轻松地将其应用于您的解决方案:p1它需要一个unnestmaptestSet、~select.x,dependentvariable,然后重复mutatevar=mapcol1,col2,有趣地应用AUC度量。我现在有点迷茫。在您的解决方案的pred步骤之后是最新的吗?为了你有趣的论点,我可以输入auc吗?你需要扩展这个链,或者从分析开始,应用你的auc度量。了解如何以这种方式使用tidyr和purrr,非常感谢您的参考。我将代码升级到以下级别:分析%nest lifetime%>%unnestmapdata、~crossv_mc.x,1,test=0.3%>%mutatemodel=maptrain、~glmchurn~,x=TRUE,family=binomiallink='logit',data=.x%>%mutatepred=map2model,test,predict,type=response%>%unnestmaptest、~select.x,dependentvariable,但当我尝试取消测试时,为了选择因变量,我得到了以下错误:错误:没有适用于“选择”的方法应用于重采样类的对象。有什么想法吗?谢谢你的回答!我实际上是想得到一个AUC,因为我有一个分类问题。你知道如何获得AUC而不是rmse吗?我在一个数据集中这样做的方式是使用AUC软件包,但我不知道是否可以轻松地将其应用于您的解决方案:p1它需要一个unnestmaptestSet、~select.x,dependentvariable,然后重复mutatevar=mapcol1,col2,有趣地应用AUC度量。我现在有点迷茫。在您的解决方案的pred步骤之后是最新的吗?为了你有趣的论点,我可以输入auc吗?你需要扩展这个链,或者从分析开始,应用你的auc度量。了解如何以这种方式使用tidyr和purrr,非常感谢您的参考。我将代码升级到以下级别:分析%nest lifetime%>%unnestmapdata、~crossv_mc.x,1,test=0.3%>%mutatemodel=maptrain、~glmchurn~,x=TRUE,family=binomiallink='logit',data=.x%>%mutatepred=map2model,test,predict,typ e=response%>%unnestmaptest,~select.x,dependentvariable,但是当我尝试取消测试时,为了选择因变量,我得到了以下错误:错误:没有适用于类重采样对象的“select_”方法。有什么想法吗?