所以我有一个 30 到 100 之间的预期寿命值的数据集。我想将它们标准化在 0-1 之间,但我想做得不均匀?
基本上我有四个定义的间隔/断点值创建 5 个类:
断点 | 年龄 | 标准化值 |
---|---|---|
分钟 | 30 | 0 |
BP1 | 57 | 0.2 |
BP2 | 62 | 0.4 |
BP3 | 66 | 0.6 |
BP4 | 71 | 0.2 |
最大 | 100 | 1 |
我可以轻松地将它们重新分类为这五个类别,但我不知道使用这些断点计算归一化值。所有五个类别的范围均为 0.2,但每个类别的年龄范围会有所不同,例如第一类,0-0.2,年龄范围为 27 岁,第二类,0.2-0.4,年龄范围仅为 5 岁。
示例数据:
ages <- floor(runif(50, min = 30, max = 100))
我们可以利用
splines::bs
和 lm
,创建分段线性样条回归:
library(splines)
spline_fit <- lm(Normalised_value ~ bs(Age, knots=c(57,62,66,71),degree=1),data=df)
newdata <- data.frame(Age=30:100)
newdata$normalized <- predict(spline_fit,newdata=newdata)
newdata
Age normalized
1 30 1.416396e-16
2 31 7.407407e-03
3 32 1.481481e-02
4 33 2.222222e-02
5 34 2.962963e-02
6 35 3.703704e-02
7 36 4.444444e-02
8 37 5.185185e-02
9 38 5.925926e-02
10 39 6.666667e-02
11 40 7.407407e-02
12 41 8.148148e-02
13 42 8.888889e-02
14 43 9.629630e-02
15 44 1.037037e-01
16 45 1.111111e-01
17 46 1.185185e-01
18 47 1.259259e-01
19 48 1.333333e-01
20 49 1.407407e-01
21 50 1.481481e-01
22 51 1.555556e-01
23 52 1.629630e-01
24 53 1.703704e-01
25 54 1.777778e-01
26 55 1.851852e-01
27 56 1.925926e-01
28 57 2.000000e-01
29 58 2.400000e-01
30 59 2.800000e-01
31 60 3.200000e-01
32 61 3.600000e-01
33 62 4.000000e-01
34 63 4.500000e-01
35 64 5.000000e-01
36 65 5.500000e-01
37 66 6.000000e-01
38 67 6.400000e-01
39 68 6.800000e-01
40 69 7.200000e-01
41 70 7.600000e-01
42 71 8.000000e-01
43 72 8.068966e-01
44 73 8.137931e-01
45 74 8.206897e-01
46 75 8.275862e-01
47 76 8.344828e-01
48 77 8.413793e-01
49 78 8.482759e-01
50 79 8.551724e-01
51 80 8.620690e-01
52 81 8.689655e-01
53 82 8.758621e-01
54 83 8.827586e-01
55 84 8.896552e-01
56 85 8.965517e-01
57 86 9.034483e-01
58 87 9.103448e-01
59 88 9.172414e-01
60 89 9.241379e-01
61 90 9.310345e-01
62 91 9.379310e-01
63 92 9.448276e-01
64 93 9.517241e-01
65 94 9.586207e-01
66 95 9.655172e-01
67 96 9.724138e-01
68 97 9.793103e-01
69 98 9.862069e-01
70 99 9.931034e-01
71 100 1.000000e+00