R 中的多元回归模型存在问题



首先让我道歉,但我是一名生物学家,从生物信息学世界开始,因此在R编程和统计学领域。 我必须使用来自库(mvdalav(的数据(Penta(对多线性回归模型进行分析。

我必须尝试不同的模型,包括通常用于此数据集的 PLS 模型 (https://rdrr.io/cran/mvdalab/f/README.md(

但是,他们要求我们使用更多的模型来使用数据,我很迷茫,因为数据似乎总是给我错误:

1(正态多元回归模型:


> mod2<-mod1<-lm(Penta1$log.RAI~.,Penta1)
> summary(mod2)
Call:
lm(formula = Penta1$log.RAI ~ ., data = Penta1)
Residuals:
ALL 30 residuals are 0: no residual degrees of freedom!
Coefficients: (15 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept)   -1.000e-01         NA      NA       NA
Obs.NameAAWAA  8.500e-01         NA      NA       NA
Obs.NameAAYAA  5.600e-01         NA      NA       NA
Obs.NameEKWAP  1.400e+00         NA      NA       NA
Obs.NameFEAAK  4.000e-01         NA      NA       NA
Obs.NameFSPFR  7.400e-01         NA      NA       NA
Obs.NameGEAAK -4.200e-01         NA      NA       NA
Obs.NameLEAAK  5.000e-01         NA      NA       NA
Obs.NamePGFSP  1.000e+00         NA      NA       NA
Obs.NameRKWAP  2.080e+00         NA      NA       NA
Obs.NameRYLPT  5.000e-01         NA      NA       NA
Obs.NameVAAAK  1.114e-15         NA      NA       NA
Obs.NameVAAWK  3.300e-01         NA      NA       NA
Obs.NameVAWAA  1.530e+00         NA      NA       NA
Obs.NameVAWAK  1.550e+00         NA      NA       NA
Obs.NameVEAAK  6.100e-01         NA      NA       NA
Obs.NameVEAAP  2.800e-01         NA      NA       NA
Obs.NameVEASK  3.000e-01         NA      NA       NA
Obs.NameVEFAK  1.670e+00         NA      NA       NA
Obs.NameVEGGK -9.000e-01         NA      NA       NA
Obs.NameVEHAK  1.630e+00         NA      NA       NA
Obs.NameVELAK  6.900e-01         NA      NA       NA
Obs.NameVESAK  3.800e-01         NA      NA       NA
Obs.NameVESSK  1.000e-01         NA      NA       NA
Obs.NameVEWAK  2.830e+00         NA      NA       NA
Obs.NameVEWVK  1.810e+00         NA      NA       NA
Obs.NameVKAAK  2.100e-01         NA      NA       NA
Obs.NameVKWAA  1.810e+00         NA      NA       NA
Obs.NameVKWAP  2.450e+00         NA      NA       NA
Obs.NameVWAAK  1.400e-01         NA      NA       NA
S1                    NA         NA      NA       NA
L1                    NA         NA      NA       NA
P1                    NA         NA      NA       NA
S2                    NA         NA      NA       NA
L2                    NA         NA      NA       NA
P2                    NA         NA      NA       NA
S3                    NA         NA      NA       NA
L3                    NA         NA      NA       NA
P3                    NA         NA      NA       NA
S4                    NA         NA      NA       NA
L4                    NA         NA      NA       NA
P4                    NA         NA      NA       NA
S5                    NA         NA      NA       NA
L5                    NA         NA      NA       NA
P5                    NA         NA      NA       NA
Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:    NaN 
F-statistic:   NaN on 29 and 0 DF,  p-value: NA

2(研究逐步方法提供的简化模型。目的是比较训练组和测试组的简化模型和完整模型的RMSE。

step(lm(log.RAI~.,data = penta),direction = "backward") Error in step(lm(log.RAI ~ ., data = penta), direction = "backward") : AIC is -infinity for this model, so 'step' cannot proceed

3(根据 AIC 的标准和调整后的 R2 找到最佳模型

4( PLS 模型 -->符合以下数据的内容:https://rdrr.io/cran/mvdalab/f/README.md

5(还可以使用具有lm.ridge ()函数或类似函数的岭回归方法进行研究 6(最后,我们将研究具有套索项目的lars ()函数的LASSO方法。

我对为什么 data.frame 给出这些错误以及如何开发分析感到非常迷茫。任何部分的帮助将不胜感激

亲切问候

看完小插图后,Penta 是从药物发现中获得的一些数据,第一列是唯一标识符。要进行回归或下游分析,您需要排除此列。对于以下步骤,我只需将Penta[,-1]作为输入数据

对于第一部分,这有效:

library(mvdalab)
data(Penta)
summary(lm(log.RAI~.,data = Penta[,-1]))
Call:
lm(formula = log.RAI ~ ., data = Penta[, -1])
Residuals:
Min       1Q   Median       3Q      Max 
-0.39269 -0.12958 -0.05101  0.07261  0.63414 
Coefficients:
Estimate Std. Error t value Pr(>|t|)   
(Intercept) -0.80263    0.92495  -0.868  0.40016   
S1          -0.09783    0.03895  -2.512  0.02489 * 
L1           0.03236    0.04973   0.651  0.52576   
P1          -0.10795    0.08521  -1.267  0.22587   
S2           0.08670    0.04428   1.958  0.07043 . 

AIC的第二部分也可以:

step(lm(log.RAI~.,data = Penta[,-1]),direction="backward")
Start:  AIC=-57.16
log.RAI ~ S1 + L1 + P1 + S2 + L2 + P2 + S3 + L3 + P3 + S4 + L4 + 
P4 + S5 + L5 + P5
Df Sum of Sq    RSS     AIC
- P3    1   0.00150 1.5374 -59.132
- L4    1   0.00420 1.5401 -59.080

如果要选择带有AIC的模型,则可以使用上述模型。对于调整后的 R^2,我认为很可能有软件包可以做到这一点

对于 lm.ridge,执行相同的操作:

library(MASS)
fit=lm.ridge(log.RAI~.,data = Penta[,-1])

对于 lars、套索,您需要在矩阵中包含预测因子等,所以让我们做

library(lars)
data = as.matrix(Penta[,-1])
fit = lars(x=data[,-ncol(data)],y=data[,"log.RAI"],type="lasso")

最新更新