R:如何不均匀地标准化数据集

问题描述 投票:0回答:1

所以我有一个 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))
r normalization
1个回答
0
投票

我们可以利用

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
© www.soinside.com 2019 - 2024. All rights reserved.