在MASS库中使用fitdistr

时间:2013-03-13 17:09:17

标签: r

我正在尝试使用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组,基于直径大小。对于每个小组,我正在研究所看到的优势分布。

1 个答案:

答案 0 :(得分:1)

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

如果您使用read.csv等读取数据,请尝试添加该选项 标题= T

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

您可以使用

验证列是数字向量
class(data$col2)

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

如果您认为数据合适,可以尝试

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

任何不良值都会被NA的

取代