2013-02-23 96 views
1

为了简化未来的数据分析,我想编写一个脚本,将确定包括在data.frame不同的自我报告的尺度和各规模的项目进行常规分析。目前,我希望它能够确定哪些量表存在,找到每个量表项目的响应,然后计算每个量表的Cronbach's Alphas。函数内变量类不同吗?

一切似乎当我运行我的功能应该产生阿尔法的列表(除非是工作)输出每个刻度我得到以下错误:

> 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或matrix。我很困惑,虽然原因是,当我做这些计算手动一步一步我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) 
+0

是否有助于添加'α(数据[,响应[[I]],滴= FALSE])'? – 2013-02-23 14:02:21

回答

0

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

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

SOOOOO,需要所有我的代码是一种识别只有一个项目规模:

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()到脚本,我现在已经发布了一个脚本,该脚本会自动识别尺度和生产克伦巴赫的阿尔法列表(提供的列被命名为与后下划线对于任何可能感兴趣的人来说,再次感谢!