【发布时间】:2021-03-18 23:46:00
【问题描述】:
我正在做一个联合练习。其中一部分是对一堆因子水平输出进行线性回归。我试图找出一个程序化是找到最佳选择。回归输出如下所示:
(Intercept) 3.8750 0.9960 3.890 0.00367 **
Screen10 -0.3750 0.6591 -0.569 0.58329
CellY -0.3750 0.6591 -0.569 0.58329
Price300 -0.8333 0.8022 -1.039 0.32599
Price500 -1.1667 0.8022 -1.454 0.17982
Battery8 1.1667 0.8022 1.454 0.17982
Battery12 1.8333 0.8022 2.285 0.04814 *
OSiOS 1.6667 0.8022 2.078 0.06752 .
OSWindows -1.6667 0.8022 -2.078 0.06752 .
没有显示的是截距表示的因子级别 Screen7、CellN、Price100、Battery4 和 OSAndroid。
我的最佳选择是具有最高系数或部分效用的因素,从上到下将是 Screen7 (0)、Price100 (0)、CellN(0)、Battery12(1.833)、OSiOS(1.6667)。
我正在尝试编写一个 for 循环来迭代每个因素级别的电池、电池、屏幕等,并找到系数的最大值并将其存储在一个列表中,以编程方式提供我在上面看到的内容。
目前为止:
for (n in colnames(design_DF)){
for (i in 2:length(design_DF)){
choice = rep(NA, length(design_DF)-1)
coef = dummy.coef(lm1)[i]
coef2 = coef$n
choice[i] = max(coef2)
}
}
grep 会给我 coefs 的索引,然后存储 coef 值和 0 代表缺失因子水平的系数。
问题如您所见,当最大值为 0 时,我似乎无法弄清楚如何将因子水平值存储在列表中。代码中 index 和 coef 变量的输出是为了说“价格”是:
> index = grep("Price", names(lm1$coefficients))
> index
[1] 4 5
> coef = c(lm1$coefficients[index], 0)
> coef
Price300 Price500
-0.8333333 -1.1666667 0.0000000
但该列表的最大值为 0,我需要能够存储 price100 作为列表中的变量。
谢谢
如果有帮助,这些是我的“指示”
which.max() 函数可用于确定与值列表中最大值关联的索引。例如,index = which.max(part_worths) 会将索引返回到part_worths 中的最大值。如果属性级别名称存储在字符串名称列表levels 中,则levels[index] 将返回具有最高部分价值的属性级别名称。
我尝试了以下解决方案,但供应给了我:
> sapply(choice[lengths(choice)>1], max)
Screen Cell Price Battery OS
0.000000 0.000000 0.000000 1.833333 1.666667
我似乎无法访问 screen.7、cell.N 等
【问题讨论】:
-
请编辑您的问题并澄清原始问题是什么,并澄清 dummy.coef 部分的合并取自答案,而不是原始问题的一部分。此外,发布的问题应具有完整的可重现代码和输入。有关提问的信息,请参阅r 标记的顶部。