R代码:自动多元回归模型与检验
我想自动运行许多回归模型,并对此进行测试,并将拟合和残差保存在原始文件中 我的意思是,我想在数据上测试所有可能的回归模型 例如,X1=X2+X3…和X2=X1+X3…和X3=X1+X2 然后将每个模型的拟合值和残差值相加 我有一个这样的文件R代码:自动多元回归模型与检验,r,regression,R,Regression,我想自动运行许多回归模型,并对此进行测试,并将拟合和残差保存在原始文件中 我的意思是,我想在数据上测试所有可能的回归模型 例如,X1=X2+X3…和X2=X1+X3…和X3=X1+X2 然后将每个模型的拟合值和残差值相加 我有一个这样的文件 test<-data.frame(X1=rnorm(50,mean=50,sd=10), X2=rnorm(50,mean=5,sd=1.5), X3=rnorm(50,mean=20
test<-data.frame(X1=rnorm(50,mean=50,sd=10),
X2=rnorm(50,mean=5,sd=1.5),
X3=rnorm(50,mean=200,sd=25))
test$X1[10]<-5
test$X2[10]<-5
test$X3[10]<-530
但是,我想保存原始数据上的所有残差和拟合值。
有可能把最终的数据做成这样吗
X1 X2 X3 Residual1 Residual2 Residual3 Fitted1 Fitted2 Fitted3
因此,
residual1
来自model1
,residual2
来自model2
,等等。不幸的是,“我运行所有可能的回归模型”下的代码无法正常工作,但假设这只是一个示例,通过保存lappy将行绑定到原始数据集如何(模型,残差)和lappy(模型,拟合)作为变量?然后循环列数,一次从每个变量中绑定一个:
models_residuals <- lapply(models,residuals)
models_fitted <- lapply(models, fitted)
for (i in 1:dim(models_residuals)[2])) {
cbind(test, models_residuals[,i])
cbind(test, models_fitted[,i])
}
models\u residuals我确信有可能有更紧凑的代码,但您可以尝试这样的方法
set.seed(1)
test <- data.frame(X1 = rnorm(50, mean = 50, sd = 10),
X2 = rnorm(50, mean = 5, sd = 1.5),
X3 = rnorm(50, mean = 200, sd = 25))
test$X1[10] <- 5
test$X2[10] <- 5
test$X3[10] <- 530
fitted_list <- lapply(names(test), function(x)
fitted(lm(as.formula(paste(x, ".", sep = "~")),
data = test)))
resid_list <- lapply(names(test), function(x)
resid(lm(as.formula(paste(x, ".", sep = "~")),
data = test)))
res <- do.call(cbind, c(fitted_list, resid_list))
res <- cbind(test, res)
names(res) <- paste0(rep(c("X", "Fitted", "Resid"), each = 3), rep(1:3, 3))
str(res)
## 'data.frame': 50 obs. of 9 variables:
## $ X1 : num 43.7 51.8 41.6 66 53.3 ...
## $ X2 : num 5.6 4.08 5.51 3.31 7.15 ...
## $ X3 : num 184 201 177 204 184 ...
## $ Fitted1: num 52 50.5 52.8 50.3 51.8 ...
## $ Fitted2: num 5.23 5.17 5.25 5.09 5.18 ...
## $ Fitted3: num 219 198 225 161 192 ...
## $ Resid1 : num -8.28 1.35 -11.2 15.64 1.49 ...
## $ Resid2 : num 0.367 -1.09 0.264 -1.788 1.97 ...
## $ Resid3 : num -34.47 2.75 -47.44 43.11 -8.33 ...
set.seed(1)
测试
models_residuals <- lapply(models,residuals)
models_fitted <- lapply(models, fitted)
for (i in 1:dim(models_residuals)[2])) {
cbind(test, models_residuals[,i])
cbind(test, models_fitted[,i])
}
set.seed(1)
test <- data.frame(X1 = rnorm(50, mean = 50, sd = 10),
X2 = rnorm(50, mean = 5, sd = 1.5),
X3 = rnorm(50, mean = 200, sd = 25))
test$X1[10] <- 5
test$X2[10] <- 5
test$X3[10] <- 530
fitted_list <- lapply(names(test), function(x)
fitted(lm(as.formula(paste(x, ".", sep = "~")),
data = test)))
resid_list <- lapply(names(test), function(x)
resid(lm(as.formula(paste(x, ".", sep = "~")),
data = test)))
res <- do.call(cbind, c(fitted_list, resid_list))
res <- cbind(test, res)
names(res) <- paste0(rep(c("X", "Fitted", "Resid"), each = 3), rep(1:3, 3))
str(res)
## 'data.frame': 50 obs. of 9 variables:
## $ X1 : num 43.7 51.8 41.6 66 53.3 ...
## $ X2 : num 5.6 4.08 5.51 3.31 7.15 ...
## $ X3 : num 184 201 177 204 184 ...
## $ Fitted1: num 52 50.5 52.8 50.3 51.8 ...
## $ Fitted2: num 5.23 5.17 5.25 5.09 5.18 ...
## $ Fitted3: num 219 198 225 161 192 ...
## $ Resid1 : num -8.28 1.35 -11.2 15.64 1.49 ...
## $ Resid2 : num 0.367 -1.09 0.264 -1.788 1.97 ...
## $ Resid3 : num -34.47 2.75 -47.44 43.11 -8.33 ...