1

fitdistr 関数を使用しようとしていますが、ウォークスルー「R による分布の近似」を読んでいます。「ダミーデータ」を使用して概説した例に従うことができますが、この関数で実際のデータを実行しようとすると問題が発生します。常に同じエラーが発生するため、データにヘッダーが存在することが問題の原因であると考えています。たとえば、データ (ヘッダー付きの 2 列) を実行すると、2 列目まで次のようになります。

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

ファイルからヘッダーを削除し、すべてのデータ (ビン化されていない) で関数を試してみましたが、同じエラーが発生しました。

次に、ヘッダーを削除して、関数を実行したいデータの列だけをデータ ファイルに含めてみました。これは正しく実行されます。

私のデータでは、2 番目の列が実行に関心のあるものであることに注意してください。しかし、データの最初の列を使用して 2 番目の列を 20 の異なるグループに並べ替えたので、データセットの最初の列が必要です。ヘッダーを簡単に削除して別のコードで fitdistr() を実行できます (これまでヘッダーを使用して列を呼び出してきたため) が、データの 1 列のみでこの関数を実行する方法がわかりません。そのデータは適切にビニングされました。私の最初の本能は、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)

これが of 型の文字である場合、入力ファイルのどこかに不正な値がある可能性があります。

データに問題がないと思われる場合は、試すことができます

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

そして、悪い値は NA に置き換えられます

于 2013-03-13T17:52:48.387 に答える