使用Cochrane Orcutt过程处理AR(1)数据时遇0非NA案例错误求助
解决Cochrane-Orcutt过程中出现的
0 (non-NA) cases错误 看起来你遇到的问题大概率是公式语法写错了,这是用R公式时很容易踩的坑!咱们一步步来排查解决:
最可能的根源:响应变量的写法错误
你写的1-ef在R的公式语法里,不是“1减去ef”的意思!R会把1识别为截距项,-是“移除”操作,所以1-ef实际是告诉模型移除截距,同时移除ef变量——这就导致模型没有了响应变量,自然会出现0 (non-NA) cases的错误。
要让R把1-ef当作算术运算,必须用I()函数包裹起来,明确告诉R“这是一个数值计算,不是公式语法”。
修正后的操作步骤
- 先确保基础线性模型能正常运行
library(orcutt) # 用I()包裹响应变量的算术运算 foo <- na.omit(foo) base_lm <- lm(I(1 - ef) ~ as.factor(dtype) + as.factor(p) + inc + ed + marg + as.factor(period) + as.factor(id), data = foo) # 检查模型是否正常输出 summary(base_lm) - 再将正常的线性模型传入
cochrane.orcutt()cochrane_model <- cochrane.orcutt(base_lm) summary(cochrane_model)
如果修正后还是有问题,再排查这些点
- 确认处理后的数据集
foo不是空的:运行nrow(foo),如果结果是0,说明na.omit()把所有行都删掉了,得检查原始数据的缺失情况。 - 检查响应变量
I(1 - ef)的有效性:运行summary(foo$ef),看看ef是不是全为1(这样1-ef全是0,模型也无法拟合),或者有没有隐藏的NA(虽然用了na.omit(),但可以再确认any(is.na(foo$ef)))。 - 检查因子变量的水平:如果某个因子(比如
id)的所有观测都是同一个水平,可能会导致共线性,你可以用sapply(foo[, c("dtype", "p", "period", "id")], function(x) length(unique(x)))查看每个因子的唯一水平数,确保至少有2个。
内容的提问来源于stack exchange,提问作者lispang
相关产品推荐
相关产品推荐

