我花了几天时间寻找能够满足 R 中所有标准 OLS 假设(正态分布、同方差性、无多重共线性)的最佳模型,但是由于有 12 个变量,因此不可能找到最佳的 var 组合。所以我试图创建一个脚本来自动化这个过程。
这里是计算的示例代码:
x1 <- runif(100, 0, 10)
x2 <- runif(100, 0, 10)
x3 <- runif(100, 0, 10)
x4 <- runif(100, 0, 10)
x5 <- runif(100, 0, 10)
df <- as.data.frame(cbind(x1,x2,x3,x4,x5))
library(lmtest)
library(car)
model <- lm(x1~x2+x3+x4+x5, data = df)
# check for normal distribution (Shapiro-Wilk-Test)
rs_sd <- rstandard(model)
shapiro.test(rs_sd)
# check for heteroskedasticity (Breusch-Pagan-Test)
bptest(model)
# check for multicollinearity
vif(model)
#-------------------------------------------------------------------------------
# models without outliers
# identify outliers (calculating the Cooks distance, if x > 4/(n-k-1) --> outlier
cooks <- round(cooks.distance(model), digits = 4)
df_no_out <- cbind(df, cooks)
df_no_out <- subset(df_no_out, cooks < 4/(100-4-1))
model_no_out <- lm(x1~x2+x3+x4+x5, data = df_no_out)
# check for normal distribution
rs_sd_no_out<- rstandard(model_no_out)
shapiro.test(rs_sd_no_out)
# check for heteroskedasticity
bptest(model_no_out)
# check for multicollinearity
vif(model_no_out)
我的想法是遍历所有 var 组合并获取 shapiro.test() 和 bptest() 的 P-VALUES 或创建的所有模型的 VIF 值,以便我可以比较显着性值或多重共线性 (在我的数据集中,多重共线性应该不是问题,因为要检查多重共线性,VIF 测试会产生更多值(对于每个 var 1xVIF 因子),这对于在代码中实现可能更具挑战性),p 值shapiro.test + bptest() 就足够了……)。
我尝试编写几个脚本来自动化该过程但没有成功(不幸的是我不是程序员)。我知道已经有一些线程在处理这个问题
但我还没有找到一个也可以计算 P-VALUES 的脚本。
特别是对没有异常值的模型的测试很重要,因为在去除异常值之后,OLS 假设在许多情况下都得到了满足。
我非常感谢任何建议或帮助。