🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

1回答

3735閲覧

R言語のglm関数(ポアソン回帰分析)で発生したエラーが解決できる人、ご教授ください。

nyosubro0706

総合スコア4

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2019/11/24 08:20

編集2019/11/27 03:05

長くなっておりますが、今後同様のエラーが発生した人のためにこの質問の中で試行錯誤しておきます。
追記内容については、時間が経ちましたら質問内容下部に移動します。

==11/27 追記==

解決の見込み

Rに詳しい知人にエラーについて簡単に調べてもらったところ、glm関数のオプションmaxitの値をいじくることでエラー発生を抑えることができるかもしれないとのことです。
https://stackoverflow.com/questions/20814590/r-na-nan-inf-in-x-error

今日の午後に走らせてみて、結果を報告します。
またmaxitをいじくることによる統計的な影響などについて詳しい方がいましたら、ご教授いただきたいです。

結果

maxit<=19の場合

R

1#説明変数:距離対数、輸出年度、FTA/WTO、ブランチ、輸出相手国 2res4 <-glm(Value_USD_r~ log(distw)+year+fta_wto+branch+ImporterISO3, 3 data = dat_est_0201, family = poisson, maxit=19)
別なエラー発生

R

1 エラー: inner loop 1; cannot correct step size 2 追加情報: 警告メッセージ: 3step size truncated due to divergence

このエラーについて調べてみてもよく分かりませんでした。。。

今後試すこと

ImpoterISO3の変数の数が多いということがエラーの原因であると考えられるため、変数の数を少なくしてみてプログラムが正常に走るかを検証してみたいと思います。

======

前提・実現したいこと

R言語を用いて、貿易データをポアソン回帰分析しようと考えています。
glm関数のポアソン分布を用いているのですが、エラーメッセージが表示されてしまいます。

R言語を使って2週間程度のレベルですので、初歩的なミスでしたらごめんなさい。
また説明に不足点がありましたら教えてください。

どなたか、よろしくお願いいたします。

発生している問題・エラーメッセージ

glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, でエラー: 'x' の中に NA/NaN/Inf があります

該当のソースコード

R

1#元データ読み込み 2dat_est_0201 <- read.csv("dat_est_0201.csv") 3names(dat_est_0201) 4 5#因子型に変換 6dat_est_0201$ImporterISO3 <- as.factor(dat_est_0201$ImporterISO3) 7dat_est_0201$year <- as.factor(dat_est_0201$year) 8dat_est_0201$fta_wto <- as.factor(dat_est_0201$fta_wto) 9dat_est_0201$branch <- as.factor(dat_est_0201$branch) 10 11#ポアソン回帰分析 12#目的変数:輸出額 13#説明変数:輸出年、距離対数、貿易協定、ブランチ、輸出国 14res4 <-glm(Value_USD_r~ log(distw)+year+fta_wto+branch+ImporterISO3, 15data = dat_est_0201, family = poisson) 16 17glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, でエラー: 18 'x' の中に NA/NaN/Inf があります

該当のデータ

分析に用いる変数の説明

  • ImporterISO3: 輸出相手国の3文字表記
  • year: 貿易年
  • distw: 輸出国と輸入国間の距離
  • Value_USD_r: 輸出額
  • fta_wto: 貿易協定の有無データ
  • branch: ブランチの有無データ

貿易データ

R

1str(dat_est_0201) 2 3'data.frame': 2267 obs. of 11 variables: 4 $ DID : Factor w/ 10319 levels "AUS_ABW_1994",..: 11 12 13 14 15 16 17 1769 1770 1771 ... 5 $ ImporterISO3 : Factor w/ 198 levels "ABW","AFG","AGO",..: 1 1 1 1 1 1 1 34 34 34 ... 6 $ year : Factor w/ 12 levels "2004","2005",..: 1 2 3 4 5 6 7 8 9 10 ... 7 $ distw : num 15670 15670 15670 15670 15670 ... 8 $ gdp_o : num 6.13e+11 6.93e+11 7.47e+11 8.53e+11 1.06e+12 ... 9 $ gdp_d : num 2.23e+09 2.33e+09 2.42e+09 2.62e+09 2.79e+09 ... 10 $ Value_USD_0201: int 0 0 0 0 0 0 0 20059554 24973217 74507349 ... 11 $ Weight_kg_0201: int 0 0 0 0 0 0 0 1249833 2401694 13567991 ... 12 $ fta_wto : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ... 13 $ branch : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 2 2 2 ... 14 $ Value_USD_r : num 0 0 0 0 0 ... 15

試したこと

欠損値データの確認

欠損値はないことを確認

R

1na_count <- sapply(dat_est_0201, function(y) any(is.na(y))) 2print(na_count) 3 4 DID ImporterISO3 year 5 FALSE FALSE FALSE 6 distw gdp_o gdp_d 7 FALSE FALSE FALSE 8Value_USD_0201 Weight_kg_0201 fta_wto 9 FALSE FALSE FALSE 10 branch Value_USD_r 11 FALSE FALSE

問題となっている説明変数の特定

ImporterISO3を除去した時のみ、プログラムは正常に走った
→ImporterISO3を説明変数とすることに問題あり
イメージ説明

説明変数の数がデータ数を上回っていないことを確認

2267 > 198(ImporterISO3)+12(year)+2(fta_wto)+2(branch)

R

1str(dat_est_0201) 2 3'data.frame': 2267 obs. of 11 variables: 4 $ DID : Factor w/ 10319 levels "AUS_ABW_1994",..: 11 12 13 14 15 16 17 1769 1770 1771 ... 5 $ ImporterISO3 : Factor w/ 198 levels "ABW","AFG","AGO",..: 1 1 1 1 1 1 1 34 34 34 ... 6 $ year : Factor w/ 12 levels "2004","2005",..: 1 2 3 4 5 6 7 8 9 10 ... 7 $ distw : num 15670 15670 15670 15670 15670 ... 8 $ gdp_o : num 6.13e+11 6.93e+11 7.47e+11 8.53e+11 1.06e+12 ... 9 $ gdp_d : num 2.23e+09 2.33e+09 2.42e+09 2.62e+09 2.79e+09 ... 10 $ Value_USD_0201: int 0 0 0 0 0 0 0 20059554 24973217 74507349 ... 11 $ Weight_kg_0201: int 0 0 0 0 0 0 0 1249833 2401694 13567991 ... 12 $ fta_wto : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ... 13 $ branch : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 2 2 2 ... 14 $ Value_USD_r : num 0 0 0 0 0 ... 15

==11/24 追記==

各変数データの詳細

distwのデータの中身についての質問がありましたので、各データ内容の詳細について追記しておきます。
(データの分かりやすい見せ方が思いつかなかったので、Excelにて失礼します。)

distw(貿易国間の距離)

0データは含まれていません。
2267データのそれぞれに、貿易国間のnumデータがあります。
イメージ説明

Value_USD_r(輸出額)

貿易していない国同士も含まれていますので、0データがあります。
イメージ説明

ImpoterISO3(輸出相手国)

198種類の国名コードが含まれています。
イメージ説明

year(貿易年)

2004年から2015年までのデータが含まれています。
イメージ説明

fta_wto

貿易協定の有無ですので、二値データとなっています。
イメージ説明

branch

ブランチの有無ですので、二値データとなっています。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2019/11/24 08:54

distwの値はどうなってますでしょう。どれかの値がゼロだったりしませんか?
nyosubro0706

2019/11/24 09:10

0の値はありませんでした。 目的変数のValue_USD_rに関しては0データがありますが、おそらくエラーの原因では無いですかね。。 念の為、各変数データの詳細について追記しておきます。
guest

回答1

0

的外れかもしれませんが、glm()の中になぜyearが2回も出てくるのかな?と疑問に思いました。

R

1説明変数:輸出年、距離対数、貿易協定、ブランチ、輸出国 2res4 <-glm(Value_USD_r~ year+log(distw)+year+fta_wto+branch+ImporterISO3, 3data = dat_est_0201, family = poisson)

投稿2019/11/26 08:52

編集2019/11/26 10:35
kotoraemon

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyosubro0706

2019/11/26 22:18

ご回答ありがとうございます。 yearのご指摘ありがとうございます。完全に見落としていました。。 修正してプログラムを走らせてみましたが、同様にエラーが発生する模様です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問