問題タブ [multinomial]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - R の multinom 関数を使用した多項回帰
Cross-Validated に質問を投稿することを考えていましたが、ここに来ることにしました。nnet パッケージの multinom() 関数を使用して、雇用、失業、または年齢と教育を条件とする労働力からの確率を推定しています。解釈の助けが必要です。
1 つの従属カテゴリ変数雇用状況 (EmpSt) と 2 つの独立カテゴリ変数、年齢 (Age) と教育レベル (Education) の次のデータセットがあります。
レベルの概要は次のとおりです。
- まず、推定式(モデル)とは
通話の推定式 (モデル) を特定したい
df$EmpSt<-relevel(df$EmpSt,ref="Employed")
multinom(EmpSt ~ Age + Education,data=df)
研究論文に書き留めることができます。私の理解では、Employed は基本レベルであり、この呼び出しのロジット モデルは次のとおりです。
ここで、i と n はそれぞれ変数の年齢と教育のカテゴリです (混乱を招く表記で申し訳ありません)。multinom() によって生成されるロジスティック モデルについての私の理解が間違っている場合は、訂正してください。出力が多いため、テストの概要は含めません。以下に、 call の出力のみを含めます>test
。
multinom() によって生成されたロジット モデルについての私の理解が正しいとすれば、係数はベース レベルが採用されている場合のログ オッズです。実際のオッズを取得するには、実際のオッズを取得する呼び出しexp(coef(test))
でアンチログします。
次の質問に移ります。
- 第二に、確率
年齢と教育の組み合わせに基づいて、失業者と雇用者の実際の確率を取得する方法があるかどうか疑問に思います。長い質問で申し訳ありません。ご協力いただきありがとうございます。追加の説明が必要な場合はお知らせください。
r - 応答としてカウントの行列を使用した Multinom
multinom
、パッケージのヘルプによるとnnet
、「応答は、K クラスのそれぞれのカウントとして解釈される、K 列の因子または行列である必要があります。」2 番目のケースでこの関数を使用しようとすると、エラーが発生しました。
これが私がしていることのサンプルコードです:
ここで私が得るもの:
どうすればこの問題を解決できますか?
おまけの質問: multinom を要因の予測子と共に使用できることにも気付きましたpredictor <- factor(c(1,2,2,3,1,2,3,3,1,2))
。多項線形ロジット回帰は連続または二分予測子でのみ機能する必要があるため、これが数学的にどのように可能であるかを理解できません。
matlab - 多項係数の効率的な Matlab 実装
多項係数を計算したい:
満たされているところn=n0+n1+n2
この演算子の Matlab 実装は、関数で簡単に実行できます。
ただし、インデックスが 170 より大きい場合、階乗は無限になりNaN
、場合によっては生成され180!/(175! 3! 2!) -> Inf/Inf-> NaN
ます。
他の投稿では、 CとPythonのこのオーバーフローの問題を解決しました。
- Cの場合:「すべての階乗からリストを作成し、リスト内のすべての数字の素因数分解を見つけ、数字が完全に削減されるまで、一番上のすべての数字を一番下の数字でキャンセルできます" .
- Python の場合: 「factorial(n) = gamma(n+1) という事実を利用し、ガンマ関数の対数を使用し、乗算の代わりに加算を使用し、除算の代わりに減算を使用します」 .
最初の解決策は非常に遅いように思われるため、2 番目のオプションを試しました。
元の実装と log_gamma の実装を次のコードと比較します。
ただし、次のヒストグラムに示すように、一部のケースでは結果がわずかに異なります。
したがって、私の実装が正しいと仮定する必要がありますか、それとも数値エラーが数の相違を正当化しないでしょうか?
r - R: 他のすべての変数に依存する各変数の回帰
にはR
、次のものがありますdata.frame
。
multinom
変数名を明示的に使用せずに、変数ごとに のような回帰関数を当てはめたいと思います。つまり、次の結果を得たいと考えています。
しかし、 for ループでは、変数名を使用せずに (任意の に同じコードを使用できるようにdata.frame
)。これに似たもの:
(このコードは機能しません。)
私の質問は些細なことかもしれませんが、どうすればよいかわかりません。
ありがとう!
r - 多項ロジット モデルとネストされたロジット モデル
プログラム R で mlogit パッケージを使用しています。データを元のワイド形式からロング形式に変換しました。これは変換された data.frame のサンプルで、これを「long_perp」と呼んでいます。独立変数はすべて個人固有のものです。データセットには 4258 の一意の観測があります。
'act2' は従属変数で、船が接近したときに水に浮かぶ鳥が行うことができる選択で構成されます。飛ぶ、飛び込む、または何もしない。これらの確率が、data.frame の残りの独立変数、つまり船の進路に対する垂直距離 (pdist)、海の状態 (sea)、速度 (avgknots)、海岸までの距離 (shore) などとどのように関連しているかに興味があります。変数は、二分変数、因子変数、および連続変数で構成されます。
2 つの多項ロジット モデルを実行しました。1 つはすべての選択オプションを含み、もう 1 つはサブセットのみを含みます。次に、これらのモデルを hmftest() 関数と比較して、IIA の仮定をテストしました。結果は控えめに言っても混乱を招きました。2 つのモデルのコードとテスト出力を含めます (コードでモデルの指定を間違えた場合に備えて)。
ご覧のとおり、カイ二乗統計量は負です! 私は、1. 何か間違ったことをしている、または 2. IIA に違反していると思います。この結果は、選択サブセット (飛行、潜水) に当てはまりますが、IIA の仮定は選択サブセット (なし、潜水) で支持されますか? これは私を混乱させます。
次に、IIA の仮定を緩和する方法として、ネストされたモデルの定式化を試みました。選択肢をネスト 1 = なし、ネスト 2 = フライ、ダイブとしてネストしました。これは論理的な断絶のように思えるので、私には理にかなっています。鳥は反応するかどうかを決定し、次にどの反応を行うかを決定します。
ネストされたロジット モデルを実行する方法がわかりません (mlogit の 2 つのビネット、Croissant vignetteとTrain vignette を読んだ後でも)。
クロワッサン ビネットの例に従って分析を実行すると、次のエラーが発生します。
このエラー メッセージについて少し読みましたが、完全な分離が原因で発生する可能性があります。私はデータのいくつかの表を見てきましたが、4,000 以上の観測値と 2 つ以上の水準 (3 つある) を持つ因子変数が 1 つしかないため、これが起こっているとは思いません。
これらの特定の問題に関するヘルプは大歓迎ですが、質問に答えるために使用できる別の分析も受け付けています。私は主に、船の進路に対する垂直距離の関数としての飛行確率に関心があります。
ありがとう、ティム
r - R パッケージ nnet の関数 multinom は多項確率の重みをどのように計算しますか?
私は、私のタイトルの質問に対する理論的な答えを知っています。これについては、こちらまたはスタックオーバーフローに関する以前の質問で説明されています。私の問題は、いくつかの数値の丸めを考慮しても、関数に適合した係数を使用して計算した確率の重みが、同じ関数から直接取得した重みとはまったく異なることです (を介して)。とでこれらの重みを数値的に計算しようとしましたが、両方の実装で同じ結果が得られましたが、実際には から返された値とは異なります。R
multinom
predict(fit, newdata = dat, "probs")
Java
R
predict
predict(..., "probs")
関数のR
関数の実装を見つける方法を知っていますmultinom
か?
r - nnet パッケージを使用して R の多項ロジットの適合度を評価する
nnet パッケージの関数を使用してmultinom()
、R で多項ロジスティック回帰を実行します。nnet パッケージには、p 値計算と t 統計計算が含まれていません。このページの両側 z 検定を使用して p 値を計算する方法を見つけました。多項ロジットの検定統計量を計算する 1 つの例を示すために (実際には t 統計量ではありませんが、同等です)、Wald の統計量を計算します。
係数の 2 乗をとり、係数の標準誤差の 2 乗で割ります。ただし、尤度比検定は、ロジスティック回帰の適合度の好ましい尺度です。尤度関数の理解が不十分なため、各係数の尤度比統計を計算するコードの書き方がわかりません。multinom()
関数からの出力を使用して、各係数の尤度比統計を計算する方法は何でしょうか? ご協力いただきありがとうございます。
r - サンプルサイズと確率が異なる場合の効率的な多項サンプリング
この質問は、さまざまなサンプル サイズと確率を持つ多項分布からの効率的なサンプリングに関するものです。以下に、私が使用したアプローチについて説明しますが、インテリジェントなベクトル化で改善できるかどうか疑問に思っています。
複数の集団間での生物の分散をシミュレートしています。集団からの個体は、確率 で集団に分散j
します。母集団 1 の初期存在量が 10 で、母集団 1、2、3への分散確率がそれぞれ与えられると、次の式で分散プロセスをシミュレートできます。i
p[i, j]
c(0.1, 0.3, 0.6)
rmultinom
これを拡張して、n
ソース母集団を考慮することができます。
上記p
は、ある母集団 (列) から別の母集団 (行) に移動する確率の行列でありX
、初期母集団サイズのベクトルです。集団の各ペア間で分散している個体数 (およびそれらが存在する場所に残っている個体数) は、次のようにシミュレートできるようになりました。
i
ここで、行 th 列の要素の値は、人口から人口へj
移動する個体の数です。この行列の は、新しい人口サイズを示します。j
i
rowSums
これを何度も繰り返したいのですが、確率行列は一定ですが、(事前定義された) 初期存在量は変化します。次の小さな例はこれを実現しますが、より大きな問題では非効率的です。結果のマトリックスは、集団の初期存在量が異なる5つのシミュレーションのそれぞれについて、3つの集団のそれぞれにおける分散後の存在量を示します。
この問題をより適切にベクトル化する方法はありますか?