【问题标题】:Covariance matrix calculation error in R, via calc.relimp()R 中的协方差矩阵计算错误,通过 calc.relim()
【发布时间】:2020-03-18 04:18:48
【问题描述】:

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

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

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")

【问题讨论】:

    标签: r matrix covariance


    【解决方案1】:

    我遇到了同样的问题。我从fit &lt;- lm(b ~ b1_categorical+ b2)更改了拟合函数 致fit &lt;- lm(b ~ factor(b1_categorical)+ b2)
    然后calc.relimp(fit, type = c("lmg"), rela = TRUE) 函数运行良好。

    【讨论】:

    • 这很有趣,也许在lm 调用中归类为factor 与编码为虚拟变量的效果类似,因为我已经成功了。
    • 真的很有帮助,factor() 也适合我!但是Metrics betasq, pratt, genizi and car do not work with groups or factors.
    【解决方案2】:

    我找到了解决方案:我将lm 中的预测变量分类字符因子更改为 0/1 虚拟变量。现在协方差矩阵计算和calc.relimp() 调用工作。我通过直接调用协方差矩阵函数cov(cbind(y,x)) 解决了更多问题,其中y 是响应值的列向量,x 是相应的回归矩阵。

    虽然这解决了我当前的问题,但我不清楚为什么这是必要的。我还使用此数据集运行了许多 lm()calc.relimp(),其中保留了相同的分类因子作为字符,并且它们工作正常,无需事先将分类因子转换为虚拟变量。那些lm 有不同的响应变量,但我不确定为什么这很重要。

    【讨论】:

    • 也有可能您的一个因变量只有一个唯一值
    猜你喜欢
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2011-09-18
    • 2012-11-22
    • 2015-03-31
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多