У меня есть набор данных («данные»), который выглядит следующим образом:многомерное шкалирование участок в R
PatientID Visit Var1 Var2 Var3 Var4 Var5
1 ID1 0 44.28 4.57 23.56 4.36 8.87
2 ID1 1 58.60 5.34 4.74 3.76 6.96
3 ID1 2 72.44 11.18 21.22 2.15 8.34
4 ID2 0 65.98 6.91 8.57 1.19 7.39
5 ID2 1 10.33 38.27 0.48 14.41 NA
6 ID2 2 69.45 11.18 20.69 2.15 8.34
7 ID3 0 69.16 6.17 10.98 1.91 6.12
8 ID3 1 86.02 3.28 16.29 4.28 5.74
9 ID3 2 69.45 NA 20.69 2.15 8.34
10 ID4 0 98.55 26.75 2.89 3.92 2.19
11 ID4 1 32.66 14.38 4.96 1.13 4.78
12 ID4 2 70.45 11.42 21.78 2.15 8.34
Мне нужно, чтобы сформировать участок МДС со всеми точек данных. Мне также нужны точки посещения, которые должны быть связаны линией и окрашены в зеленый цвет для посещения 1, красный для посещения 2 и черный для посещения3 (согласованные цвета для всех людей).
Мой код выглядит следующим образом (вполне lenghty, но это не работает):
data.cor <- cor(t(data[,3:7]), use = "pairwise.complete.obs", method = "spearman")
dim(data.cor)
dim(data)
rownames(data.cor) <- paste0(data$PatientID, "V", data$Visit)
colnames(data.cor) <- paste0(data$PatientID, "V", data$Visit)
c <- dist(data.cor)
fit <- cmdscale(c,eig=TRUE, k=2)
ff <- fit$points
ff <- as.data.frame(ff)
ff$pair <- paste0(substr(rownames(ff),1,6))
ff$pair <- factor(ff$pair)
pc.pair.distances <- matrix(nrow = nlevels(ff$pair), ncol = 1)
for(i in 1:nlevels(ff$pair)){
pair2 <- ff[ff$pair %in% levels(ff$pair)[i] , ]
pc.pair.distances[i,1] <- sqrt(
((pair2[1,1] - pair2[2,1]) * (pair2[1,1] - pair2[2,1]))
+ ((pair2[1,2] - pair2[2,2]) * (pair2[1,2] - pair2[2,2]))
)
rm(pair2)
}
plot(ff[,1], ff[,2], xlab="Principal 1", ylab="Principal 2", type = "n", las = 1)
for(i in 1:nlevels(ff$pair)){
lines(ff[ff$pair == levels(ff$pair)[i],1], ff[ff$pair == levels(ff$pair)[i],2], col = "grey")
}
points(ff[,1], ff[,2], xlab="Coordinate 1", ylab="Coordinate 2", type = "p",
pch = ifelse(grepl(x = substr(rownames(ff), 7,8), "V1"), 20, 18),
cex = 1.3)
)
Я очень ценю вашу помощь.
Можете ли вы сказать нам, где ваша проблема именно? У вас есть ошибка? – maeVeyable
@maeVeyable: Я не уверен, имеет ли смысл мой код. Я не получаю ошибку, но моя фигура не такая, как я ожидаю. Я получаю только 8 datapoints вместо 12, поэтому я думаю, что что-то не так. Похоже, что третий визит не включен ...... Также мне хотелось бы, чтобы каждый пункт посещения окрашивался по-разному (но, напротив, для всех людей). Я также хотел бы, чтобы три точки посещения для каждого человека были связаны линией. – VasoGene
На самом деле все точки нарисованы. Просто некоторые точки имеют одинаковые координаты. – maeVeyable