نموذج لوجيت مختلط متعدد الحدود
-
21-12-2019 - |
سؤال
اكتشفت mlogit
-حزمة لنماذج لوجيت متعددة الحدود بحثا عن تقدير نموذج لوجيت مختلط متعدد الحدود.بعد قراءة المقالة القصيرة الممتازة اكتشفت أنني لا أستطيع تطبيق بياناتي على أي من الأمثلة الموصوفة.
أنا الآن أكتب على أمل مساعدة مع مشكلتي وخلق مثال الحد الأدنى لتوضيح وضعي.
المشكلة هي كما يلي:هناك كلمات مع ساكن ' س ' في مكان ما.الآن أجريت تجربة مع أشخاص تم تكليفهم بالاستماع إلى هذه الكلمات والقول ما إذا كانوا قد سمعوا س أو ش أو بعض الحروف الساكنة الأخرى.يجب أن يتم تصميم هذا اعتمادا على بعض العوامل مثل موضع المقطع أو الكلمة الحقيقية/غير الحقيقية.
في المثال الحد الأدنى أنا خلقت 4 أشخاص وإجاباتهم مع موقف مقطع لفظي.
library(mlogit)
library(nnet)
set.seed(1234)
data <- data.frame(personID = as.factor(sample(1:4, 40, replace=TRUE)),
decision = as.factor(sample(c("Q","U", "other"), 40, replace=TRUE)),
syllable = as.factor(sample(1:4, 40, replace=TRUE)))
summary(data)
personID decision syllable
1:11 other:10 1:18
2:10 Q :18 2: 9
3:10 U :12 3: 5
4: 9 4: 8
بقدر ما أعرف nnet
في multinom
وظيفة لا تغطي نماذج مختلطة.
modNnet1 <- multinom(decision ~ syllable, data=data)
أولا استخدمت mlogit.data
- وظيفة لإعادة تشكيل الملف.بعد مناقشة مع زميل توصلنا إلى استنتاج مفاده أنه لا يوجد بديل.محددة.متغير.
dataMod <- mlogit.data(data, shape="wide", choice="decision", id.var="personID")
mod1 <- mlogit(formula = decision ~ 0|syllable,
data = dataMod,
reflevel="Q", rpar=c(personID="n"), panel=TRUE)
Error in names(sup.coef) <- names.sup.coef :
'names' attribute [1] must be the same length as the vector [0]
mod2 <- mlogit(formula = decision ~ personID|syllable,
data = dataMod,
reflevel="Q", rpar=c(personID="n"), panel=TRUE)
Error in solve.default(H, g[!fixed]) :
Lapack routine dgesv: system is exactly singular: U[3,3] = 0
لا أنا لا أعرف ماذا أفعل ، لذلك أطلب المساعدة هنا.ولكن أعتقد أن هذا النوع من المشاكل يمكن حلها مع mlogit
وأنا فقط لا أرى ذلك حتى الآن؛)
المحلول
ال rpar
تقبل الوسيطة المتغيرات البديلة المحددة فقط.ليست هناك حاجة لتحديد معرف الشخص المحدد في صيغة النموذج-يتم التعامل مع ذلك من خلال تضمين id.var = something
في ال mlogit.data
الأمر.على سبيل المثال ، إذا كان لديك متغير مشترك محدد بديل acov
, ، يمكنك السماح بمنحدرات عشوائية لـ acov
عبر لوحة:
N = 200
dat <- data.frame(personID = as.factor(sample(1:4, N, replace=TRUE)),
decision = as.factor(sample(c("Q","U", "other"), N, replace=TRUE)),
syllable = as.factor(sample(1:4, N, replace=TRUE)),
acov.Q = rnorm(N), acov.U = rnorm(N), acov.other = rnorm(N))
dataMod <- mlogit.data(dat, shape="wide", choice="decision", id.var="personID", varying = 4:6)
mlogit(formula = decision ~ acov|syllable, rpar = c(acov = "n"), panel = T, data = dataMod)
يبدو أنك تحاول احتواء نموذج مع اعتراض عشوائي ، شخص معين لكل بديل (وليس المنحدرات العشوائية).لسوء الحظ ، لا أعتقد أنه يمكنك القيام بذلك في mlogit
(لكن انظر هذا المنصب).
أحد الخيارات التي من شأنها أن تعمل لتناسب اعتراضات عشوائية في غياب المتغيرات المشتركة الخاصة البديلة هو MCMCglmm
.
library(MCMCglmm)
priors = list(R = list(fix = 1, V = 0.5 * diag(2), n = 2),
G = list(G1 = list(V = diag(2), n = 2)))
m <- MCMCglmm(decision ~ -1 + trait + syllable,
random = ~ idh(trait):personID,
rcov = ~ us(trait):units,
prior = priors,
nitt = 30000, thin = 20, burnin = 10000,
family = "categorical",
data = dat)
القضايا ذات الصلة هي الاختيار المسبق ، وتقارب سلاسل ماركوف ، وما إلى ذلك.مدونة مختبر فلوريان جايجر لديها برنامج تعليمي قصير حول النماذج متعددة الحدود عبر MCMCglmm
التي قد تجدها مفيدة ، بالإضافة إلى MCMCglmm
الوثائق.