0

焦点を絞るためにトリミングしようとしている大規模なデータセットがあります。その一部として、5 回測定される 3 つの変数があります。私は毎回平均を作ったので、内部の一貫性を見つけたい5つの変数(毎回1つ)になりました。を使用して Cronbach のアルファを計算しようとするとpsych::alpha()、エラーが発生します。

25 行の再現可能なデータ:

structure(list(catme_satis1a = c(4L, 4L, 5L, 5L, 5L, NA, 1L, 
4L, 4L, 4L, 4L, 2L, 4L, 4L, 3L, 4L, 4L, 5L, 3L, 4L, 5L, 3L, 4L, 
4L, 5L), catme_satis1b = c(4L, 4L, 4L, 5L, 5L, NA, 1L, 4L, 5L, 
5L, 4L, 2L, 5L, 4L, 3L, 4L, 4L, 5L, 3L, 4L, 5L, 3L, 4L, 4L, 5L
), catme_satis1c = c(3L, 4L, 5L, 5L, 5L, NA, 1L, 4L, 3L, 4L, 
4L, 2L, 4L, 5L, 3L, 4L, 4L, 5L, 3L, 4L, 5L, 3L, 4L, 4L, 5L), 
    catme_satis2a = c(4L, 4L, 4L, 5L, 5L, NA, 5L, 4L, 5L, NA, 
    NA, 3L, NA, 4L, 3L, 4L, 4L, 5L, 3L, NA, 5L, 5L, 4L, 4L, 5L
    ), catme_satis2b = c(4L, 4L, 5L, 5L, 5L, NA, 5L, 4L, 5L, 
    NA, NA, 3L, NA, 4L, 3L, 4L, 3L, 5L, 2L, NA, 5L, 5L, 4L, 4L, 
    5L), catme_satis2c = c(4L, 4L, 5L, 5L, 5L, NA, 5L, 4L, 5L, 
    NA, NA, 3L, NA, 4L, 3L, 4L, 3L, 5L, 3L, NA, 5L, 5L, 4L, 4L, 
    5L), catme_satis3a = c(4L, 4L, 4L, 5L, 5L, 5L, 4L, 4L, 5L, 
    5L, 3L, NA, 3L, 4L, 3L, NA, 4L, 5L, 3L, 5L, 5L, 5L, 4L, 5L, 
    5L), catme_satis3b = c(4L, 4L, 4L, 5L, 5L, 5L, 3L, 4L, 5L, 
    5L, 3L, NA, 3L, 4L, 3L, NA, 4L, 5L, 3L, 5L, 5L, 5L, 4L, 5L, 
    5L), catme_satis3c = c(4L, 5L, 5L, 5L, 5L, 4L, 4L, 4L, 5L, 
    5L, 3L, NA, 3L, 4L, 3L, NA, 4L, 5L, 4L, 5L, 5L, 5L, 4L, 4L, 
    5L), catme_satis4a = c(4L, 5L, 5L, 5L, 5L, 5L, 4L, 4L, 5L, 
    4L, 3L, 3L, 3L, 4L, 3L, 4L, 4L, 4L, 4L, NA, 5L, 5L, 5L, 5L, 
    5L), catme_satis4b = c(4L, 4L, 5L, 5L, 5L, 4L, 4L, 4L, 5L, 
    4L, 3L, 3L, 2L, 4L, 3L, 4L, 5L, 5L, 4L, NA, 5L, 5L, 5L, 5L, 
    5L), catme_satis4c = c(4L, 4L, 5L, 5L, 5L, 4L, 4L, 4L, 5L, 
    3L, 3L, 3L, 2L, 4L, 3L, 5L, 4L, 4L, 4L, NA, 5L, 5L, 5L, 5L, 
    5L), catme_satis5a = c(5L, 4L, 5L, 5L, 5L, 5L, 5L, 4L, 5L, 
    4L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 4L, 5L, 5L, 1L, 5L, 
    5L), catme_satis5b = c(5L, 4L, 5L, 5L, 5L, 5L, 5L, 4L, 5L, 
    4L, 3L, 3L, 3L, 4L, 4L, 5L, 4L, 5L, 5L, 4L, 5L, 5L, 1L, 5L, 
    5L), catme_satis5c = c(5L, 4L, 5L, 5L, 5L, 5L, 5L, 4L, 5L, 
    4L, 3L, 3L, 2L, 4L, 4L, 5L, 4L, 3L, 5L, 4L, 5L, 5L, 1L, 5L, 
    5L)), class = "data.frame", row.names = c(NA, -25L), .Names = c("catme_satis1a", 
"catme_satis1b", "catme_satis1c", "catme_satis2a", "catme_satis2b", 
"catme_satis2c", "catme_satis3a", "catme_satis3b", "catme_satis3c", 
"catme_satis4a", "catme_satis4b", "catme_satis4c", "catme_satis5a", 
"catme_satis5b", "catme_satis5c"))

次に、これを試して、列 1:3、4:6 などの平均を取得しました (ただし、名前による):

library(dplyr)
df1 <- test %>%
  rowwise() %>%
  transmute(catme_satis1 = mean(c(catme_satis1a, catme_satis1b, catme_satis1c)),
            catme_satis2 = mean(c(catme_satis2a, catme_satis2b, catme_satis2c)),
            catme_satis3 = mean(c(catme_satis3a, catme_satis3b, catme_satis3c)),
            catme_satis4 = mean(c(catme_satis4a, catme_satis4b, catme_satis4c)),
            catme_satis5 = mean(c(catme_satis5a, catme_satis5b, catme_satis5c)))

psych最後に、パッケージを使用してこれらの変数の一貫性を知りたいです。

library(psych)
alpha(df1)

このエラーが発生します:

> alpha(df1)
Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?

データ フレームを印刷すると正しいように見え、これらの値の一貫性を得ることができるはずです。なぜrこのエラーがスローされるのですか?

4

1 に答える 1

0

いくつかの調査を行った後、これを機能させる方法を見つけました。dplyrを超える追加のクラスを持つ出力が含まれますdata.framedplyr次のコードを使用しないように、別の方法で平均列を作成しました(これはdf2後で比較しやすいように名前が付けられていることに注意してください)。

df2 <- data.frame(
  catme_satis1 = apply(test[, 1:3], 1, mean),
  catme_satis2 = apply(test[, 4:6], 1, mean),
  catme_satis3 = apply(test[, 7:9], 1, mean),
  catme_satis4 = apply(test[, 10:12], 1, mean),
  catme_satis5 = apply(test[, 13:15], 1, mean)
)

alpha(df2)コマンドは問題なく機能しました。これにより、データフレームに関するいくつかのことを確認するようになりました。df1私の元の投稿のクラスで、df2ここが異なります:

> class(df1)
[1] "rowwise_df" "tbl_df"     "tbl"        "data.frame"
> class(df2)
[1] "data.frame"

また、 dplyr出力をデータフレームに強制しない限り、完全に同一であると認識されました!

> identical(df1, df2)
[1] FALSE
> identical(as.data.frame(df1), df2)
[1] TRUE

コマンドを実行するalpha(as.data.frame(df1))と機能し、同じ結果が得られます。ここには 2 つの解決策があります。

  1. dplyrメソッドを使用して平均データを取得します。これにより、データが data.frame クラスのオブジェクトとして保持されます。
  2. as.data.frame()関数の実行時に、オブジェクトを正しいクラスに強制するために使用しalpha()ます。または、 mutate コマンド%>% as.data.frame()の末尾に追加します。dplyr
于 2015-12-09T03:18:32.027 に答える