R语言循环抽样回归求RMSE并存储至数据框求助
伪代码缺失的细节及修正建议
以下是你提供的伪代码中缺失的关键细节:
- 空数据框初始化错误:R中没有
emptyDataFrame{}这种语法,需要明确指定列名和数据类型来创建空数据框,比如用于存储迭代次数和对应RMSE的结构。 - 抽样结果未赋值:
sample_n抽样后没有将结果保存为新的数据集对象,后续模型无法使用抽样后的数据。 - 模型使用原数据集而非抽样数据:
lm函数依然调用原数据集df,抽样操作完全失去意义,应该传入抽样后的数据集。 - 未生成预测值
y_pred:伪代码中直接使用y_pred但没有通过模型生成预测结果的步骤。 - RMSE计算语法错误:
- 括号配对错误,多了一个右括号;
- 未对残差(预测值与真实值的差)先平方再取平均,而是先取差的均值再平方,逻辑错误;
- 未指定
y是抽样数据中的真实值,直接使用原数据的y会导致计算错误。
- 循环代码块未包裹:R的
for循环需要用大括号{}将循环内的所有代码包裹起来,伪代码缺少这个结构。 - 抽样参数
n未定义:sample_n中的样本量n需要提前赋值定义。 - 未加载依赖包:
sample_n是dplyr包中的函数,需要先加载该包才能调用。 - 未将每次计算的RMSE存入数据框:伪代码只定义了空数据框,但没有在每次循环中把计算得到的RMSE追加进去。
修正后的完整R代码示例
# 加载依赖包 library(dplyr) # 定义参数 k <- 100 # 抽样次数 sample_size <- 500 # 每次抽样的样本量 # 初始化存储结果的数据框 rmse_df <- data.frame(iteration = integer(k), rmse_value = numeric(k)) # 循环执行抽样、建模、计算RMSE for (i in 1:k) { # 抽样(有放回) sampled_df <- sample_n(df, size = sample_size, replace = TRUE) # 拟合线性回归模型 model <- lm(y ~ ., data = sampled_df) # 生成预测值 y_pred <- predict(model) # 计算RMSE current_rmse <- sqrt(mean((y_pred - sampled_df$y)^2)) # 将结果存入数据框 rmse_df[i, ] <- list(iteration = i, rmse_value = current_rmse) }
内容的提问来源于stack exchange,提问作者Zeta10
相关产品推荐
相关产品推荐

