سؤال

اكتشفت 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 الوثائق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top