0

编辑

因此,在我的呼吁中,这似乎library(reshape)打破了因素的标签。这未包含在最小示例中,但现在将添加。不需要创建示例,但需要重新创建问题。我需要图书馆来整理我的数据,甚至可以做到factanal()。任何想法重塑的哪一部分正在破坏它以及如何修复它?


原始问题

我一直在对我的数据进行因子分析,并且在打印结果的方式上遇到了间歇性问题。

如果我创建如下数据集:

library(reshape)
mock <- data.frame(
  sample_name1 = sample(1:100),
  sample_name2 = sample(1:100),
  sample_name3 = sample(1:100),
  s_amplename_4 = sample(1:100),
  samplename5 = sample(1:100),
  sa_mplen_a_me_6 = sample(1:100),
  samplename7 = sample(1:100),
  samplename8 = sample(1:100)
)

并使用

factanal(mock, factors = 2)

我得到输出以非常漂亮的方式打印出来,其中项目名称作为行的标签,例如:

# Snip snip
Loadings:
                Factor1 Factor2
sample_name1    -0.126  -0.105 
sample_name2    -0.414         
sample_name3     0.665         
s_amplename_4           -0.314 
samplename5              0.850 
sa_mplen_a_me_6 -0.117         
samplename7      0.442         
samplename8     -0.139 

这种输出正是我想要的。但是,当我对自己的数据进行相同类型的分析时(我为这里的长度道歉):

miniset <- structure(list(`clarity1` = c(2, 2, 2, 3, 4.5, 1.5, 1.5, 3.5, 
                                           2, 6, 2.5, 4, 1, 1.5, 6, 2, 5.5, 2, 2, 3, 1.5, 5, 3.5, 2, 1.5, 
                                           2.5, 3, 3, 2, 1), 
                          `clarity2` = c(1.5, 2, 2, 2, 3.5, 5, 3, 5, 
                                           2, 4, 2, 2.5, 1, 1.5, 2, 4, 5, 2, 2, 3.5, 6, 1, 2, 1.5, 1, 2, 
                                           2, 3, 6.5, 1), 
                          `clarity3` = c(3, 3.5, 2, 3.5, 5.5, 4, 6, 5.5, 
                                           2, 3, 3, 3.5, 1, 2.5, 2, 5, 5, 5, 2, 6.5, 5.5, 5, 5.5, 6, 3, 
                                           2, 2, 5, 4.5, 5.5), 
                          `detail1` = c(3, 4, 2, 6, 5, 6.5, 5.5, 
                                          4, 3, 6, 2.5, 4, 1, 4, 2, 4.5, 7, 6.5, 2, 6.5, 6, 2, 6, 5, 2.5, 
                                          5.5, 4, 5.5, 6, 1.5), 
                          `detail2` = c(3.5, 4, 4, 6.5, 4.5, 6, 
                                          4, 4.5, 2, 6, 2.5, 5, 2, 4, 3, 6, 7, 7, 2, 6.5, 6, 3, 6, 6, 2.5, 
                                          6, 3, 5, 6.5, 2.5), 
                          `detail3` = c(2.5, 4, 2, 6, 5, 6, 6, 4, 
                                          2, 6, 2, 5, 2, 3, 3, 5, 6.5, 6, 2, 6.5, 7, 7, 5.5, 5, 3.5, 2, 
                                          3, 5, 6, 2), 
                          `complete1` = c(2, 2.5, 2, 3, 3.5, 5.5, 2.5, 2.5, 
                                            2, 3, 3, 3.5, 2, 4, 3, 3, 7, 4, 2, 3, 6, 3, 5.5, 2, 3, 2, 2, 
                                            3, 6, 3), 
                          `complete2` = c(3, 4.5, 2, 3, 4.5, 6, 6, 4.5, 3, 
                                            3, 3.5, 4, 2, 5, 3, 4, 7, 4, 2, 6, 7, 5, 5, 6, 3, 3, 5, 5, 6, 
                                            2), 
                          `complete3` = c(3, 4.5, 2, 2.5, 4.5, 6.5, 5, 5, 2, 6.5, 
                                            3.5, 3.5, 1, 3, 3, 2.5, 7, 4, 2, 6, 1.5, 7, 5.5, 6.5, 3.5, 5.5, 
                                            3, 3, 2.5, 1), 
                          `truthful1` = c(2.5, 2, 2, 3, 3.5, 2, 2, 2.5, 
                                            2, 3, 3, 2.5, 2, 3, 2, 2, 3.5, 3, 2, 3.5, 1.5, 1, 3.5, 2.5, 3, 
                                            2, 2, 3, 1.5, 1.5), 
                          `truthful2` = c(2.5, 1.5, 2, 2, 3, 1.5, 
                                            2, 1, 1, 5.5, 3, 3.5, 1, 4.5, 2, 2, 5, 2, 2, 1.5, 4.5, 1, 3.5, 
                                            2, 3.5, 2.5, 2, 2, 4.5, 1), 
                          `truthful3` = c(2, 1.5, 2, 3.5, 
                                            2.5, 2, 2, 2.5, 2, 2, 3.5, 2.5, 1, 1.5, 3, 2, 5, 3, 3, 2, 3.5, 
                                            1, 2, 1, 3.5, 2, 2, 2.5, 4.5, 1), 
                          `relevant1` = c(1.5, 1.5, 
                                            2, 5, 2.5, 1.5, 2, 3.5, 2, 4.5, 2.5, 3.5, 1, 3.5, 3, 1.5, 5.5, 
                                            3.5, 2, 2, 6, 3, 3.5, 3, 1.5, 2, 3, 3, 6, 1), 
                          `relevant2` = c(1.5, 
                                            3, 2, 2, 3.5, 1.5, 2.5, 5.5, 1, 2, 3.5, 2, 1, 1.5, 2, 4, 5.5, 
                                            2, 3, 5.5, 5.5, 1, 4, 5, 1.5, 2, 3, 2.5, 3, 1), 
                          `relevant3` = c(1.5, 
                                            2, 2, 3, 2, 1, 2, 2, 1, 2, 1.5, 2.5, 1, 1.5, 2, 1.5, 5.5, 5, 
                                            2, 1, 7, 1, 1, 2, 1, 2, 3, 3, 2.5, 1)), 
                     .Names = c("clarity1", 
                                "clarity2", "clarity3", "detail1", "detail2", "detail3", 
                                "complete1", "complete2", "complete3", "truthful1", "truthful2", 
                                "truthful3", "relevant1", "relevant2", "relevant3"), 
                     row.names = c(NA, 30L), class = c("cast_df", "data.frame"))

factanal(miniset, factors = 3)

结果不那么漂亮,例如:

Loadings:
      Factor1 Factor2 Factor3
 [1,]          0.222   0.664 
 [2,]  0.559   0.524         
 [3,]  0.824                 
 [4,]  0.740   0.361   0.282 
 [5,]  0.698   0.374   0.251 
 [6,]  0.783   0.278   0.265 
 [7,]  0.498   0.598   0.140 
 [8,]  0.796   0.227   0.204 
 [9,]  0.490  -0.240   0.835 
[10,]  0.147   0.156   0.348 
[11,]          0.697   0.324 
[12,]          0.756         
[13,]  0.319   0.811   0.204 
[14,]  0.567   0.252   0.108 
[15,]  0.320   0.690 

因此,我现在没有将漂亮的项目名称作为加载的标签,而是得到索引。虽然这对我来说很好,但我明天将与一位不太熟悉 R 并且可能会因缺乏标签而感到沮丧的教授一起工作。那么在第二种情况下标签会发生什么?我怎样才能让他们回来?

4

1 回答 1

4

问题是minisetacast_dffactanal调用as.matrix(x)。该as.matrix.cast_df方法使用rrownamesrcolnames(所有reshape函数)来提取“特殊维度名称”。

因为miniset这些是NULL(因此行名丢失)。在不知道您是如何构建的情况下,miniset 我无法在这里提供更多帮助。(在创建对象时,您一定习惯于在某个时候reshape进行构造。minisetcast_df

好消息是

factanal(as.data.frame(miniset))

随心所欲地工作

于 2013-08-07T04:51:39.923 回答