我有一个矩阵和一个向量
set.seed(1) # I added this to have a reproducible values
X <- matrix(rexp(200, rate=.1), ncol=20)
Y <- matrix(rexp(10, rate=.1), ncol=1)
然后我随机选择X的5列 正如@Laterow建议的那样 #从X中选择5个随机列 temp&lt; - 样本(ncol(X),5) X1&lt; - X [,temp]
然后我将 X1 与我的 Y
合并mydata <- data.frame(cbind(Y,X1))
然后我建立一个回归
fit = lm(Y~.,data=mydata)
然后我获得了sd
se <- sqrt(diag(vcov(fit)))
现在我要做的是将原来 X 的所有其他列更改为 se 的列,并保留最低 se的列
例如,如果你在上面运行,在se中,我有最大值的X3
X3
7.348126e-18
所以我将X1的第3列与X
之外的所有其他列一起更改现在我想从X
自动更改第3列,除了它自己以外的所有其他列如果你这样做
> temp
#[1] 18 4 9 8 10
除了9
之外,X1列3被X的所有列改变答案 0 :(得分:0)
很难理解你想要实现的目标
但也许那样:
temp <- c(18 , 4 , 9, 8, 10) # your sample
X1 <- X[,temp]
mydata <- data.frame(cbind(Y,X1))
fit = lm(Y~.,data=mydata)
worst_se=which.max(summary(fit)$coefficients[-1,2]) # find max se without interceprt
Xm=X[,-temp] # all not used X
res2=lapply(1:ncol(Xm),function(i){
mydata[[worst_se]] <- Xm[ , i]
summary(lm(Y~.,data=mydata))$coefficients[names(worst_se),"Std. Error"] # return se of changed X3
})
您可能需要了解曾经获得的?step
&#34; best&#34;模型
或here(你的任务与它非常相似)
最高 se 并不意味着最差的系数。 (有一些测试来检查统计中的coef的重要性)