For 相关循环

For Loop for Correlations

我想获取每个县的两个变量之间的相关值。

我对我的数据进行了子集化,如下所示,并为个别亚当斯县获得了适当的值,但我现在想做其他县:

    CorrData<-read.csv("H://Correlation 
     Datasets/CorrelationData_Master_Regression.csv")
     CorrData2<-subset(CorrData, CountyName=="Adams")
     dzCases<-(cor.test(CorrData2$NumVisit, CorrData2$dzdx, 
      method="kendall"))
dzCases

我想做一个 For 循环或类似的东西来使过程更有效率,这样我就不必为 93 个县中的每个县编写 20 个不同的变量相关性。

当我在 R 中 运行 以下内容时,它没有给出错误,但也没有给我我希望的响应。它似乎忽略了循环部分,而不是每个县的 Spearman 相关性,只是给我所有县的两个变量之间的相关性。

    CorrData<-read.csv("H:\CorrelationData_Master_Regression.csv")
     for (i in CorrData$CountyName)
     {
     dzCasesYears<-cor.test(CorrData$NumVisit, CorrData$dzdx, 
     method="spearman")
     }

我的数据中有一个非常小的样本与此类似:

CountyName  Year    NumVisits        dzdx
Adams       2010    4.545454545      1.19           
Adams       2011    20.83333333      0.20           
Elmore      2010    26.92307692      0.24       
Elmore      2011    0                0.61           
Brown       2010    0               -1.16           
Brown       2011    17.14285714     -1.28           
Clark       2010    25              -1.02           
Clark       2011    0                1.13           
Cass        2010    17.85714286      0.50       
Cass        2011    27.55102041      0.11

我试图在网上找到一个类似的例子,但我没有运气!

提前感谢您的帮助!

data.table让这样的操作变得非常简单。

library('data.table')
CorrData <- as.data.table(read.csv("H:\CorrelationData_Master_Regression.csv"))
CorrData[, cor(dzdx, NumVisits), CountyName]

样本数据都是负数,因为每个县有两个点,所以相关性很好。完整的数据集应该更有趣!

   CountyName V1
1:      Adams -1
2:     Elmore -1
3:      Brown -1
4:      Clark -1
5:       Cass -1

编辑以包含来自 cor.test 的 p 值,如 OP 在评论中所问 这个也很简单!

CorrData[, .(cor=cor(dzdx, NumVisits),
             p=cor.test(dzdx, NumVisits)$p.value),
             CountyName]

...但它不适用于您的示例数据,因为每个县两个点不足以 cor.test 获得 p 值。也许您可以采纳@smci 的建议和dput 更大的数据子集,使您的问题真正可重现

您正在循环但未在代码中使用迭代器 'i'。如果这对你想做的事情有意义(并根据你的情况判断)。根据评论,您可能希望确保使用的是数字。另外,我注意到您没有迭代到输出 cor.test 向量中。我不确定循环是最有效的方法,但它会很好,因为你是从循环开始的,你应该有这样的东西:

 dzCasesYears = list() #Prep a list to store your corr.test results
 counter = 0 # To store your corr.test into list through iterating

 for (i in unique(CorrData$CountyName))
 {
 counter = counter + 1
 # Creating new variables makes the code clearer
 x = as.numeric(CorrData[CorrData$CountyName == i,]$NumVisit)
 y = as.numeric(CorrData[CorrData$CountyName == i,]$dzdx)

 dzCasesYears[[counter]] <-cor.test(x,y,method="spearman")

 }

并且在迭代时放置一个唯一值总是好的。