欢迎光临散文网 会员登陆 & 注册

拓端tecdat|R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白

2021-10-27 22:02 作者:拓端tecdat  | 我要投稿

原文链接:http://tecdat.cn/?p=24067

原文出处:拓端数据部落公众号

此示例基于电视节目的在线收视率。我们将从抓取数据开始。


  1. # 加载软件包。

  2. packages <- c("gplot2", "MASS", "reshpe", "splnes",

  3. "XML")


分析的系列是亚伦·索尔金 (Aaron Sorkin) 的 《白宫风云》。


  1. if (!fle.eiss(fie)) {

  2. # 解析HTML内容。

  3. html <- htmlPrse(lis?si=17ectn=a")

  4. # 根据id选择表格。

  5. tml <- pahppl(html, //tal[@d='Tle']"[1] ?

  6. # 转换为数据集。

  7. da <- reHTML(hml)

  8. # 第一个数据行。

  9. head(da )

  10. # 保存本地副本。

  11. write.csv(ata[, -3], fle)


  12. # 读取本地副本

  13. daa <- red.sv(fie)

  14. # 检查结果

  15. str(dat)


Mean 是每集的平均评分,所以我们有一个参数, Count 是每集的投票数,所以我们有一个样本大小。使用标准误差方程

,我们将计算每个评分的“误差幅度”。请注意,由于有几集收视率非常高,因此收视率分布不正常。


  1. # 计算季

  2. daa$saon <- 1 + (daX - 1)%/%22

  3. # 特殊情况

  4. at$sasn[which(dta$sesn > 7)] <- c(7, NA)

  5. # 因子变量

  6. daa$saon <- fator(aa$sesn)


我们对数据采取的最后一步是添加季编号,以便以后能够在绘图上区分它们。 除了两个特例(最后一季有 23 集,一个节目是电影特辑)外,《白宫风云》每一季 都有 22 集。我们使用除以 22 的余数来计算季,修复特殊情况,并将变量分解为绘图目的。


  1. # 计算季

  2. asaon <- 1 + (aX - 1)%/%22

  3. #  特殊情况

  4. dtseson[wich(dtsasn > 7)] <- c(7, A)

  5. # 因子变量

  6. dtseson <- fctor(dasasn)


最后的图使用 95% 和 99% 的置信区间来可视化不确定性。

  1. qlot(dta =dat, x = X, y = mu, clr =sasn, gem = "pont") +

  2. genge(es(yin = u - 1.96*se, ymx = u + 1.96*se), alpa = .5) +

  3. golie(as(yin =mu - 2.58*se, yax = mu + 2.58*e), apa = .5) +



该图对于每个季节的平均收视率会更有用,这些收视率很容易用该ddply() 函数检索 。还计算了最小和最大集数,以便能够绘制每个季节的水平段。由于我们将之前的绘图保存为 ggplot2 对象,因此添加线条只需要对额外的图形元素进行编码并将其添加到保存的元素之上。

  1. # 计算季平均值。

  2. men <- dply(daa,.(easn), summrs,

  3. ma = mean),

  4. xmi= in(X,

  5. xmx = ma(X)

  6. # 将平均值添加到绘图中。

  7. g + go_eme(daa = eas,

  8. as( xmin, max,  = mean, en= man))

变化点检测算法

如果您的目标是找到系列中的突然变化,请使用变化点检测算法。

  1. # PELT算法计算变化点。

  2. p <- tmean(atamu, 'PELT')

  3. # 提取结果。

  4. xmin <- c(0, max[-legh(xmax)])

  5. # 绘图。

  6. gem_segnt(dat = eg)

平滑算法:LOESS(局部加权回归)和三次样条

现在让我们平滑这个系列。基本图都将使用相同的数据,我们将在其上叠加一条通过不同方法计算的趋势线。


  1. # 绘图

  2. plot(data

  3. x = X,

  4. y = mu,

  5. alpa = I0.5),

  6. gom = line")



平滑数据的最简单方法是使用局部多项式,我们将其应用于每个季节的分数,然后应用于它们的去趋势值。更复杂的平滑方法使用 splines 。它仅用于最后一个图中。


  1. # 每一季的LOESS平滑


  2. LOESS(se = FALSE) +

  3. goln(y = tmu,neyp= dhe"+

  4. as(colo = sason)


  1. # 对去趋势的数值进行LOESS平滑处理

  2. smooth(se = FALSE) +

  3. eoin(es =memu)), itype = ") +




  1. # 立方样条

  2. g +

  3. smooth( "m", ns(x, 8)


三次样条提供的信息与我们从变化点检测中了解到的情况几乎相同:该系列有三个时期,是由于观众收视率的一次下降。


  1. # 三次样条和变化点

  2. gmoth(method =  ~ ns(x, 8))


最受欢迎的见解

1.R语言多元Logistic逻辑回归 应用案例

2.面板平滑转移回归(PSTR)分析案例实现

3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

4.R语言泊松Poisson回归模型分析案例

5.R语言混合效应逻辑回归Logistic模型分析肺癌

6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

7.R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病

8.python用线性回归预测股票价格

9.R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测


拓端tecdat|R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白的评论 (共 条)

分享到微博请遵守国家法律