大數(shù)據(jù)時代的“小數(shù)據(jù)”系列1 cox-stuart趨勢檢驗

為什么要用趨勢檢驗

在客觀世界存在各種各樣隨時間變動的數(shù)據(jù)怒详,很多時候我們都想要知道數(shù)據(jù)變化隨時間的發(fā)展趨勢如何酿傍,常用的方式是我們使用回歸的參數(shù)方法擬合出一條直線烙懦,然后判斷其趨勢。這樣的方法往往受多方面的因素影響赤炒,比如單調(diào)的趨勢不一定是線性的氯析,也不一定能有一個顯函數(shù)來表達。其次參數(shù)檢驗的方法受限于數(shù)據(jù)量莺褒,有時候我們得到的數(shù)據(jù)很少掩缓,不適合做回歸等參數(shù)方法。比如當(dāng)我們開發(fā)的APP上線新功能遵岩,我們需要在短時間內(nèi)判斷其是否帶來用戶的增長你辣,流量的增長,以便做出相應(yīng)的策略尘执;或者當(dāng)出現(xiàn)某種疫情的時候舍哄,我們迫切希望了解到疫情是否得到控制等...... Cox和Stuart提出的基于符號檢驗的非參數(shù)方法就能有效的解決之一問題

舉個例子說明
以下是天津機場從1995年1月到2003年12月的108個月旅客吞吐量數(shù)據(jù)

數(shù)據(jù)展示.png
趨勢.png

光從數(shù)字和趨勢圖看,我們能否說這個趨勢是增長還是減少誊锭,還是都不明顯呢表悬,似乎是增長,但是又不總是增長丧靡。

對此我們可以做如下處理

step1 做出假設(shè)


假設(shè).png

step2 取數(shù)據(jù)對
(X1,X1+c)... (X(n-c),Xn)
這里 當(dāng)n為偶數(shù) c=n/2 ; 當(dāng)n為奇數(shù) c= (n+1)/2

step3 計算符號
計算 Dt = Xt -X(t+c)
計算 S+ (Dt為正)和 S-(Dt為負) 的個數(shù)
顯然蟆沫,當(dāng)無趨勢時 S+ 或S- 服從p=0.5 的二項分布,如果S+大温治,則可能存在下降趨勢饭庞。
所以有該檢驗的統(tǒng)計量如下:


檢驗統(tǒng)計量.png

Scala 版本

import breeze.stats.distributions._
import scala.collection.mutable.ListBuffer

 /**
    *  計算二項分布的分布函數(shù)
    * @param binomial
    * @param n
    * @return
    */
  def pbinom(binomial: Binomial, n: Int) = {
    var p = 0.0
    if (n >= binomial.n) {
      p = 1
    } else {
      for (i <- 0 to n) {
        p += binomial.probabilityOf(i)
      }
    }
    p
  }
  
/**
    * CoxStuart趨勢檢驗
    * @param timeSeries
    * @param AlternativeHypothesis
    * @return
    */
  def CoxStuart(timeSeries: Seq[Double],
               AlternativeHypothesis: String = hypothesis.GROWTHREND) = {
    
    val length = timeSeries.length

    val ts = if (length % 2 != 0) {
      timeSeries.drop(length / 2 + 1)
    } else timeSeries

    val pre = ts.slice(0, ts.length / 2)
    val pro = ts.slice(ts.length / 2, ts.length)
    val sign = new ListBuffer[Double]()
    for (i <- 0 until length / 2   ) {
      sign.append(pre(i) - pro(i))
    }
    val spositive = sign.count(_ > 0)
    val snagtive = sign.count(_ < 0)

    def min(n: Int, g: Int) = {
      if (n > g) g else n
    }

    val binomial = Binomial((length / 2), 0.5)

    val p = AlternativeHypothesis.toUpperCase match {
      case "REDUCETREND" => pbinom(binomial, snagtive)
      case "NOTREND" => pbinom(binomial, min(snagtive, spositive)) * 2
      case _ => pbinom(binomial, spositive)
    }
    coxstuer((ts.length / 2), spositive, snagtive, p)
  }

    val source: BufferedSource = Source.fromFile("TJAir.csv")
    val data = source.getLines().map(_.toDouble)
    val coxstuer1 = CoxSturt(data.toSeq)
    println("p-value =" + coxstuer1.pvalue)


Scala 算法得出 p-value = 0.004536670169793693


R 語言版本

#數(shù)據(jù)加載
TJair <- read_csv("TJAir.csv")
#繪制趨勢圖
plot(TJair$TJair,type = "l")
# cox_stuert 趨勢檢驗
#  假設(shè)檢驗
#h0:無趨勢 ,h1:上升趨勢
len <- length(TJair$TJair)  

clen <-if(len%%2 == 0){
  len/2
} else{
  (len+1)/2
}

pvcont <- TJair$TJair
D <- pvcont[1:clen] - pvcont[(clen+1):len]
## 符號計算
spositive <- sum(sign(D) == 1)
snegative <- sum(sign(D) == -1)
## 結(jié)果檢驗
pbinom(spositive,clen,0.5)
pbinom(spositive,54,0.5)


[1] 0.00453667

R語言 計算結(jié)果 p-value = 0.00453667

參考資料:《非參數(shù)統(tǒng)計》第四版 吳喜之 趙博娟

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罐盔,一起剝皮案震驚了整個濱河市但绕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖捏顺,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件六孵,死亡現(xiàn)場離奇詭異,居然都是意外死亡幅骄,警方通過查閱死者的電腦和手機劫窒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拆座,“玉大人主巍,你說我怎么就攤上這事∨泊眨” “怎么了孕索?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長躏碳。 經(jīng)常有香客問我搞旭,道長,這世上最難降的妖魔是什么菇绵? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任肄渗,我火速辦了婚禮,結(jié)果婚禮上咬最,老公的妹妹穿的比我還像新娘翎嫡。我一直安慰自己,他們只是感情好永乌,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布惑申。 她就那樣靜靜地躺著,像睡著了一般翅雏。 火紅的嫁衣襯著肌膚如雪硝桩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天枚荣,我揣著相機與錄音碗脊,去河邊找鬼。 笑死橄妆,一個胖子當(dāng)著我的面吹牛衙伶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播害碾,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼矢劲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慌随?” 一聲冷哼從身側(cè)響起芬沉,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤躺同,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后丸逸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹋艺,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年黄刚,在試婚紗的時候發(fā)現(xiàn)自己被綠了捎谨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡憔维,死狀恐怖涛救,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情业扒,我是刑警寧澤检吆,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站程储,受9級特大地震影響咧栗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虱肄,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望交煞。 院中可真熱鬧咏窿,春花似錦、人聲如沸素征。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽御毅。三九已至根欧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間端蛆,已是汗流浹背凤粗。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留今豆,地道東北人嫌拣。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像呆躲,于是被迫代替她去往敵國和親异逐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容