Tengo una matriz de datos de tabla de contingencia con 6 columnas y 37 filas. Necesito aplicar una transformación Chi al cuadrado para darme Perfiles de fila y Perfiles de columna para un análisis de correspondencia.Transformación de datos que evita bucles anidados en R
Desafortunadamente, me han dicho que necesitaré usar bucles anidados para transformar los datos y llevar a cabo la CA (en lugar de hacerlo de las maneras más sensatas en R). Me dieron la estructura a utilizar para mi bucle anidado:
transformed.data=data0
for (row.index in 1:nrow(data)) {
for (col.index in 1:ncol(data)) {
transfomed.data[row.index,col.index]=
"TRANSFORMATION"[row.index,col.index]
}
}
por lo que entiendo utilizando el bucle anidado se aplicará a mi "transformación" primero en las filas y luego a las columnas.
La transformación Quiero realizado sobre los datos para obtener los perfiles de fila es:
( X (ij)/suma (X (i)) )/sqrt (sum (X (j)))
Si bien la transformación Quiero realizado sobre los datos para obtener los perfiles de columna es:
( X (ij)/suma (X (j)) )/sqrt (suma (X (i )))
¿Qué iba a entrar como mi "TRANSFO RMATION " en la última línea del ciclo anidado para que muestre la transformación deseada para los perfiles. De lo contrario, si he omitido entender el punto de un ciclo anidado, por favor describe lo que me permitiría hacer.
Este es el código para un subconjunto de los datos de mi:
matrix(c(15366,2079,411,366,23223,2667,699,819,31632,2724,717,1473,49938,3111,1062,11964)
,nrow=4,ncol=4,byrow=T)
Así que usando este subconjunto solo yo esperaría que el perfil de fila de la primera fila sea:
0.002432689 0.0003291397 6.506803e-05 5.794379e-05
y la columna perfil para la primera columna:
0.0009473414, 0.0132572344, 0.0572742202, 0.0132863528
se puede añadir algunos datos de ejemplo para hacer su pregunta [reproducible] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? Se necesitará un conjunto de datos de entrada y su resultado esperado. Además, ¿has buscado funciones integradas? El primer hit en google me dio [esto] (http://www.statmethods.net/advstats/ca.html). – Chase
Gracias Chase, solo agregaré algunos datos de muestra a la primera publicación. Con respecto a su segunda pregunta para esta tarea, primero tengo que hacer el análisis de correspondencia paso a paso transformando los datos (el bit en el que estoy estancado) y haciendo un PCA sobre eso y luego hacerlo de la manera más sensata por corresp (datos originales) y ca (datos originales) – Confused
¿Suena como tarea? Algunos consejos. 1) no necesita bucles for, 2) su fórmula puede hacerse mucho más fácil si usa 'colSums()' y 'rowSums()' 3) cuando todo lo demás falla, puede ver el código fuente de las funciones para ver cómo otros autores han resuelto este mismo problema. Para hacer esto, escriba el nombre de la función sin parens en la consola. Esta * puede * ser una función de una línea con las piezas de información anteriores. – Chase