2013-02-23 59 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()到腳本,我現在已經發布了一個腳本,該腳本會自動識別尺度和生產克倫巴赫的阿爾法列表(提供的列被命名爲與後下劃線對於任何可能感興趣的人來說,再次感謝!