1

我正在尝试使用 fitdistr 函数,并且一直在阅读演练“使用 R 拟合分布”。我可以使用“虚拟数据”按照概述的示例进行操作,但是当我尝试使用此函数运行实际数据时会出现问题。我相信问题是由于我的数据中存在标题,因为我经常遇到同样的错误。例如,如果我运行我的数据(带标题的 2 列),通过第 2 列:

fitdistr(data$col2,"gamma")   
'x' must be a non-empty numeric vector'

我尝试从我的文件中删除标题并尝试对我的所有数据(未分箱)使用该函数,这也导致了同样的错误。

接下来,我尝试删除标题,并且只在数据文件中包含我想要运行该函数的数据列。这确实运行正常。

请注意,对于我的数据,第二列是我有兴趣运行的。但是我已经使用第一列数据将第二列分为 20 个不同的组,所以我确实需要数据集中的第一列。我可以轻松地删除标题并在单独的代码中运行 fitdistr() (因为到目前为止我一直在使用标题来调用列),但我看不到如何只用一列数据运行这个函数,并且仍然有该数据正确分类。我的第一直觉是在 excel 中对数据进行分类,然后有 20 个不同的 1 列数据集来运行该函数。这似乎很乏味,因此非常感谢有关如何在数据集完好无损的情况下执行此功能的任何提示。

根据要求,这里是我的数据样本:

> dput(head(Diam_Str))
structure(list(Diameter = c(0.03, 0.05, 0.05, 0.05, 0.05, 0.05
), Strength = c(0.2, 0.2, 1.5, 0.5, 0.6, 0.3)), .Names = c("Diameter", 
"Strength"), row.names = c(NA, 6L), class = "data.frame")

所以我有20组,根据直径大小。对于每个组,我正在查看所看到的优势分布。

4

1 回答 1

1

看起来您的数据集的第一行是作为数据而不是标题读入的,当您尝试在整个列上运行 fitdistr 时,它会将其视为字符向量而不是数字。

如果您正在使用 read.csv 或类似文件读取数据,请尝试添加选项 header=T。

data = read.csv("file.txt", header=T)

您可以验证一列是一个数字向量

class(data$col2)

如果这是类型字符,那么您的输入文件中的某处可能存在错误值。

如果你觉得你的数据没问题,你可以试试

fitdistr(as.numeric(data$col2),"gamma")

并且任何不好的值都将被替换为 NA

于 2013-03-13T17:52:48.387 回答