全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5530 2
2022-03-23
请问 R语言做 滚动窗口 分位数回归为什么会出错?Error in rq.fit.br(x, y, tau = tau, ...) : Singular design matrix;
  for (k in 1:ncol(xcut)) {
      xxcut[, k] = (xcut[, k] - min(xcut[, k]))/(max(xcut[, k]) - min(xcut[, k]))
    }
    fit       = rq(ycut ~ xxcut, tau)
    pre       = predict(fit, quantiles = tau)
    VaR[i, j] = pre[length(pre)]
  }
}
  进行到这个循环就出错了

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2023-7-31 16:37:47
18134997492 发表于 2022-3-23 17:53
请问 R语言做 滚动窗口 分位数回归为什么会出错?Error in rq.fit.br(x, y, tau = tau, ...) : Singular d ...
请问楼主解决了吗
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-6-9 20:49:05
在 R 语言中使用分位数回归(quantile regression)时,遇到 "Singular design matrix" 错误通常意味着设计矩阵 X 在数学上不是满秩的。这可能由以下原因导致:

1. **多重共线性**:自变量间存在高度相关性。
2. **变量完全相同或缺少变异性**:某些自变量对所有观测值都是常数,没有提供任何信息去区分不同观测。
3. **过多的自变量相对于样本量**:如果模型中包含太多自变量而样本数量相对较小,可能会导致设计矩阵不是满秩。

对于你的代码片段:

```r
for (k in 1:ncol(xcut)) {
   xxcut[, k] = (xcut[, k] - min(xcut[, k]))/(max(xcut[, k]) - min(xcut[, k]))
}
fit    = rq(ycut ~ xxcut, tau)
```

问题可能出在将自变量标准化的过程中。如果 `xcut` 中某些列的最小值和最大值相同(即数据没有变化),这会导致除以零的错误,即使你没直接得到除零错误,也可能导致生成常数值或 NaN 的自变量。这些无变异性或非有效值会使得设计矩阵变为奇异。

解决方案:

1. **检查并处理多重共线性**:使用 `cor()` 函数查看自变量间的相关系数,移除高度相关的变量。
2. **验证数据完整性**:确保没有列的最小值和最大值相同。如果存在这种情况,考虑该变量是否需要包含在模型中或调整数据预处理方式。
3. **减少自变量数量**:如果可能,尝试减少使用过多的自变量,特别是当样本量有限时。

另外,由于你正在做滚动窗口回归,确保每个窗口内有足够的观测值来估计分位数回归。窗口太小可能会导致设计矩阵问题。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群