В R quantreg: длина dimnames не равна экстенту массива
Я новичок в R; пытаться понять quantreg
и столкнуться с тем, что может быть простой ошибкой. Я более или менее точно придерживаюсь примера кода, приведенного в справочном файле quantreg (и многих других онлайн-источниках), но с моим набором данных, а не с образцом данных. Я запускаю следующий код:
library(quantreg)
rq.xy.1 <- rq(y~-1+x1+x2+d1,tau=1:99/100,data=xy.df,na.action=na.omit,model=TRUE)
s2 <- summary(rq.xy.1,se="boot")
plot.summary.rqs(s2)
Первые строки выполняются нормально. На последней строчке (используя plot.summary.rqs
) Я получаю сообщение об ошибке:
Ошибка в `именах строк
<-
`(`*tmp*`, value = c("x1", "x2", "d1")): длина 'dimnames' [1] не равна экстенту массива
Я не определил источник ошибки. Вот что я понял до сих пор:
- Я могу создать фигуру без уверенности, просто отлично; то есть я могу бежать
plot.rqs(rq.xy.1)
и вернуть график коэффициентов (по квантилям) для каждой объясняющей переменной. Но я хочу доверия. - объект
rq.xy.1
является объектом классаrqs
(выходrq
является объектом классаrq
,rqs
или жеrq.process
и этотrqs
). - объект
s2
является объектом классаsummary.rqs
, - Это означает
s2
это список (я думаю? - это то, что я вижу на панели Environment RStudio); не уверен, что это важно; Я просканировал его, чтобы увидеть, есть ли полезный индикатор длины чего-тоdimnames
и не видел ничего, что казалось бы полезным - я звонил
traceback()
(основано на прочтении другой ветки онлайн-помощи), но это также не дало ничего полезного. - Я старался
model.matrix(y~-1+x1+x2+d1, data=xy.df
(основанный на чтении ошибки "длина dimnames" [1], не равной экстенту массива "в итоговой линейной регрессии в r), но опять же, это не дало мне никаких подсказок. Я думаю, что это потому, что ошибка появляется вplot.summary.rqs
скорее, чемsummary
, Если я могу использоватьmodel.matrix
Чтобы раскрыть источник моей ошибки, я не понимаю, как, и я был бы признателен за совет здесь.
На данный момент я застрял. Я искал много источников и просто не могу понять эту ошибку. Спасибо за вашу помощь.
Редактирует исходный вопрос под этой строкой:
Изменить 1. Подмножество моих данных (минимальное, чтобы воспроизвести проблему) здесь: https://www.dropbox.com/s/9mges3kuro6ty5s/tmp_data?dl=0
Редактировать 2. Я исследовал проблему более подробно, используя несколько подмножеств данных. Вот некоторая информация, которая может помочь. В моем фрейме данных есть четыре типа строк. Я помечу их заглавными буквами для удобства использования:
- A: y, x1, x2 - все NA. d1 = 0
- B: y, x1, x2 - все NA. d1 = 1
- C: y, x1, x2 все числовые (непрерывные). d1 = 1
- D: y, x1, x2 все числовые (непрерывные). d1=0
Похоже, что наличия одной или нескольких строк типа D достаточно для генерации ошибки, которую я отметил в вопросе выше. (Кроме того, если все строки имеют тип D, тогда rq() завершается ошибкой, потому что матрица дизайна является единственной.) Это любопытно. Quantreg должен работать нормально, когда одна из объясняющих переменных равна 0/1 (и действительно, rq() работает нормально). Что такого в plot.summary.rqs(), которая выдает ошибку, когда одна из объясняющих переменных является фиктивной (с вариацией)?
Изменить 3. Я выяснил, как решить проблему, снова исследуя эти подмножества. Я все еще не понимаю причину ошибки, но я могу избежать проблемы, включив константу в уравнение оценки:
library(quantreg)
rq.xy.1 <- rq(y~x1+x2+d1,tau=1:99/100,data=xy.df,na.action=na.omit,model=TRUE)
s2 <- summary(rq.xy.1,se="boot")
plot.summary.rqs(s2)
Поскольку я больше думал об отношениях, которые я пытаюсь оценить, я понял, что включение константы также является эконометрически правильным подходом. Таким образом, я считаю эту проблему решенной (пока что так или иначе).
Спасибо, Джимбоу, за вашу помощь - как уже отмечалось, я довольно плохо знаком с R, и попытка выяснить, как обеспечить минимальный набор данных, заставила меня попытаться воспроизвести проблему с подмножествами моих данных. Если бы я не попробовал это, я не сделал бы наблюдения в Редактировании 2 выше, и, вероятно, не пришел бы к этому счастливому выводу.