library(ISLR2)
names(Weekly)[1] "Year" "Lag1" "Lag2" "Lag3" "Lag4" "Lag5"
[7] "Volume" "Today" "Direction"
我选择的 Weekly 数据集. 用函数 cor() 计算相关性矩阵式时, R 报错, 错误信息:
x必需为数值.
这是什么意思?
Weekly 数据集包含下列 9 个变量:
library(ISLR2)
names(Weekly)[1] "Year" "Lag1" "Lag2" "Lag3" "Lag4" "Lag5"
[7] "Volume" "Today" "Direction"
其中变量 Direction 不是数值型 (numeric) 的. 它表示股票的涨跌, 取值为 Down 或 Up.
我们使用负号 - 语法, 可以从数据集中删去这个变量:
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
-9, 是因为变量 Direction 在数据集中的第9 个变量, 你可以在 names(Weeky) 中数一数. 如果你想让 R 来告诉你, 到底 Direction 在 names(Weekly) 中排第几, 可以用 match() 函数:match("Direction", names(Weekly))[1] 9
综上所述, 你可以把 cor(Weekly[, -9]) 写为 cor(Weekly[, -match("Direction", names(Weekly))]).
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 等) 会自动帮你完成哑变量的转变, 用户无需手工设置变量.