作业三疑问解答

Hunan U

1 问题1

我选择的 Weekly 数据集. 用函数 cor() 计算相关性矩阵式时, R 报错, 错误信息:

x 必需为数值.

这是什么意思?

1.1 回复

Weekly 数据集包含下列 9 个变量:

library(ISLR2)
names(Weekly)
[1] "Year"      "Lag1"      "Lag2"      "Lag3"      "Lag4"      "Lag5"     
[7] "Volume"    "Today"     "Direction"

其中变量 Direction 不是数值型 (numeric) 的. 它表示股票的涨跌, 取值为 DownUp.

我们使用负号 - 语法, 可以从数据集中删去这个变量:

cor(Weekly[, -9])
              Year         Lag1        Lag2        Lag3         Lag4
Year    1.00000000 -0.032289274 -0.03339001 -0.03000649 -0.031127923
Lag1   -0.03228927  1.000000000 -0.07485305  0.05863568 -0.071273876
Lag2   -0.03339001 -0.074853051  1.00000000 -0.07572091  0.058381535
Lag3   -0.03000649  0.058635682 -0.07572091  1.00000000 -0.075395865
Lag4   -0.03112792 -0.071273876  0.05838153 -0.07539587  1.000000000
Lag5   -0.03051910 -0.008183096 -0.07249948  0.06065717 -0.075675027
Volume  0.84194162 -0.064951313 -0.08551314 -0.06928771 -0.061074617
Today  -0.03245989 -0.075031842  0.05916672 -0.07124364 -0.007825873
               Lag5      Volume        Today
Year   -0.030519101  0.84194162 -0.032459894
Lag1   -0.008183096 -0.06495131 -0.075031842
Lag2   -0.072499482 -0.08551314  0.059166717
Lag3    0.060657175 -0.06928771 -0.071243639
Lag4   -0.075675027 -0.06107462 -0.007825873
Lag5    1.000000000 -0.05851741  0.011012698
Volume -0.058517414  1.00000000 -0.033077783
Today   0.011012698 -0.03307778  1.000000000
match("Direction", names(Weekly))
[1] 9

综上所述, 你可以把 cor(Weekly[, -9]) 写为 cor(Weekly[, -match("Direction", names(Weekly))]).

1.2 补充说明

R 中, 变量 Direction 的类型是 factor:

str(Weekly$Direction)
 Factor w/ 2 levels "Down","Up": 1 1 2 2 2 1 2 2 2 1 ...

你可以把它理解成一种 “特殊的字符串”. 这里变量 Direction 取值 “Up”, “Down” 都是字符串.

factor 型变量都是定性的 (qualitative), 而不是定量的 (quantitative). 你们在统计或计量里肯定学过, 对于定性的预测变量, 跑回归前应该把它转化成哑变量 (dummy variable).

一般情况下, R 中用来跑回归的函数 (lm, tree 等) 会自动帮你完成哑变量的转变, 用户无需手工设置变量.