我正在尝试使用AR(1)过程将Cochrane Orcutt程序应用于我的数据。当我使用cochrane.orcutt
包中的orcutt
函数时,会返回以下错误:
lm.fit中的错误(x,y,偏移=偏移,singular.ok = singular.ok,...):0(非NA)情况
我首先确保所有数据集都没有不完整的情况。
library(orcutt)
foo <- na.omit(foo)
model <- lm(1-ef ~ as.factor(dtype) + as.factor(p) + inc + ed + marg + as.factor(period) + as.factor(id), data = foo)
cochrane.orcutt(model)
代码行cochrane.orcutt(model)
产生错误。
这是我迄今为止所做的尝试:
1)为了进一步解决问题,我从第一个自变量开始,逐个添加它们以查看代码分解的位置。除了&#34; as.factor(id)&#34;之外,它们都是单独和组合工作的,这似乎是有害的变量。
2)我想也许有关于id变量的字符串性质的东西,所以我创建了一个因子变量,其中数字代表每个人(在下面的数据中称为id2)。当我没有转换变量&#34; id2&#34;对于因子变量并将其作为数值变量运行,代码在完整模型和双变量模型中都可以正常运行。
当我倒退&#34; 1-ef&#34;在&#34; as.factor(id2)&#34;变量在双变量回归中,然后执行Cochrane Orcutt程序,R程序在程序中停止。
3)然后我想也许未使用的级别导致问题,所以我尝试了foo$id <- droplevels(foo$id)
并尝试将id变量转换为字符变量。这两种方法都没有解决问题。
我试图解决的总结:
从我所知道的,有一些因素可以通过一个因素&#34; id&#34;导致cochrane.orcutt
函数错误的变量。无论是R档还是它都会产生错误,说明没有非NA案件(我已经确定na.omit
的情况并非如此。
在上述所有情况中,R运行回归没有问题,只是Cochrane Orcutt估计。
有什么想法吗?谢谢你的帮助!
以下是演示错误的数据子集:
foo <- structure(list(ef = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9232, 1,
1, 1, 1, 1, 1, 0.68, 0.847222222222222), dtype = c("5", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "5", "5"), p = c("0", "1", "1", "1", "0", "0", "1", "1", "1", "0", "1", "1", "1", "1", "1", "1", "1", "0", "0"), inc = c(65327L, 38517L, 38888L, 39147L, 62022L, 63938L, 74663L, 37203L, 36548L, 57582L, 50425L, 50880L, 50372L, 51780L, 54763L, 54341L, 53988L, 36379L, 37290L), ed = c(0.400399151, 0.140407741, 0.158387284488, 0.167404993465, 0.278612155, 0.307604827205, 0.459637019, 0.174936986, 0.165744029552, 0.379544685, 0.23472389, 0.301241844, 0.296150413967, 0.308115565224, 0.229996365, 0.244502536866, 0.251595155313, 0.241661234658, 0.257054165719), marg = c(-27.04, 100, 48.14, 100, -28.98, -38.96, 39.94, 100, 100, -1.62, 31.7, 22.86, 8.72, 19.5, 31.94, 22.78, 40.36, -59.26, -50.7), period = c("112", "112", "113", "114", "112", "113", "112", "112", "113", "112", "112", "112", "113", "114", "112", "113", "114", "113", "114"), id = c("A000022", "A000055", "A000055", "A000055", "A000210", "A000210", "A000358", "A000361", "A000361", "A000362", "A000365", "A000367", "A000367", "A000367", "A000369", "A000369", "A000369", "A000370", "A000370"), id2 = c(1, 2, 2, 2, 3, 3, 4, 5, 5, 6, 7, 8, 8, 8, 9, 9, 9, 10, 10)), .Names = c("ef", "dtype", "p", "inc", "ed", "marg", "period", "id", "id2"), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L), na.action = structure(12L, .Names = "12", class = "omit"), class = "data.frame")
答案 0 :(得分:0)
coef(model)
有一些NA值表示lm
可以处理但cochrane.orcutt
无法处理的过度参数化。
正如您已发现的那样,您需要删除一些预测变量。