El número de condición es el estadístico que se quiere mirar. Es una medida exhaustiva de la colinealidad de su espacio de diseño y mucho más barata de calcular que el VIF. La fórmula es:
$$2\log\left(\frac{d_1(X_s)}{d_p(X_s)}\right) (1)$$
donde $d_p$ ( $d_1$ ) es el menor (mayor) valor singular de $X_s$ y $X_s$ son las variables centradas y reescaladas.
Leer su comentario : esto es lo que estaba sospechando. Para calcular la condición # no necesitas los 100e6 puntos de datos. Sólo muestras, al azar, del orden de 100e3 (experimentando con conjuntos de datos simulados puedes convencerte de que para obtener resultados fiables debes apuntar a unos 5*k, donde k es el # de variables no colineales por lo que incluso 100e3 ya es muy grande).
Eso ya debería darle una idea bastante clara de qué variables están causando la colinealidad.
Además, tiene un algoritmo especializado para calcular los primeros y últimos valores singulares y el último vector singular solamente. Hay algoritmos que obtienen estos valores sin calcular el SVD completo de $X$ (SVD-S). Sin embargo, no sé si están implementados en R, así que para que el ejemplo de abajo sea accesible me limitaré a usar un pequeño ejemplo y el clásico SVD de R.
Un número de condición alto (normalmente cuando la relación (1) es mayor que 10) le indica que $X_s'X_s$ está mal condicionada, que hay componentes que se pueden reescribir como combinación (casi) lineal de las otras variables. A continuación doy un breve ejemplo (a pequeña escala) de cómo se puede utilizar la SVD para descubrir esas relaciones.
n<-100
p<-20
#non-ill conditioned part of the dataset.
x<-matrix(rnorm(n*p),nc=p)
x<-scale(x)
#introduce a variable that causes x to be
#ill conditioned.
y<-x%*%c(rnorm(3),rep(0,p))[1:p]
y<-scale(y)
x<-cbind(x,y)
p<-ncol(x)
A<-svd(x,nu=0)
#x is ill-conditioned: this ratio is larger
#than 10. (step 1)
2*log(A$d[1]/A$d[p])
#check what is causing it: (step 2)
round(A$v[,ncol(A$v)],2)
#you can write the last variable as (.23*x_1+.5*x_2-.45*x_3)/(-.7) [1]
#here the relation is exact because:
min(A$d)
#is 0. if min(A$d)>0 then this gives you how much there is noise
#there is arround [1].
#so I remove the last variable. (step 3)
x<-x[,-ncol(x)]
#no more ill-condition.
2*log(A$d[1]/A$d[p-1])
Esto es para el álgebra lineal del problema cuando hay una sola variable que causa la mala regresión. En la mayoría de los casos tendrá más de una relación (casi) exacta y tendrá que repetir los pasos 1 a 3. En la práctica, las especificidades computacionales dependerán de lo inteligente que sea el enfoque que utilices para resolver el problema SVD.
Puede hacerse una idea de cuántas relaciones exactas hay en su conjunto de datos calculando
$$2\log\left(\frac{d_1(X_s)}{d_j(X_s)}\right)$$
para todos $j$ 's. Para ello sólo se necesitan los valores singulares que se pueden obtener en el coste $O(p^2)$
0 votos
¿Cuántos datos tienes? El mejor método, en mi opinión, son los índices de condición y la proporción de varianza explicada.
1 votos
Como escribió Peter, ¿qué tan grande es realmente? Puedes calcular el número de condición de tu matriz de diseño en un ordenador de sobremesa para hasta 20k variables en segundos.
0 votos
@PeterFlom A efectos de esta pregunta, diré que los datos tienen unas 10k variables, y unos 10 millones de puntos. Voy a actualizar mi pregunta. También revisaré los índices de condición.
1 votos
@user603 Alrededor de 10k variables y 100 millones de puntos. Dudo de alguna manera que un conjunto de datos de 20k variables pueda tener el número de condición calculado en segundos, teniendo en cuenta que el disco duro sólo puede leer del orden de 100 mbs por segundo.