Mam tablicę danych tablicy kontyngencji z 6 kolumnami i 37 wierszami. Potrzebuję zastosować transformację Chi, aby uzyskać profile wierszy i profile kolumn do analizy korespondencji.Transformacja danych unikająca pętli zagnieżdżonych w R
Niestety, powiedziano mi, że będę musiał użyć pętli zagnieżdżonych do transformacji danych i przeprowadzenia CA (zamiast robić to rozsądniej w R). Dostałam strukturę użyć do mojego zagnieżdżonej pętli:
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]
}
}
Z tego co rozumiem, za pomocą zagnieżdżonych pętli będzie stosować mój „transformacja” pierwszy wierszy, a następnie do kolumn.
Transformacja chcę zrobić na danych, aby uzyskać profili wierszy to:
( X (ij)/suma (X (i)) )/sqrt (suma (X (j)))
Choć transformacja chcę zrobić na danych, aby uzyskać profili kolumn jest:
( X (ij)/suma (X (j)) )/sqrt (suma (X (i)))
Co chciałbym wprowadzić jako mój „TRANSFO RMATION " w ostatnim wierszu zagnieżdżonej pętli, aby uzyskać żądaną transformację dla profili. W przeciwnym razie, jeśli tęsknię za zrozumieniem punktu pętli zagnieżdżonej, proszę opisać, co mi to pozwoli.
Jest to kod dla podzbioru moich danych:
matrix(c(15366,2079,411,366,23223,2667,699,819,31632,2724,717,1473,49938,3111,1062,11964)
,nrow=4,ncol=4,byrow=T)
więc za pomocą tego podzbioru sam spodziewałbym profil wiersza dla pierwszego rzędu, aby być:
0.002432689 0.0003291397 6.506803e-05 5.794379e-05
a kolumna profil dla pierwszej kolumny to:
0.0009473414, 0.0132572344, 0.0572742202, 0.0132863528
można dodać kilka przykładowych danych, aby Twoje pytanie [powtarzalne] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? Potrzebny będzie zestaw danych wejściowych i oczekiwany wynik. Czy szukałeś również wbudowanych funkcji? Pierwsze trafienie w google dało mi [to] (http://www.statmethods.net/advstats/ca.html). – Chase
Dzięki Chase, dodam tylko niektóre przykładowe dane do pierwszego postu. W odniesieniu do twojego drugiego pytania do tego zadania, muszę najpierw wykonać analizę korespondencji krok po kroku, przekształcając dane (bit, w którym utknąłem) i robiąc PCA na tym, a następnie robiąc to rozsądniejszymi sposobami przez corresp (oryginalne dane) i ca (oryginalne dane) – Confused
Brzmi jak zadanie domowe? Kilka rad. 1) nie potrzebujesz żadnych pętli, 2) twoja formuła może być znacznie łatwiejsza, jeśli użyjesz 'colSums()' i 'rowSums()' 3) gdy wszystko inne zawiedzie, możesz spojrzeć na kod źródłowy funkcji aby zobaczyć, jak inni autorzy rozwiązali ten sam problem. Aby to zrobić, wpisz nazwę funkcji bez parens w konsoli. Ta * może * być funkcją jednoliniową z powyższymi informacjami. – Chase