天天看點

拓端tecdat|R語言平滑算法LOESS局部權重回歸、三次樣條、變化點檢測拟合電視節目《白宮風雲》線上收視率

此示例基于電視節目的線上收視率。我們将從抓取資料開始。

# 加載軟體包。
packages <- c("gplot2", "MASS", "reshpe", "splnes", 
    "XML")

      

分析的系列是亞倫·索爾金 (Aaron Sorkin) 的 《白宮風雲》。

if (!fle.eiss(fie)) {
    # 解析HTML内容。
    html <- htmlPrse(lis?si=17ectn=a")
    # 根據id選擇表格。
    tml <- pahppl(html, //tal[@d='Tle']"[1] ?
    # 轉換為資料集。
    da <- reHTML(hml)
    # 第一個資料行。
    head(da )
    # 儲存本地副本。
    write.csv(ata[, -3], fle)

# 讀取本地副本
daa <- red.sv(fie)
# 檢查結果
str(dat)

      
拓端tecdat|R語言平滑算法LOESS局部權重回歸、三次樣條、變化點檢測拟合電視節目《白宮風雲》線上收視率

​Mean​

​ 是每集的平均評分,是以我們有一個參數, ​

​Count​

​ 是每集的投票數,是以我們有一個樣本大小。使用标準誤差方程

拓端tecdat|R語言平滑算法LOESS局部權重回歸、三次樣條、變化點檢測拟合電視節目《白宮風雲》線上收視率

,我們将計算每個評分的“誤差幅度”。請注意,由于有幾集收視率非常高,是以收視率分布不正常。

# 計算季
daa$saon <- 1 + (daX - 1)%/%22
# 特殊情況
at$sasn[which(dta$sesn > 7)] <- c(7, NA)
# 因子變量
daa$saon <- fator(aa$sesn)

      

我們對資料采取的最後一步是添加季編号,以便以後能夠在繪圖上區分它們。 除了兩個特例(最後一季有 23 集,一個節目是電影特輯)外,《白宮風雲》每一季 都有 22 集。我們使用除以 22 的餘數來計算季,修複特殊情況,并将變量分解為繪圖目的。

# 計算季 
asaon <- 1 + (aX - 1)%/%22
#  特殊情況
dtseson[wich(dtsasn > 7)] <- c(7, A)
# 因子變量
dtseson <- fctor(dasasn)

      

最後的圖使用 95% 和 99% 的置信區間來可視化不确定性。

qlot(dta =dat, x = X, y = mu, clr =sasn, gem = "pont") + 
  genge(es(yin = u - 1.96*se, ymx = u + 1.96*se), alpa = .5) +
  golie(as(yin =mu - 2.58*se, yax = mu + 2.58*e), apa = .5) +

      
拓端tecdat|R語言平滑算法LOESS局部權重回歸、三次樣條、變化點檢測拟合電視節目《白宮風雲》線上收視率

該圖對于每個季節的平均收視率會更有用,這些收視率很容易用該​

​ddply()​

​ 函數檢索 。還計算了最小和最大集數,以便能夠繪制每個季節的水準段。由于我們将之前的繪圖儲存為 ​

​ggplot2​

​ 對象,是以添加線條隻需要對額外的圖形元素進行編碼并将其添加到儲存的元素之上。

# 計算季平均值。
men <- dply(daa,.(easn), summrs, 
      ma = mean), 
      xmi= in(X, 
      xmx = ma(X)
# 将平均值添加到繪圖中。
g + go_eme(daa = eas, 
                as( xmin, max,  = mean, en= man))      
拓端tecdat|R語言平滑算法LOESS局部權重回歸、三次樣條、變化點檢測拟合電視節目《白宮風雲》線上收視率

變化點檢測算法

如果您的目标是找到系列中的突然變化,請使用變化點檢測算法。

# PELT算法計算變化點。
p <- tmean(atamu, 'PELT')
# 提取結果。
xmin <- c(0, max[-legh(xmax)])
# 繪圖。
gem_segnt(dat = eg)
      
拓端tecdat|R語言平滑算法LOESS局部權重回歸、三次樣條、變化點檢測拟合電視節目《白宮風雲》線上收視率

平滑算法:LOESS(局部權重回歸)和三次樣條

現在讓我們平滑這個系列。基本圖都将使用相同的資料,我們将在其上疊加一條通過不同方法計算的趨勢線。

# 繪圖
 plot(data 
          x = X,
          y = mu,
          alpa = I0.5),
          gom = line") 

      

平滑資料的最簡單方法是使用局部多項式,我們将其應用于每個季節的分數,然後應用于它們的去趨勢值。更複雜的平滑方法使用 splines 。它僅用于最後一個圖中。

# 每一季的LOESS平滑

  LOESS(se = FALSE) + 
  goln(y = tmu,neyp= dhe"+
as(colo = sason)

      
拓端tecdat|R語言平滑算法LOESS局部權重回歸、三次樣條、變化點檢測拟合電視節目《白宮風雲》線上收視率
# 對去趨勢的數值進行LOESS平滑處理
  smooth(se = FALSE) + 
  eoin(es =memu)), itype = ") +

      
拓端tecdat|R語言平滑算法LOESS局部權重回歸、三次樣條、變化點檢測拟合電視節目《白宮風雲》線上收視率
# 立方樣條
g + 
  smooth( "m", ns(x, 8) 

      

三次樣條提供的資訊與我們從變化點檢測中了解到的情況幾乎相同:該系列有三個時期,是由于觀衆收視率的一次下降。

# 三次樣條和變化點
gmoth(method =  ~ ns(x, 8)) 

      
拓端tecdat|R語言平滑算法LOESS局部權重回歸、三次樣條、變化點檢測拟合電視節目《白宮風雲》線上收視率

繼續閱讀