从公式中连续删除预测变量
Successively removing predictor variable from formula
我有一个
形式的模型公式
model.all <- lme(Response ~ A + B + C)
我想通过从模型中连续删除一个预测变量来更新这个模型,所以我最终会得到 3 个模型,具体来说:
mod.1 <- lme(Response ~ B + C) ; mod.2 <- lme(Response ~ A + C) ; mod.3 <- lme(Response ~ A + B)
我在考虑循环函数,所以我知道 update
函数,但是我有太多预测变量无法手动更改代码。
如有任何建议,我们将不胜感激。
我会在这种情况下使用combn
,请看下面的例子:
示例数据
Response <- runif(100)
A <- runif(100)
B <- runif(100)
C <- runif(100)
解决方案
a <- c('A','B','C') #the names of your variables
b <- as.data.frame(combn(a,2)) #two-way combinations of those using combn
#create the formula for each model
my_forms <- sapply(b, function(x) paste('Response ~ ', paste(x,collapse=' + ')))
> my_forms #the formulas that will be used in the model
V1 V2 V3
"Response ~ A + B" "Response ~ A + C" "Response ~ B + C"
#run each model
my_models <- lapply(my_forms, function(x) lm(as.formula(x)))
输出
> summary(my_models[[1]])
Call:
lm(formula = as.formula(x))
Residuals:
Min 1Q Median 3Q Max
-0.48146 -0.20745 -0.00247 0.24263 0.58341
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.32415 0.08232 3.938 0.000155 ***
A 0.25404 0.09890 2.569 0.011733 *
B 0.07955 0.10129 0.785 0.434141
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2828 on 97 degrees of freedom
Multiple R-squared: 0.06507, Adjusted R-squared: 0.04579
F-statistic: 3.375 on 2 and 97 DF, p-value: 0.03827
如您所见,每个模型都作为列表元素保存在 my_models
中。我发现这很容易做 运行.
我有一个
形式的模型公式model.all <- lme(Response ~ A + B + C)
我想通过从模型中连续删除一个预测变量来更新这个模型,所以我最终会得到 3 个模型,具体来说:
mod.1 <- lme(Response ~ B + C) ; mod.2 <- lme(Response ~ A + C) ; mod.3 <- lme(Response ~ A + B)
我在考虑循环函数,所以我知道 update
函数,但是我有太多预测变量无法手动更改代码。
如有任何建议,我们将不胜感激。
我会在这种情况下使用combn
,请看下面的例子:
示例数据
Response <- runif(100)
A <- runif(100)
B <- runif(100)
C <- runif(100)
解决方案
a <- c('A','B','C') #the names of your variables
b <- as.data.frame(combn(a,2)) #two-way combinations of those using combn
#create the formula for each model
my_forms <- sapply(b, function(x) paste('Response ~ ', paste(x,collapse=' + ')))
> my_forms #the formulas that will be used in the model
V1 V2 V3
"Response ~ A + B" "Response ~ A + C" "Response ~ B + C"
#run each model
my_models <- lapply(my_forms, function(x) lm(as.formula(x)))
输出
> summary(my_models[[1]])
Call:
lm(formula = as.formula(x))
Residuals:
Min 1Q Median 3Q Max
-0.48146 -0.20745 -0.00247 0.24263 0.58341
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.32415 0.08232 3.938 0.000155 ***
A 0.25404 0.09890 2.569 0.011733 *
B 0.07955 0.10129 0.785 0.434141
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2828 on 97 degrees of freedom
Multiple R-squared: 0.06507, Adjusted R-squared: 0.04579
F-statistic: 3.375 on 2 and 97 DF, p-value: 0.03827
如您所见,每个模型都作为列表元素保存在 my_models
中。我发现这很容易做 运行.