1

为了简化未来的数据分析,我正在尝试编写一个脚本,该脚本将识别 data.frame 中包含的不同自我报告量表,并对每个量表的项目执行常规分析。目前,我希望它识别存在哪些量表,找到每个量表项目的响应,然后计算每个量表的 Cronbach Alpha。

一切似乎都在工作,除非我运行我的函数,该函数应该为每个比例生成一个 alpha() 输出列表,我收到以下错误:

    > Cronbach.Alphas(scales.data, scale.names)
       Error in alpha(data[, responses[[i]]]) : 
       Data must either be a data frame or a matrix

显然,我知道这是说提供给 alpha() 函数的信息不是 data.frame 或矩阵。不过,我很困惑的原因是,当我在 Cronbach.Alphas() 函数之外手动进行这些计算时,它清楚地告诉我它是一个 data.frame 并且看起来像一个魅力:

    > class(scales.data[,responses[[1]]])
    [1] "data.frame"

这让我发疯,我将非常感谢任何帮助解决这个问题。我的完整代码粘贴在下面。(注意:我对 R 中的编程函数很陌生,所以我做事的方式可能不是最佳的。也欢迎任何额外的建议。)

此外,提及我的代码旨在根据列名中是否存在下划线来识别比例名称可能会有所帮助。即,“rsq_12”将标度表示为 rsq,将列表示为对标度第 12 项的响应。

   require(psych)

   ##### Function for identifying names of scales present in the data file #####
   GetScales <- function(x) {
     find.scale.names <- regexec("^(([^_]+)_)", colnames(x))
     scales <- do.call(rbind, lapply(regmatches(colnames(x), find.scale.names), `[`, 3L))
     colnames(scales) <- "scale"
     na.find <- ifelse(is.na(scales[,1]), 0, 1)
     scales <- cbind(scales, na.find)
     output <- scales[scales[,2] == 1,]
     output[,1]
   }

   ##### Function for calculating cronbach's alpha for each scale #####
   Cronbach.Alphas <- function(data, scales){
     for(i in 1:length(scales)){
       if(i == 1) {
         responses  <- list(grep(scales[i], colnames(data)))
         alphas <- list(alpha(data[,responses[[i]]]))
       } else {
         responses  <- append(responses, list(grep(scales[i], colnames(data))))
         alphas <- append(alphas, list(alpha(data[,responses[[i]]])))
       }
     }
     return(alphas)
   }

   ### Import data from .csv file ###
   scales.data <- data.frame(read.csv(file.choose()))

   ### Identify each item's scale ###
   scale.items <- GetScales(scales.data)

   ### Reduce to names of scales ###
   scale.names <- cbind(scale.items, !duplicated(scale.items))
   scale.names <- scale.names[scale.names[,2] == TRUE, 1]
   scale.names

   ### Calculate list of alphas ###
   Cronbach.Alphas(scales.data, scale.names)
4

1 回答 1

0

感谢任何花时间查看我的代码的人。我感谢您的帮助。当我意识到我的一个简单错误时,我正在处理这里留下的建议......

我在处理此脚本时一直用作测试的数据集中的比例之一只有一个项目。因此,我的 Cronbach.Alphas() 函数中的 data[,responses[[i]]] 在 for 循环中的该点将向量(而不是 data.frame 或矩阵)传递给 alpha() 函数。不可能计算单个项目量表的 cronbach alpha,因为它是项目间可靠性的指标......

太好了,我需要的所有代码都是一种仅用一个项目来识别秤的方法:

    Cronbach.Alphas <- function(data, scales){
      for(i in 1:length(scales)){
        if(i == 1) {
          responses  <- list(grep(scales[i], colnames(data)))
          if(length(responses[[i]]) > 1){
            alphas <- list(alpha(data[,responses[[i]]]))
          }
        } else {
          responses  <- append(responses, list(grep(scales[i], colnames(data))))
          if(length(responses[[i]]) > 1){
            alphas <- append(alphas, list(alpha(data[,responses[[i]]])))
          }
        }
      }
      return(alphas)
    }

很抱歉因为我的错误浪费了任何人的时间。从好的方面来说,通过将这个新的 Cronbach.Alphas() 函数替换到上面的脚本中,我现在发布了一个脚本,该脚本将自动识别比例并生成 cronbach 的 alpha 列表(假设列在比例名称)供任何可能感兴趣的人使用。再次感谢!

于 2013-02-23T16:00:04.500 回答