1

我创建了一个 for 循环以形成具有特征的线性模型,并在 for 循环的每个循环中删除一个特征。使用这个 for 循环,我想取出每个特征的 pvalues。

下面是我的假数据和 for 循环。

 #fake data
z <- c(0.91629,  1.32580, -1.09940, 0.33601, 0.28795, 1.59050, 0.68193, -1.5944,  0.32160, -1.30810, -3.8569)
x <- c(0.35391, -0.84966,  0.17623, 2.39960, -0.50007, 0.70983, 0.61825, -1.7655, -0.44426, 0.01343, 3.0556)
c <- c(1.32060, -0.29756,  0.60097, 1.91580, -0.13838, -1.77920, -0.625670, -0.30979,  0.86718, -0.27289, 2.9607)
v <- c(-0.49864, -0.61754,  0.17977, 1.17100,  0.77713, -0.50157,  0.021347,  1.32660,  0.11048,  0.79202, -1.3138)
b <- c(-0.39620,  1.30740,  1.09030, 0.45662,  0.48579, -0.17219,  0.387560, -0.98518, -0.47283,  0.27918, 8.7742)
n <- c(-0.79369, -0.050101,  0.89823, 0.80320,  0.32670,  0.39969, -0.547320, -0.23154, -0.46198, -0.25495, 1.1776)

L <- data.frame(rbind(z,x,c,v,b,n))


names(L) <- c("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9","P10", "SysResponse")

L

#my function
Remove <- c("P1", "P5", "P2", "P8", "P9", "P4", "P3", "P6", "P7", "P10")
for (i in 1:length(Remove)){


  fit3 <- lm(as.formula(paste('SysResponse~',paste(Remove, collapse="+"))), data=L);
  b <- summary(fit3)$coefficients[,4]; # p-value
  print(b)
  Remove = Remove[-1];


}

这将为您提供每个步骤中各个特征的 pvalues。(忽略Nans。我只是没能做出好的假数据。)

我在这里尝试做的不是将一堆数字作为我的输出,而是想创建一个表格,其中包含每个步骤中每个特征的 pvalues。

所以我的输出应该是这样的:

   D1 D2 D3 ..... D10
P1  1  .  .
P2  2  6  22
P3  3  8  45
P4  4  15  64
P5  5  17   .
P6  6  15  353
P7  7  11  12
P8  8  4   45
P9  9  96  23
P10 10  12 12

因为 P1 和 P5 将被删除。

请在这里帮助我,我被卡住了

4

2 回答 2

1

这是你想要的吗?

Remove <- c("P1", "P5", "P2", "P8", "P9", "P4", "P3", "P6", "P7", "P10")
b <- matrix(rep(NA, 100), nrow = 10)
for (i in 1:length(Remove)){


  fit3 <- lm(as.formula(paste('SysResponse~',paste(Remove, collapse="+"))), data=L)
  b[i,] <- if(length(summary(fit3)$coefficients[,4]) == 10){summary(fit3)$coefficients[,4]}else{
    c(rep(NA, 10-length(summary(fit3)$coefficients[,4])), summary(fit3)$coefficients[,4])
  } 
  #print(b)
  Remove = Remove[-1]


}

> b
      [,1] [,2] [,3] [,4] [,5]       [,6]       [,7]       [,8]       [,9]      [,10]
 [1,]   NA   NA   NA   NA  NaN        NaN        NaN        NaN        NaN        NaN
 [2,]   NA   NA   NA   NA  NaN        NaN        NaN        NaN        NaN        NaN
 [3,]   NA   NA   NA   NA  NaN        NaN        NaN        NaN        NaN        NaN
 [4,]   NA   NA   NA   NA  NaN        NaN        NaN        NaN        NaN        NaN
 [5,]   NA   NA   NA   NA  NaN        NaN        NaN        NaN        NaN        NaN
 [6,]   NA   NA   NA   NA  NaN        NaN        NaN        NaN        NaN        NaN
 [7,]   NA   NA   NA   NA   NA 0.05965568 0.01732815 0.04548212 0.02498853 0.04486418
 [8,]   NA   NA   NA   NA   NA         NA 0.53777567 0.65398542 0.73020052 0.77532750
 [9,]   NA   NA   NA   NA   NA         NA         NA 0.38472799 0.97510236 0.45831503
[10,]   NA   NA   NA   NA   NA         NA         NA         NA 0.30062420 0.37796597
于 2018-02-08T09:49:18.843 回答
0

试试这个代码:

pvalue3d <- NULL

for (i in 1:length(Remove)){


  fit3 <- lm(as.formula(paste('SysResponse~',paste(Remove, collapse="+"))), data=train2);
  b <- summary(fit3)$coefficients[,4]; # p-value
  pvalue3d <- rbind(pvalue3d, b);

  Remove = Remove[-1];

}

PS:在您的示例中 train2 未定义

于 2018-02-08T08:28:06.047 回答