在我的学士学位论文中,我试图对来自一项调查(见A.Blass公式(2008年))的常数和数据应用线性中值回归模型。这是对A. Blass等人(2008)提出的概率启发方法的尝试--利用启发式选择概率估计随机效用模型:电力可靠性偏好
我的因变量是常数和分配的对数-赔率变换。使用下列公式计算:
PE_raw <- PE_raw %>% group_by(sys_RespNum, Task) %>% mutate(LogProb = c(log(Response[1]/Response[1]),
log(Response[2]/Response[1]),
log(Response[3]/Response[1])))我的自变量是交货成本、最小订单数量和交货窗口,每个类别变量的级别为0、1、2和3。在这里,0表示无选项。
我尝试运行以下分位数回归(使用R的quantreg包):
LAD.factor <- rq(LogProb ~ factor(`Delivery costs`) + factor(`Minimum order quantity`) + factor(`Delivery window`) + factor(NoneOpt), data=PE_raw, tau=0.5)但是,我遇到了以下错误,表示奇点:
Error in rq.fit.br(x, y, tau = tau, ...) : Singular design matrix我进行了线性回归,并应用R的别名函数进行进一步的研究。这使我了解到三种完美的多重共线性情况:
事后看来,这些案件都是有道理的。当R二分分类变量时,通过构造得到这些结果:交货成本1 +交货成本2+交货成本3=1,最小订购量1+最小订购量2+最小订购量3=1。重写给出了第一个公式。
看起来像个经典的假陷阱。为了解决这个问题,我尝试手动对数据进行二分法,并使用了以下公式:
LM.factor <- rq(LogProb ~ Delivery.costs_1 + Delivery.costs_2 + Minimum.order.quantity_1 + Minimum.order.quantity_2 + Delivery.window_1 + Delivery.window_2 + factor(NoneOpt), data=PE_dichomitzed, tau=0.5)我现在得到的不是错误消息,而是下面的内容:
Warning message:
In rq.fit.br(x, y, tau = tau, ...) : Solution may be nonunique当使用摘要函数时:
> summary(LM.factor)
Error in base::backsolve(r, x, k = k, upper.tri = upper.tri, transpose = transpose, :
singular matrix in 'backsolve'. First zero in diagonal [2]
In addition: Warning message:
In summary.rq(LM.factor) : 153 non-positive fis有人熟悉这个问题吗?我正在寻找替代的解决方案。也许我在使用rq()函数时出错了,或者数据可能被错误地描述了。
我很感谢您提供的任何意见,谢谢。
可复制示例
library(quantreg)
#### Raw dataset (PE_raw_SO) ####
# quantile regression (produces singularity error)
LAD.factor <- rq(
LogProb ~ factor(`Delivery costs`) +
factor(`Minimum order quantity`) + factor(`Delivery window`) +
factor(NoneOpt),
data = PE_raw_SO,
tau = 0.5
)
# linear regression to check for singularity
LM.factor <- lm(
LogProb ~ factor(`Delivery costs`) +
factor(`Minimum order quantity`) + factor(`Delivery window`) +
factor(NoneOpt),
data = PE_raw_SO
)
alias(LM.factor)
# impose assumptions on standard errors
summary(LM.factor, se = "iid")
summary(LM.factor, se = "boot")
#### Manually created dummy variables to get rid of
#### collinearity (PE_dichotomized_SO) ####
LAD.di.factor <- rq(
LogProb ~ Delivery.costs_1 + Delivery.costs_2 +
Minimum.order.quantity_1 + Minimum.order.quantity_2 +
Delivery.window_1 + Delivery.window_2 + factor(NoneOpt),
data = PE_dichotomized_SO,
tau = 0.5
)
summary(LAD.di.factor) #backsolve error
# impose assumptions (unusual results)
summary(LAD.di.factor, se = "iid")
summary(LAD.di.factor, se = "boot")
# linear regression to check for singularity
LM.di.factor <- lm(
LogProb ~ Delivery.costs_1 + Delivery.costs_2 +
Minimum.order.quantity_1 + Minimum.order.quantity_2 +
Delivery.window_1 + Delivery.window_2 + factor(NoneOpt),
data = PE_dichotomized_SO
)
alias(LM.di.factor)
summary(LM.di.factor) #regular results, all significant链接到示例数据+代码:GitHub
发布于 2020-05-19 11:43:46
当使用虚拟解释变量进行分位数回归时,Solution may be nonunique行为并不少见。
参见,例如,四重常见问题
回归分位数的估计是一个线性规划问题。最优解可能不是唯一的。
对于正在发生的事情,罗杰·肯克(quantreg的作者)在2006年的r-帮助上给出了一个更直观的解释。
当从具有偶数不同值的样本计算中值时,其值本质上存在一些模糊性:中间统计数据之间的任何值都是“一个”中值。类似地,在回归设置中,由单纯形算法的"br“版本解决的优化问题,经过修改以进行一般分位数回归,可以确定这种类型可能存在非唯一性的情况。当存在“连续”协变量时,这是非常罕见的,当协变量是离散的时,它是相对常见的,至少当τ是从理性主义中选择的时候。对于单变量分位数R提供了几种通过插值解决这类歧义的方法,"br“不尝试这样做,而是返回第一个顶点解。
你的第二个警告-- "153非正fis“--是一个与rq如何计算局部密度有关的警告。有时,分位数回归函数的局部密度可能为负(这显然是不可能的)。如果发生这种情况,rq会自动将其设置为零。再次引用常见问题的话
这通常是无害的,导致对标准误差的保守(更大)估计,但是,如果报告的非阳性fis数量相对于样本大小较大,那么它就是模型不规范的迹象。
https://stackoverflow.com/questions/61889890
复制相似问题