Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
R 通过不同的数据帧进行循环回归_R_Loops_Cross Validation_Sapply_Training Data - Fatal编程技术网

R 通过不同的数据帧进行循环回归

R 通过不同的数据帧进行循环回归,r,loops,cross-validation,sapply,training-data,R,Loops,Cross Validation,Sapply,Training Data,目标是在不同的训练数据框架上进行多元logit回归,然后评估各自测试数据集的性能 首先,我们从df创建多(5)个随机采样的数据帧: for(i in 1:5) { nr <- paste("random_df", i, sep = "_") assign(nr, random_df[sample(nrow(df)),]) } 非常感谢您的帮助。我很确定您误解了lappy的使用和输出。它在输入上循环并创建一个对象列表,这些对象属于您使用的函数输出的典型类 如果我读对了你的代码,这部分 fo

目标是在不同的训练数据框架上进行多元logit回归,然后评估各自测试数据集的性能

首先,我们从
df
创建多(5)个随机采样的数据帧:

for(i in 1:5) {
nr <- paste("random_df", i, sep = "_")
assign(nr, random_df[sample(nrow(df)),])
}

非常感谢您的帮助。

我很确定您误解了
lappy
的使用和输出。它在输入上循环并创建一个对象列表,这些对象属于您使用的函数输出的典型类

如果我读对了你的代码,这部分

for(i in 1:5) {
  index <- paste("lr_train", i, sep = "_")
  assign(index, lapply(lr_list, function(x) {glm(y ~ x1 + x2, data=x, 
  subset=train, family=binomial)}))
}

请注意,由于缺少工作数据示例,这一点未经测试。

我很确定您误解了
lappy
的使用和输出。它在输入上循环并创建一个对象列表,这些对象属于您使用的函数输出的典型类

如果我读对了你的代码,这部分

for(i in 1:5) {
  index <- paste("lr_train", i, sep = "_")
  assign(index, lapply(lr_list, function(x) {glm(y ~ x1 + x2, data=x, 
  subset=train, family=binomial)}))
}

请注意,由于缺少一个工作数据示例,这是未经测试的。

不久前,我学习了使用
dplyr
purr
软件包的技巧。这是关于使用嵌套的
数据。frame

nested_df <- tibble(subdf = 1:5) %>% # Choose number of 'random_df' 
  rowwise() %>% 
  mutate(data = list(df[sample(nrow(df)),])) %>% # create a list of random data.frames within our data.frame
  ungroup() %>% 
  mutate(model = map(data, ~ glm(y ~ x1 + x2, data = .x, 
                                     subset = train, family = binomial))) # iterate with map throug all of data.frame's in column data


nested_df

  subdf                   data     model
  <int>                 <list>    <list>
1     1 <data.frame [100 x 3]> <S3: glm>
2     2 <data.frame [100 x 3]> <S3: glm>
3     3 <data.frame [100 x 3]> <S3: glm>
4     4 <data.frame [100 x 3]> <S3: glm>
5     5 <data.frame [100 x 3]> <S3: glm>
输出来自我的快速模拟
df

df <- data.frame(y = rnorm(100, 100),
                 x1 = sample(letters[1:3], size = 100, replace = T),
                 x2 = runif(100 ,0, 1000)) %>% 
  mutate(y = y/max(y))
df%
突变(y=y/最大值(y))

你可以用类似结构的
mutate()
map()
对每个glm进行预测。不久前,我学会了使用
dplyr
purr
包的技巧。这是关于使用嵌套的
数据。frame

nested_df <- tibble(subdf = 1:5) %>% # Choose number of 'random_df' 
  rowwise() %>% 
  mutate(data = list(df[sample(nrow(df)),])) %>% # create a list of random data.frames within our data.frame
  ungroup() %>% 
  mutate(model = map(data, ~ glm(y ~ x1 + x2, data = .x, 
                                     subset = train, family = binomial))) # iterate with map throug all of data.frame's in column data


nested_df

  subdf                   data     model
  <int>                 <list>    <list>
1     1 <data.frame [100 x 3]> <S3: glm>
2     2 <data.frame [100 x 3]> <S3: glm>
3     3 <data.frame [100 x 3]> <S3: glm>
4     4 <data.frame [100 x 3]> <S3: glm>
5     5 <data.frame [100 x 3]> <S3: glm>
输出来自我的快速模拟
df

df <- data.frame(y = rnorm(100, 100),
                 x1 = sample(letters[1:3], size = 100, replace = T),
                 x2 = runif(100 ,0, 1000)) %>% 
  mutate(y = y/max(y))
df%
突变(y=y/最大值(y))

您可以使用类似结构的
mutate()
map()

对每个glm进行预测。您应该查看
modeler
包。这使很多事情变得更容易:谢谢@AndrewBrēza,您能告诉我,不仅
resample
而且还可以使用
modeler
包评估多个列车和测试集上的模型?您应该查看
modeler
package。这让很多事情变得更简单:谢谢@AndrewBrēza,你能给我一个提示,说明如何不仅对
重新采样
,而且使用
modelr
包对多个训练集和测试集上的模型进行评估吗?你需要使用map2/pmap进行预测…%%>%mutate(pred=map2(model,data,predict))
map
属于哪个包?@Dima在我的回答中犯了一个错误,package
purrr
。您需要使用map2/pmap进行预测…%%>%mutate(pred=map2(model,data,predict))
map
属于哪个软件包?@Dima在我的回答中犯了一个错误,package
purr
。谢谢@Leo P。虽然未经测试,但效果很好。你说得对,我误解了拉皮。我们继续使用:
lr_estim Thank@Leo P创建因子。尽管未经测试,但效果良好。你说得对,我误解了拉皮。我们继续使用:
lr\u estim创建一个因子
lr_test <- mapply(function(x, y) predict(x, y[test, ], type = "response"), lr_train, lr_list)
nested_df <- tibble(subdf = 1:5) %>% # Choose number of 'random_df' 
  rowwise() %>% 
  mutate(data = list(df[sample(nrow(df)),])) %>% # create a list of random data.frames within our data.frame
  ungroup() %>% 
  mutate(model = map(data, ~ glm(y ~ x1 + x2, data = .x, 
                                     subset = train, family = binomial))) # iterate with map throug all of data.frame's in column data


nested_df

  subdf                   data     model
  <int>                 <list>    <list>
1     1 <data.frame [100 x 3]> <S3: glm>
2     2 <data.frame [100 x 3]> <S3: glm>
3     3 <data.frame [100 x 3]> <S3: glm>
4     4 <data.frame [100 x 3]> <S3: glm>
5     5 <data.frame [100 x 3]> <S3: glm>
nested_df$model[[1]]

Call:  glm(formula = y ~ x1 + x2, family = binomial, data = .x, subset = train)

Coefficients:
(Intercept)          x1b          x1c           x2  
  3.467e+00   -5.085e-03    1.300e-02    9.368e-05  

Degrees of Freedom: 79 Total (i.e. Null);  76 Residual
Null Deviance:      0.3428 
Residual Deviance: 0.3408   AIC: 12.7
df <- data.frame(y = rnorm(100, 100),
                 x1 = sample(letters[1:3], size = 100, replace = T),
                 x2 = runif(100 ,0, 1000)) %>% 
  mutate(y = y/max(y))