r - R中协方差矩阵计算错误,通过calc.relimp()

标签 r matrix covariance

我从 calc.relimp() 对象上的一些 lm 调用中收到错误消息,并且不确定如何解决此问题或更好地进行故障排除。我有一个包含预测变量的数据集,其中包括两个分类变量和五个连续变量。我有一些响应变量,对于每个变量,我在 lm 中运行一组不同的预测变量,有时它们包括平方项或交互项。

我的 data.frame 中没有任何丢失的数据或 NA,但是某些模型似乎在 lm() 函数中运行良好,但在 lm 中运行 calc.relimp() 时出现此错误:

Error in cov.wt(y, wt = wt) : 'x' must contain finite values only

仅当特定分类预测变量 Treatment(2 个级别,字符)是模型的一部分时才会发生此错误,但包含它并不总是会导致此错误。

我相信该错误表明 calc.relimp() 函数在计算协方差矩阵时收到此错误,但我不确定该矩阵中使用了哪些值或如何更好地解决该问题。我已经仔细检查过我没有 NA 或丢失的数据。

我已经包含了下面的数据集和模型以及 calc.relimp() 调用,这些调用在其中一种情况下会导致错误。非常感谢任何帮助!

数据框:

exp_df<-structure(list(response = c(-7.59854557534419, -6.11372322139816, 
-5.26231304004255, -5.72145463155338, -6.36862211476643, -7.61900265561851, 
-7.13058686497619, -8.96170609504813, -6.48673799056386, -7.58453773635567, 
-7.09550547527033, -7.52680975468282, -8.86371619889984, -7.15280231344095, 
-9.90531908445649, -6.45437296041698, -7.49902186125677, -6.78590841237406, 
-7.68349533437632, -8.1696817768836, -10.6868849216951, -8.28785299034027, 
-5.0933635546202, -6.56749746635158, -5.5276877520019, -5.68522798427618, 
-8.0704844321303, -6.081176708526, -6.50662406338498, -7.54892094332027, 
-9.62372913076138, -2.35278086991753, -3.26091576932667, -3.34094262346613, 
-5.58578457844078, -3.9732208814056, -3.60094958539171, -6.21489091641707, 
-3.87303561313608, -4.43970202965744, -8.50176936097569, -5.98062942793468, 
-4.89816563068379, -4.2396572077735, -4.08205998285175, -4.89644338119708, 
-6.1461653509185, -6.03116565171581, -6.4195726682198, -5.4338431378733, 
-5.25805046427446, -6.66342099838612, -3.63392750579693, -2.98206365328999, 
-3.16710535360004, -3.30545943440104, -3.43455326583898, -3.88162711949682, 
-4.91310540493929, -4.52380144247737, -4.45238421982284, -3.59236170371706
), Treatment = c("C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "N", "N", "N", "N", 
"N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", 
"N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", 
"N"), AP = c(0.958910006922412, 1.38724149886511, 0.915165514128266, 
1.49660273085048, 0.623535562167281, 0.854105492936431, 0.709247427735812, 
0.738182587031943, 0.701728843036816, 0.715171161135021, 0.754586771829749, 
1.409864741623, 0.950389659841629, 1.51630684551058, 0.992966501396659, 
0.890959485171062, 0.666544049474755, 0.79409717063337, 0.749968048396645, 
0.75573366235722, 0.778130855050235, 0.742650153754373, 0.860254485174763, 
1.51175993687244, 1.05695004517418, 1.10903938319774, 0.958058048210046, 
0.938427364850423, 0.972052198723841, 0.93337392160933, 0.926959935957174, 
-1.10819297078147, -1.29741848120788, -0.809216664307748, -0.619991153881339, 
-0.777679079236677, -1.01105720876258, -1.52448909371956, -1.55634205464134, 
-1.55192679273139, -1.5314273624352, -1.53710412774799, -1.41983224733315, 
-0.718927708431874, -0.91471109918642, -0.882080534060665, -1.22404885657861, 
-1.12354671599127, -1.65477231623861, -1.68772918701563, -1.66195104056628, 
-1.68316090789802, -0.302479735698982, -0.442629469594843, -0.904562992515607, 
-0.650051075760721, -0.736383311840574, -1.11254519761707, -1.10637860932565, 
-1.13076466302353, -1.11759058803732, -1.13468885557262), WC = c(-1.11305930626715, 
-1.87377094505647, -1.03536960698654, -2.067995193258, -0.517438278449125, 
-0.926927735074016, -0.669661532977074, -0.721050031980395, -0.656308615913218, 
-0.68018201308799, -0.750183669210624, -1.87377094505647, -1.03536960698654, 
-2.067995193258, -1.11305930626715, -0.926927735074016, -0.517438278449125, 
-0.750183669210624, -0.669661532977074, -0.68018201308799, -0.721050031980395, 
-0.656308615913218, -0.517438278449125, -1.87377094505647, -0.926927735074016, 
-1.03536960698654, -0.721050031980395, -0.68018201308799, -0.750183669210624, 
-0.669661532977074, -0.656308615913218, 0.910109945832115, 1.15289025608403, 
0.526517055634094, 0.283736745382183, 0.486053670592109, 0.7854827199028, 
1.44422662838632, 1.48509464727872, 1.47942977337285, 1.45312857309556, 
1.46041198240311, 1.15289025608403, 0.283736745382183, 0.526517055634094, 
0.486053670592109, 0.910109945832115, 0.7854827199028, 1.44422662838632, 
1.48509464727872, 1.45312857309556, 1.47942977337285, 0.283736745382183, 
0.486053670592109, 1.15289025608403, 0.7854827199028, 0.910109945832115, 
1.45312857309556, 1.44422662838632, 1.47942977337285, 1.46041198240311, 
1.48509464727872), TMP = c(-0.80106357660266, -1.68703515117027, 
0.787293670102007, 0.0952956537299076, 0.965950736485032, 1.14248787378464, 
-0.470545353882089, -0.668673973823901, -0.588752627689013, 0.145145797581795, 
-1.15864270056773, -1.33851872672067, 1.34822704019927, 0.288633231521372, 
-0.638252984175761, 1.31420217075319, 1.36661742941165, -1.13345793701235, 
-0.404149159054249, 0.252753423682086, -0.316341675345151, -0.453925105370426, 
2.50629157868947, -0.809384300760865, 1.61184028549868, 2.04907576312762, 
0.290382173943721, 1.0197439501416, -0.838109346226441, -0.289672961075216, 
-0.279666893145624, -1.98721718117201, -1.84915676749726, 0.0914797797007637, 
0.965950736485032, 1.09669739459303, 0.686809007177131, -0.620339579376033, 
-1.16551127244647, 0.117671510066826, -0.47512440180125, -0.554409768295302, 
-1.84915676749726, 1.10586608931612, 0.14871787869028, 1.14248787378464, 
-1.68703515117027, 1.02514977060172, -0.513495127165762, -1.05332459842702, 
-0.289672961075216, 0.451942008165602, 1.7240375584029, 1.31420217075319, 
-0.80106357660266, 1.70564716919052, -0.988730343498175, 0.0697823005789453, 
0.613459443541268, 1.28532872945296, 0.375391350591117, -0.634341713823762
)), .Names = c("response", "Treatment", "AP", "WC", "TMP"), class = "data.frame", row.names = c(NA, 
-62L))

模型和相对重要性调用:

library(relaimpo)
mu2<-lm(response~Treatment+AP+WC+I(TMP^2), data=exp_df)
mu2RI<-calc.relimp(mu2, type = "lmg")

最佳答案

我也遇到了同样的问题。我将拟合函数从 fit <- lm(b ~ b1_categorical+ b2) 更改为 至fit <- lm(b ~ factor(b1_categorical)+ b2)
然后是 calc.relimp(fit, type = c("lmg"), rela = TRUE)功能运行良好。

关于r - R中协方差矩阵计算错误,通过calc.relimp(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38174526/

相关文章:

r - 转换数据框(按计数交叉表)

r - 比较 R 中的两个线性模型

c++ - 从另一个子 vector 或子矩阵创建 boost::numeric::ublas vector

scala - 如何为协变泛型类型参数设置别名

java - Scala,不喜欢 java 集合 API?

r - 使用R : How do I create a time-series object with dates?

r - R水平图,非连续纬度和经度值

algorithm - 按方位角指定的方向遍历矩阵

matlab - 获取矩阵中最大值的位置

generics - Kotlin 泛型类属性