Hola a todos Una duda con la función qr La factorización QR de una matriz A dará dos matrices, una Q ortogonal y un R triangular superior. Pero todas las funciones y paquetes que encuentro dan una matriz qr que no es ninguna de ellas. ¿En qué me equivoco? ¿Cómo consigo las dos matrices? Por ejemplo: > A<-matrix(c(1,2,3,2,1,3,2,1,1), 3) > qr(A)$qr->kk > t(kk)%*%kk [,1] [,2] [,3] [1,] 14.92857 14.009965 6.651530 [2,] 14.00997 14.111441 7.614529 [3,] 6.65153 7.614529 6.000000 > kk%*%t(kk) [,1] [,2] [,3] [1,] 29.571429 -8.8457246 -1.9996028 [2,] -8.845725 3.3809524 -0.3550511 [3,] -1.999603 -0.3550511 2.0876314 No es ortogonal ni triangular Saludos --
Hola, ¿qué tal? Mira:> A<-matrix(c(1,2,3,2,1,3,2,1,1), 3) > kk <- qr(A) > qr.Q(kk)[,1] [,2] [,3] [1,] -0.2672612 0.7715167 -0.5773503 [2,] -0.5345225 -0.6172134 -0.5773503 [3,] -0.8017837 0.1543033 0.5773503> qr.Q(kk) %*% t(qr.Q(kk))[,1] [,2] [,3] [1,] 1.000000e+00 5.551115e-17 -5.551115e-17 [2,] 5.551115e-17 1.000000e+00 0.000000e+00 [3,] -5.551115e-17 0.000000e+00 1.000000e+00> qr.R(kk)[,1] [,2] [,3] [1,] -3.741657 -3.474396 -1.870829 [2,] 0.000000 1.388730 1.080123 [3,] 0.000000 0.000000 -1.154701 Todo está explicado en ?qr Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 6 de octubre de 2014, 14:48, José Miguel Contreras García <jmcontreras en ugr.es> escribió:> Hola a todos > > Una duda con la función qr > La factorización QR de una matriz A dará dos matrices, una Q ortogonal y un > R triangular superior. Pero todas las funciones y paquetes que encuentro dan > una matriz qr que no es ninguna de ellas. ¿En qué me equivoco? ¿Cómo consigo > las dos matrices? > > Por ejemplo: >> A<-matrix(c(1,2,3,2,1,3,2,1,1), 3) >> qr(A)$qr->kk > > >> t(kk)%*%kk > [,1] [,2] [,3] > [1,] 14.92857 14.009965 6.651530 > [2,] 14.00997 14.111441 7.614529 > [3,] 6.65153 7.614529 6.000000 >> kk%*%t(kk) > [,1] [,2] [,3] > [1,] 29.571429 -8.8457246 -1.9996028 > [2,] -8.845725 3.3809524 -0.3550511 > [3,] -1.999603 -0.3550511 2.0876314 > > No es ortogonal ni triangular > > > > Saludos > > -- > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es
http://rosettacode.org/wiki/QR_decomposition ---------------------- R <http://rosettacode.org/wiki/Category:R> # R has QR decomposition built-in (using LAPACK or LINPACK) a <- matrix(c(12, -51, 4, 6, 167, -68, -4, 24, -41), nrow=3, ncol=3, byrow=T) d <- qr(a) qr.Q(d) qr.R(d) # now fitting a polynomial x <- 0:10 y <- 3*x^2 + 2*x + 1 # using QR decomposition directly a <- cbind(1, x, x^2) qr.coef(qr(a), y) # using least squares a <- cbind(x, x^2) lsfit(a, y)$coefficients # using a linear model xx <- x*x m <- lm(y ~ x + xx) coef(m) ---------------------- El 6 de octubre de 2014, 14:48, José Miguel Contreras García < jmcontreras en ugr.es> escribió:> Hola a todos > > Una duda con la función qr > La factorización QR de una matriz A dará dos matrices, una Q ortogonal y > un R triangular superior. Pero todas las funciones y paquetes que encuentro > dan una matriz qr que no es ninguna de ellas. ¿En qué me equivoco? ¿Cómo > consigo las dos matrices? > > Por ejemplo: > > A<-matrix(c(1,2,3,2,1,3,2,1,1), 3) > > qr(A)$qr->kk > > > > t(kk)%*%kk > [,1] [,2] [,3] > [1,] 14.92857 14.009965 6.651530 > [2,] 14.00997 14.111441 7.614529 > [3,] 6.65153 7.614529 6.000000 > > kk%*%t(kk) > [,1] [,2] [,3] > [1,] 29.571429 -8.8457246 -1.9996028 > [2,] -8.845725 3.3809524 -0.3550511 > [3,] -1.999603 -0.3550511 2.0876314 > > No es ortogonal ni triangular > > > > Saludos > > -- > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola, Supongo que la contestación de Carlos J. Gil es más que suficiente. Por tratar de aclararlo algo más (y si no me equivoco...), realmente la matriz Q no está almacenada en la descomposición (solo las transformaciones necesarias para obtenerla). No se suele trabajar directamente con ella y por eso aparecen las funciones qr.qy y qr.qty por si quieres hacer operaciones... Comentar también que uno se puede encontrar con pequeños problemas cuando se utiliza la librería LAPACK para obtenerla (algo que yo recomiendo si la matriz no es de rango máximo), porque algunas de las funciones de R funcionan solo para la factorización obtenida con LINPACK (qr.resid y qr.fitted si no me equivoco). R utiliza para este caso por defecto la librería FORTRAN LINPACK más antigua. LAPACK es la versión 'moderna' y es la que utiliza R para la mayoría de los cálculos matriciales. Si alguien necesita documentarse sobre este tema puedo darle algunas referencias... Un saludo, Rubén F.C. El 06/10/2014 14:48, José Miguel Contreras García escribió:> Hola a todos > > Una duda con la función qr > La factorización QR de una matriz A dará dos matrices, una Q ortogonal > y un R triangular superior. Pero todas las funciones y paquetes que > encuentro dan una matriz qr que no es ninguna de ellas. ¿En qué me > equivoco? ¿Cómo consigo las dos matrices? > > Por ejemplo: > > A<-matrix(c(1,2,3,2,1,3,2,1,1), 3) > > qr(A)$qr->kk > > > > t(kk)%*%kk > [,1] [,2] [,3] > [1,] 14.92857 14.009965 6.651530 > [2,] 14.00997 14.111441 7.614529 > [3,] 6.65153 7.614529 6.000000 > > kk%*%t(kk) > [,1] [,2] [,3] > [1,] 29.571429 -8.8457246 -1.9996028 > [2,] -8.845725 3.3809524 -0.3550511 > [3,] -1.999603 -0.3550511 2.0876314 > > No es ortogonal ni triangular > > > > Saludos > > -- > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >