You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决‘$ operator is invalid for atomic vectors’错误?未用$符号却触发报错

报错原因与解决办法

报错原因

  1. NeweyWest()的返回值类型错误:NeweyWest()函数输出的是回归系数的协方差矩阵(属于原子向量/矩阵类),并非像lm()生成的带属性的模型对象。
  2. coefficients()函数的适配问题:当你调用coefficients(nw_model)时,该函数默认针对模型对象,会尝试访问object$coefficients属性,但矩阵/原子向量不支持$操作符,因此触发报错。
  3. 额外潜在问题:代码中rf <- as.numeric(data$ym)完全错误——ym是日期列,转成numeric会得到日期对应的整数,并非无风险利率,这会导致超额收益计算错误,进而出现“essentially perfect fit”的警告。

解决办法

1. 纠正NeweyWest的使用认知

Newey-West方法仅用于计算稳健协方差矩阵/标准误,不会生成新的回归系数,所有回归系数仍来自原OLS模型ols_model。

2. 修正代码

场景1:仅需展示OLS与NW的系数(两者系数完全一致)

data_plot <- data.frame(
  "Maturity" = c(1, 2, 3, 4, 5),
  "Coefficient" = c(coefficients(ols_model)[-1], rep(coefficients(ols_model)[-1], length(coefficients(ols_model))-1)),
  "Model" = c(rep("OLS", length(coefficients(ols_model))-1), rep("NW", length(coefficients(ols_model))-1))
)

场景2:需展示OLS与NW的标准误对比

先通过coeftest()生成带NW标准误的系数表,再提取所需数据:

# 生成带Newey-West标准误的系数结果
nw_coeftest <- coeftest(ols_model, vcov = nw_model)
# 分别提取OLS和NW的标准误
ols_se <- coeftest(ols_model)[, "Std. Error"][-1]
nw_se <- nw_coeftest[, "Std. Error"][-1]

# 构建绘图数据框
data_plot <- data.frame(
  "Maturity" = c(1, 2, 3, 4, 5),
  "Coefficient" = rep(coefficients(ols_model)[-1], 2),
  "Std.Error" = c(ols_se, nw_se),
  "Model" = c(rep("OLS", length(ols_se)), rep("NW", length(nw_se)))
)

3. 修正无风险利率计算错误

将错误的日期转numeric代码替换为实际的无风险利率列(需根据你的数据列名调整):

rf <- data$rf  # 假设数据中无风险利率列名为rf,替换为实际列名

内容的提问来源于stack exchange,提问作者user20396712

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:02:21