我编写的应用程序正在分析数据并将结果写入CSV文件。它包含三列: id , diff 和 count 。
1. id 是循环的id - 理论上,较大的id,较低的 diff 应为
2. Diff 是
(Estimator - RealValue)^2的和,用于周期中的每个观察
3 计数是周期中的观察次数
对于参数K的15个不同值,我生成名称为%K%.csv的CSV文件,其中%K%是使用的值。我的文件总数是15。
我想做的是,用R简单循环编写,这将能够绘制我文件的内容以便让我决定,哪个K值最好(一般来说 diff 是最低的。
对于单个文件,我正在执行类似
的操作 ggplot(data = data) + geom_point(aes(x= id, y=sqrt(diff/count)))
我想要做的是否有意义?请注意,统计数据完全不是我的域名,R也不是(但您可能已经明白了)。
我可以选择更好的方法吗?从理论的角度来看,我正在做我期待的事情吗?
我对任何评论,提示,评论和答案都非常有帮助
答案 0 :(得分:1)
编辑清理一些拼写错误并解决多K值问题。
我将假设您已将所有.csv文件放在一个目录中(此目录中没有其他内容)。我还假设每个.csv确实具有相同的结构(相同的列数,以相同的顺序)。我首先要生成一个文件名列表:
myCSVs <- list.files("path/to/directory")
然后我会使用lapply
“循环”文件名列表,使用read.csv
将每个文件读入数据框:
setwd("path/to/directory")
#This function just reads in the file and
# appends a column with the K val taken from the file
# name. You may need to tinker with the particulars here.
myFun <- function(fn){
tmp <- read.csv(fn)
tmp$K <- strsplit(fn,".",fixed = TRUE)[[1]][1]
tmp
}
dataList <- lapply(myCSVs, FUN = myFun,...)
根据.csv的结构,您可能需要将一些其他参数传递给read.csv
。最后,我将这个数据帧列表组合成一个数据帧:
myData <- do.call(rbind, dataList)
然后,您应该将所有数据放在一个数据框myData
中,然后传递给ggplot
。
至于你问题的统计方面,如果没有具体的数据示例,提供意见有点困难。一旦你想出编程部分,你可以问一个单独的问题,提供一些样本数据(在这里,或在stats.stackexchange.com上),人们将能够提出一些可能有用的可视化或分析技术。 / p>
答案 1 :(得分:1)
我不熟悉你问题的背景,但我希望我能理解你的要求。
你的命令:
ggplot(data = data)+ geom_point(aes(x = id,y = sqrt(diff / count)))
正在为xyplot进行归一化差异〜循环的关系。你提到“在理论上,更大的id,更低的差异应该是”。所以这个图正在验证这个假设。实际上还有另一种方法可以用一个数字来实现:spearman相关系数,可以用cor(x,y,method ='spearman')计算。
你提到“我的文件的内容是为了让我决定,K的哪个值是最好的(一般来说差异是最低的”。所以你可能需要加载所有这些文件,如同“sapply(read.csv(...),simplify = T)”加载所有数据,之后你应该将所有加载的文件转换成某种格式,其中四列包括K,Id,diff和count。然后你可以使用latticeExtra包中的函数(levelplot)在三维中可视化数据集(抱歉,我不知道如何使用ggplot2执行此操作),或者您可以使用颜色编码方式在2-d中使用geom_tile函数执行此操作ggplot2,或者,您可以使用facet以网格方式显示数据。