带有向量载荷的PCA的ggvis?

时间:2016-12-08 11:23:12

标签: r pca ggvis ggbiplot

几年前,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模型正在使用的信息。我知道您可以使用ggvislayer_lineslayer_paths中添加一些行,但我还是无法从x和y零点辐射出来。

我想知道是否有人有关于如何继续/如果有可能使用当前ggvis功能的任何建议?具有完整PCA的工具提示和滑杆的潜力让我垂涎欲滴......

0 个答案:

没有答案