【问题标题】:how to randomly exchange a column within a function?如何在函数中随机交换列?
【发布时间】:2017-02-28 23:04:48
【问题描述】:

我有一个矩阵和一个向量

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 个随机列 温度

然后我将 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 中除自身之外的所有其他列

现在我想将第 3 列自动更改为 X 中除自身以外的所有其他列

如果你这样做了

> temp
#[1] 18  4  9  8 10

X1 的第 3 列被 X 的除 9 之外的所有列改变了

【问题讨论】:

  • 那么...为什么不只存储信息,例如temp &lt;- sample(ncol(X), 5),以便您以后可以检查它们是哪些列? (编辑:然后显然将代码更改为X[,temp]
  • @Laterow 谢谢我现在编辑了我的问题

标签: r


【解决方案1】:

真的很难理解你想要达到的目标

  1. “除了 9”不能将 1 列两次包含到 lm 中(没有变换)-共线性。因此,您需要更改除已使用的所有列上的 X3。

但也许是这样:

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 曾经获得“最佳”模型 或here(你的任务与它非常相似)

PS

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

【讨论】:

  • 可以从一开始就自动完成吗?在计算温度之前?当您说“有一些测试可以检查统计中 coef 的显着性”时,还有哪种类型的测试
  • 您是否了解step 以及它的作用? t-test 例如可用于检查显着性。 (p-value 显示 coef 的显着性)。您需要用文字告诉您要达到的目标(从矩阵中找到具有 5 个系数的最佳模型?(共线性和其他统计问题呢?))
  • 我想找出这 5 个变量中的哪个变量不那么重要,然后我用 X 一个一个地更改它并保留一个更好的变量
  • 在这个阶段我不关心共线性,当你检查一个自变量但不损害整个模型时,这是一个问题
猜你喜欢
  • 1970-01-01
  • 2018-05-23
  • 2021-07-14
  • 2017-06-17
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2018-09-24
  • 2023-03-19
相关资源
最近更新 更多