【发布时间】:2019-09-27 04:44:08
【问题描述】:
我使用mtcars 数据来解释我的问题。例如,我试图以mpg 作为因变量来估计变量cyl 的回归系数,并通过包含其他其他变量来评估系数的变化。
第一步:lm(mpg ~ cyl, data = df) 得到cyl 的粗系数
步骤 2:在步骤 1 中将其他每个变量一次添加到模型中,选择系数变化 (%) 为 cyl 的最大变量,并将该变量添加到上述模型中。
步骤3:重复步骤2,将剩余变量中的每个变量添加到上面的模型中,再次找到'cyl'系数变化最大的那个;
步骤 ....:重复直到所有变量都包含在模型中。
library(dplyr)
df <- mtcars %>% select(mpg, cyl, disp, hp, wt)
my_fun1 <- function(df=data) {
out_df <- data.frame(matrix(ncol = 0, nrow = (length(df) - 1)))
md_1 <- lm(mpg ~ cyl, data = df)
out_df$Models[1] <- "Crude"
out_df$Estimate[1] <- md_1$coefficients[2]
pre_change <- 0
to_rm <- 0
for (k in 2:(length(df)-1)) {
for (i in 3:length(df)) {
if (!i %in% to_rm) {
md_tmp <- update(md_1, . ~ . + df[[i]])
change <- abs(100*(md_tmp$coefficients[2] - md_1$coefficients[2])/md_1$coefficients[2])
dif <- md_tmp$coefficients[2] - md_1$coefficients[2]
if (change >= pre_change) {
out_df$Estimate[k] <- md_tmp$coefficients[2]
out_df$Models[k] <- paste("+", names(df)[[i]])
out_df$Diff[k] <- md_tmp$coefficients[2] - md_1$coefficients[2]
picked <- names(df)[[i]]
picked_i = i
pre_change <- out_df$`Change (%)`[k] <- change
}
}
}
to_rm <- c(to_rm, picked_i)
md_1 <- update(md_1, .~. + eval(as.name(paste(picked))))
pre_change = 0
}
out_df
}
my_fun1(df = df)
在上面运行之后,我希望在以下格式的每个步骤中得到cyl 的回归系数。
Models Estimate Diff Change (%)
1 Crude -2.875790 NA NA
2 + wt -1.507795 1.367995 47.56937
3 + hp -1.227420 0.280375 18.59504
4 + disp -1.227420 1.037274 45.80194
但是,第 1 步和第 2 步提供了正确的结果,第 3 步和第 4 步不正确。任何建议,将不胜感激。
【问题讨论】:
标签: r