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")
}
并且在迭代时放置一个唯一值总是好的。
我想获取每个县的两个变量之间的相关值。
我对我的数据进行了子集化,如下所示,并为个别亚当斯县获得了适当的值,但我现在想做其他县:
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")
}
并且在迭代时放置一个唯一值总是好的。