首页 文章

插入符号:使用train()执行分组回归

提问于
浏览
0

希望这不是一个完全愚蠢的问题 . 我有一个数据集 df, n = 2228, p = 19 ,描述了 5 马的品种特征 . 我想通过首先将数据分成 trainingtest ,将连续变量 price 建模为每个 breed 的其他17个预测变量(甚至是分类和连续的混合)的函数 .

library(tidyverse)
library(caret)
library(glmnet)
# pre- processing reveals no undo correlation, linear dependency or near
# zero variance veriables
train <- df %>% group_by(breed) %>% sample_frac(size = 2/3) %>% droplevels()
test <- anti_join(df, train) %>% droplevels()
# I imagine I should be somehow able to do this in the following step but can't
# figure it out
model <- train(price ~ ., data = train, method = "glmnet")
test$pred <- predict(model, newdata = test)

据我所知,我没有问题按 breed 拆分数据(参见上面的代码) . 但是,我无法弄清楚如何拟合按 breed 分组的模型 . 我想做的是类似于包 nlme 中的以下内容,即 lmList(price ~ . |breed, data = df)

3 回答

  • 0

    我想你想做的就是这样

    horse_typex <- df %>% filter(breed == typex)
    

    对于每种类型的马,然后将它们分成测试和训练集 .

    如果您希望进行线性回归,也许您可能希望对价格的对数进行建模,因为它可能存在偏差 .

  • 0

    尝试:

    models <- dlply(df, "breed", function(d_breed) 
      train(price ~ ., data = d_breed, method = "glmnet"))
    
  • 1

    我建议尝试使用 purrr

    library(purrr)
    
    models <- train %>% 
                split(.$breed) %>% 
                map(~train(.$price ~ ., data = ., method = "glmnet"))
    

    dplyr

    models <- train %>% 
                group_by(breed) %>% 
                do(train(price ~ ., data = ., method = "glmnet"))
    

    很难知道这是否有效,但值得一试 .

相关问题