R 从数据帧中删除完全多重共线变量

R 从数据帧中删除完全多重共线变量,r,statistics,stata,R,Statistics,Stata,我有一个带有变量的数据框,其中一些包含相同的信息 x1 = runif(1000) x2 = runif(1000) x3 = x1 + x2 x4 = runif(1000) x5 = runif(1000)*0.00000001 +x4 x6 = x5 + x3 x = data.frame(x1, x2, x3, x4, x5, x6) 在下一步中,我想去掉所有完全多重共线的变量,例如列x3和x6(可能还有其他组合) 在Stata,这相当容易:\u rmcoll varlist 在R中如

我有一个带有变量的数据框,其中一些包含相同的信息

x1 = runif(1000)
x2 = runif(1000)
x3 = x1 + x2
x4 = runif(1000)
x5 = runif(1000)*0.00000001 +x4
x6 = x5 + x3
x = data.frame(x1, x2, x3, x4, x5, x6)
在下一步中,我想去掉所有完全多重共线的变量,例如列x3和x6(可能还有其他组合)

在Stata,这相当容易:
\u rmcoll varlist

在R中如何有效地实现这一点

编辑:
请注意,最终目标是计算观测值之间的马氏距离。为此,我需要删除redunant变量。就我所能预见的,对于这个应用程序来说,不管是删除x1、x2还是x3,我都不知道内置的便利函数,但QR分解可以做到

我们需要数据帧是一个矩阵:

X <- as.matrix(x)

X为了完整性,我发布了我之前使用的快速而肮脏的解决方案。事实上,我认为与其他方法相比,它的性能并没有那么差

x1 = runif(1000)
x2 = runif(1000)
x3 = x1 + x2
x4 = runif(1000)
x5 = runif(1000)*0.00000001 +x4
x6 = x5 + x3
x = data.frame(x1, x2, x3, x4, x5, x6)

const = rep(1,1000)
a<-lm(const ~ ., data=x)
names(a$coefficients[!is.na(a$coefficients)])[c(-1)]
x1=runif(1000)
x2=runif(1000)
x3=x1+x2
x4=runif(1000)
x5=runif(1000)*0.00000001+x4
x6=x5+x3
x=数据帧(x1、x2、x3、x4、x5、x6)
常数=代表(11000)

另外,如果变量(列)是完全共线的,那么就有任意性被删除。这就是我所说的“可能还有其他组合”的意思。然而,在我的上下文中,对于多线性数据,哪一种方法被删除并不重要,我要么使用主成分回归(参见package
pls
),要么使用某种正则化方法,如lasso(参见package
glmnet
)。谢谢。我不是100%确定你的建议。并不是说我的目标不是运行回归或任何东西。我在我的问题便笺中粘贴了一条澄清性的评论:任何想要将此线程移动到交叉验证的人都应该注意到,它之前已经发布在那里并被搁置。(原则上,这两个地方都可能离题,但我个人的观点是,它属于这里。)
x1 = runif(1000)
x2 = runif(1000)
x3 = x1 + x2
x4 = runif(1000)
x5 = runif(1000)*0.00000001 +x4
x6 = x5 + x3
x = data.frame(x1, x2, x3, x4, x5, x6)

const = rep(1,1000)
a<-lm(const ~ ., data=x)
names(a$coefficients[!is.na(a$coefficients)])[c(-1)]