几年前,Chitrasen成功地ggvis
用于 PCA - 具有显着更高的交互性,ggvis
我真的很想继续使用它。但是,我无法在 Chitrasen 的代码之外找到任何信息来实现这一点。
虽然上面链接中的模型提供了准确绘制的点和比例,但缺少矢量加载箭头和变量名称。我认为这一定是因为还没有任何等价geom_segment
物ggvis
。
我已经尝试拼接相关的代码来ggbiplot
解决这个问题:
nobs.factor <- sqrt(pcobj$n.obs)
d <- pcobj$sdev
u <- sweep(pcobj$scores, 2, 1/(d * nobs.factor), FUN = "*")
v <- pcobj$loadings
df.u <- as.data.frame(sweep(u[, 1:2], 2, d[1:2]^1,
FUN = "*"))
v <- sweep(v, 2, d^1, FUN = "*")
df.v <- as.data.frame(v[, 1:2])
names(df.u) <- c("xvar", "yvar")
names(df.v) <- names(df.u)
df.u <- df.u * nobs.factor
r <- sqrt(qchisq(0.69, df = 2)) * prod(colMeans(df.u^2))^(1/4)
v.scale <- rowSums(v^2)
df.v <- r * df.v/sqrt(max(v.scale))
df.v$angle <- with(df.v, (180/pi) * atan(yvar/xvar))
df.v$hjust = with(df.v, (1 - 1.5 * sign(xvar))/2)
theta <- c(seq(-pi, pi, length = 50), seq(pi, -pi,
length = 50))
circle <- data.frame(xvar = r * cos(theta), yvar = r *
sin(theta))
上面的代码创建了向量加载所需的信息,然后将其传递给下面的代码:
g <- g + geom_segment(data = df.v, aes(x = 0, y = 0, xend = xvar, yend = yvar),
arrow = arrow(length = unit(1/2,"picas")),
color = color, linetype = linetype, alpha = alpha_arrow)
但是,我不断回到无法创建单个细分的同一块砖墙上。直观地说,这应该是可能的,因为ggbiplot
它从一个princomp
对象中获取信息,这正是 Chitrasen 的模型所使用的。我知道您可以ggvis
使用layer_lines
and制作一些线条layer_paths
,但我还无法让这些线条从 x 和 y 零点辐射。
我想知道是否有人对如何进行/是否有可能使用当前ggvis
功能有任何建议?带有成熟 PCA 的工具提示和滑块的潜力让我垂涎三尺……