如何在函数中随机交换列?

时间:2016-10-19 10:44:11

标签: r

我有一个矩阵和一个向量

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的所有列改变

1 个答案:

答案 0 :(得分:0)

很难理解你想要实现的目标

  1. &#34;除了9&#34;不能在lm(没有转换) - 共线性中包括两列1列。因此,您需要在已经使用过的所有列上更改X3。
  2. 但也许那样:

    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(你的任务与它非常相似)

    PS

    最高 se 并不意味着最差的系数。 (有一些测试来检查统计中的coef的重要性)