Rで多項ロジットモデルを設定および推定する方法


20

JMPで多項ロジットモデルを実行し、各パラメーター推定値のAICとカイ2乗p値を含む結果を取得しました。このモデルには、1つのカテゴリー結果と7つのカテゴリー説明変数があります。

次にmultinomnnetパッケージの関数を使用して、Rで同じモデルを構築すると考えていたものに適合させました

コードは基本的に:

fit1 <- multinom(y ~ x1+x2+...xn,data=mydata);
summary(fit1);

ただし、2つの結果は異なります。JMPでは、AICは2923.21、nnet::multinomAICでは3116.588です。

私の最初の質問は、モデルの1つが間違っているということです。

2つ目は、JMPが各パラメーター推定値のカイ2乗p値を提供することです。マルチノムでサマリーを実行fit1しても、推定値、AIC、および逸脱は表示されません。

私の2番目の質問はこうです:モデルのp値を取得し、使用するときに推定する方法はありnnet::multinomますか?

私が知っているmlogitは、このための別のRパッケージであり、その出力はp値が含まれてように見えます。ただし、mlogitデータを使用して実行することはできません。データは正しくフォーマットされていたと思いますが、無効な数式があったと言われました。私が使用したものと同じ式を使用しましたmultinomが、パイプを使用した別の形式が必要なようで、その仕組みがわかりません。

ありがとう。


2
引数Hess = TRUEを設定して、ヘッセ行列をmultinomから戻し、p値を手動で計算できます。ただし、mlogitライブラリを使用することをお勧めします(共変量が正しくスケーリングされない場合、nnetは収束の問題を抱えることがあります)。mlogitのビネットは非常に優れており、データを正しく設定するのに役立ちます。ビネットは通常の場所で見つけることができます:cran.r-project.org/web/packages/mlogit
Jason Morgan

回答:


9

この投稿は非常に古いので、あなたはすでにあなたのソリューションを見つけていると確信していますが、まだソリューションを探している私たちにとっては、http://youtu.be/-Cp_KP9mq94がどのようにmlogitパッケージを使用してRで多項ロジスティック回帰モデルを実行します。econonometrics academyのWebサイトにアクセスすると、彼女はすべてのスクリプト、RとSASおよびSTATAのデータ、またはSPSSのいずれかを持っています。

データを「長い」形式と「広い」形式の形式に変換する方法とその理由を説明するのはどの種類ですか。ほとんどの場合、変換が必要なワイド形式を使用しています。

https://sites.google.com/site/econometricsacademy/econometrics-models/multinomial-probit-and-logit-models


3

一般に、2つの異なるソフトウェア間のAIC値の違いは、まったく驚くことではありません。尤度の計算には、同じデータの異なるモデル間で同じ定数が含まれることがよくあります。開発者が異なれば、その定数の内外に何を残すかについて異なる選択をすることができます。心配する必要があるのは、2つのモデル間のAIC値の違いが異なる場合です。実際multinom()、同じX値を持つ行をどのように折りたたむかを変更できるようにするための引数に気付きました。これは逸脱のベースライン、したがってAICに影響します。summ引数の異なる値を試してみて、それが偏移に同意するかどうかを確認できます。JMPが何をしているかわからない!:)

推定係数と標準誤差が同じであれば、問題ありません。係数が同じでない場合、JMPが係数を計算するために異なるベースラインの結果を選択する可能性があることを忘れないでください。multinom()mlogit()たとえば、から異なる選択を行います。

multinom()のsummary()の結果からp値を取得するのは非常に簡単です。モデルを再現できないので、multinom()のヘルプページの例を次に示します。

library("nnet")
data("Fishing", package = "mlogit")
fishing.mu <- multinom(mode ~ income, data = Fishing)
sum.fishing <- summary(fishing.mu) # gives a table of outcomes by covariates for coef and SE
str(sum.fishing)
# now get the p values by first getting the t values
pt(abs(sum.fishing$coefficients / sum.fishing$standard.errors),
  df=nrow(Fishing)-6,lower=FALSE)

mlogitパッケージを理解するのは少し難しいことに同意します!ビネットを注意深く読んでください。彼らは助けます。


Fishingマルチノムを持つデータセットの他の(汎用)変数をどのように使用しますか?
グレッグマクファーレン14

@gmacfarlaneジャスト(multinom式にモード〜収入+ price.beach、...あなたがしたい変数を追加
atiretoo

@atiretoo pvalを取得する方法を探していたので、ありがとう!しかし、明確にするために-6はdfのどこから来たのですか?私のdfを取得するために何を数える必要がありますか?モデルには連続変数とカテゴリ変数(4つのカテゴリ)があります。それは5のdfでしょうか?また、釣りはすべてのデータセットで正しいですか?サンプルサイズの自由度です。
ケリー14

@atiretoo申し訳ありませんが、パッケージnnetを使用してロジット回帰を実行すると、実際に有効なdfが計算され、nnetオブジェクト内に格納されることがわかりました。したがって、モデルからdfを抽出して使用できます。mlogitオブジェクトに同じ情報が含まれるかどうかは確認していません。
ケリー14

@ケリーはあなたがそれを見つけてうれしい。
atiretoo 14

1

glmnetパッケージを使用して多項ロジットを実行することもできます。すべての変数を保持するように強制する方法はわかりませんが、可能だと確信しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.