【发布时间】:2015-05-03 01:01:16
【问题描述】:
我制作了一个函数,可以一次绘制来自多个因子分析的载荷,即使它们的变量没有完全重叠(或根本没有重叠)。它工作正常,除了它会生成许多“不推荐使用重复的因子级别”警告,我不明白为什么。
允许的代码应该是可重现的。
library(devtools)
source_url("https://raw.githubusercontent.com/Deleetdk/psych2/master/psych2.R")
loadings.plot2 = function(fa.objects, fa.names="") {
fa.num = length(fa.objects) #number of fas
if (fa.names=="") {
fa.names = str_c("fa.", 1:fa.num)
}
if (length(fa.names) != fa.num) {
stop("Names vector does not match the number of factor analyses.")
}
#merge into df
d = data.frame() #to merge into
for (fa.idx in 1:fa.num) { #loop over fa objects
loads = fa.objects[[fa.idx]]$loadings
rnames = rownames(loads)
loads = as.data.frame(as.vector(loads))
rownames(loads) = rnames
colnames(loads) = fa.names[fa.idx]
d = merge.datasets(d, loads, 1)
}
#reshape to long form
d2 = reshape(d,
varying = 1:fa.num,
direction="long",
ids = rownames(d))
d2$time = as.factor(d2$time)
d2$id = as.factor(d2$id)
print(d2)
print(levels(d2$time))
print(levels(d2$id))
#plot
g = ggplot(reorder_by(id, ~ fa, d2), aes(x=fa, y=id, color=time)) +
geom_point() +
xlab("Loading") + ylab("Indicator") +
scale_color_discrete(name="Analysis",
labels=fa.names)
return(g)
}
fa1 = fa(iris[-5])
fa2 = fa(iris[-c(1:50),-5])
fa3 = fa(ability)
fa4 = fa(ability[1:50,])
loadings.plot2(list(fa1))
loadings.plot2(list(fa1,fa2))
loadings.plot2(list(fa1,fa2,fa3))
loadings.plot2(list(fa1,fa2,fa3,fa4))
绘制不同数量的因子会产生不同数量的错误。
我在将变量as.factor 提供给ggplot 之前尝试设置它们,但它没有改变任何东西。
有什么想法吗?也许与reorder_by()有关?需要这个函数对data.frame进行排序,否则ggplot会按字母顺序排序,没用。
【问题讨论】:
-
那是很多代码。警告发生在哪里?
-
在最后的 ggplot() 处。
-
在ggplot中?还是在 reorder_by 中?警告发生时数据集是什么样的?您能否制作一个看起来与重新创建警告的方式相同的小型数据集?