R 中多元回归模型的问题

Issue with a multiple regression model in R

首先让我道歉,但我是一名生物学家,开始从事生物信息学领域,因此从事 R 编程和统计学。 我必须使用来自 Library(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) 最后我们将利用Lasso项目的lars ()功能研究LASSO方法

我对 data.frame 给出这些错误的原因以及如何进行分析感到非常困惑。任何部分的任何帮助将不胜感激

亲切的问候

Ok 看完小插图,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

如果您想 select 使用 AIC 建模,上面的方法可以。对于调整后的 R^2,我认为很可能有一些软件包可以做到这一点

对于lm.ridge,做同样的事情:

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

对于 lars、lasso,您需要将预测变量等放在矩阵中,所以让我们这样做

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