日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

datatables 一行数据生成两行_一行代码搞定分组回归

發(fā)布時間:2025/3/20 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 datatables 一行数据生成两行_一行代码搞定分组回归 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在前面

在目前為止所有小伙伴們向大貓請教過的R問題中,大貓總結(jié)了最常遇見同時也是比較難的三個問題,分別是(1)事件研究法;(2)分組回歸;(3)滾動回歸。事件研究法在第一期中已經(jīng)講述,本期我們就來瞧瞧如何做分組回歸~

PS:由于微信的限制,給大貓留言的小伙伴超過48小時后大貓就不能回復(fù)你們了。所以如果想聯(lián)系大貓,可以按照文章最后的微信號加大貓微信哦。

題引入

很多時候我們需要處理的數(shù)據(jù)集中會有一個變量用于標(biāo)記變量所在的組。例如下圖中,stkid(我們可以把它想象成股票代碼)有五種可能:a, b, c, d, e,每一個字母表示一只股票。y是因變量,可以想象成股票的日收益,x是自變量,可以想象成市場收益。我們希望對于每個股票,都跑一個如下回歸:

y = x

并且把系數(shù)都保存在輸出數(shù)據(jù)集中。

圖:樣例數(shù)據(jù)集

看似非常簡單,但其實想要高效優(yōu)美地實現(xiàn)是需要一定技巧滴。很多小伙伴大動干戈想把原數(shù)據(jù)集按照stkid的值拆成若干子數(shù)據(jù)集,并用for循環(huán)來做回歸——大可不必這樣。其實,要實現(xiàn)這一步只需要一行代碼哦。

為了便于說明問題,我們先構(gòu)造一個樣例數(shù)據(jù)集:

# 確定隨機數(shù)種子

# 想知道為什么要把42作為隨機數(shù)種子?在google中輸入“the answer to life the universe and everything”會有驚喜哦。

set.seed(42)

# 生成樣例數(shù)據(jù)集dt,其一共有100行。stkid代表分組變量,有a, b, c, d, e五個類別;x和y分別隨機生成

dt

要實現(xiàn)一行代碼完成分組回歸,需要用到data.table包!

驟分解

我們先把這一行優(yōu)雅的代碼放上來:

# result是輸出數(shù)據(jù)集

result

最終的輸出數(shù)據(jù)集是這個樣子的:

現(xiàn)在我們逐一分析這一行代碼。

  • keyby語句為data.table包中的分組語句,它能夠?qū)eyby中的每一個不同的值(這里為abcde)都分別跑一次回歸。
  • ".SD"的含義是Subset of Data,每一個.SD都代表一個由keyby所決定的分組。具體而言,如果此時keyby語句循環(huán)到'a',那么.SD就表示原數(shù)據(jù)集中所有stkid == 'a'的行。在這里,.SD用來作為回歸函數(shù)lm的輸入數(shù)據(jù)集。
  • coef函數(shù)用來提取回歸的系數(shù)。
  • 整行代碼的關(guān)鍵在as.list函數(shù)。我們先看看如果不加as.list結(jié)果會是怎樣的:

小伙伴們會發(fā)現(xiàn)此時每個組都有兩行觀測,其實他們分別對應(yīng)著回歸的intercept和coefficient。如果我們的回歸不是單自變量而是雙自變量,那么每個分組就會有三行觀測了,一行是截距,還有兩行是系數(shù)。

as.list的作用就在于,它把原來“豎著”的系數(shù)給“拉平”了,無論最終結(jié)果會出現(xiàn)幾個系數(shù),統(tǒng)統(tǒng)放到一行中顯示。其中的原理是,data.table最終的輸出必須是一個class為list的元素,符合條件的除了list自己,還包括 data.frame,data.table等。如果我們只加coef函數(shù)而不加as.list,那么最終輸出的是一個vector,data.table會自動把這個vector拉直(也就是上圖看到的這樣),而加了as.list之后,原來輸出vector就被打包成了list,變成了我們需要的樣子。

這時有的小伙伴可能想問,有沒有可能同時計算兩個不同的回歸方程?比如還是上面這個數(shù)據(jù)集,我想同時輸出帶系數(shù)的回歸結(jié)果和不帶系數(shù)的回歸結(jié)果,應(yīng)該怎么做?

還是只需要一行,大貓在這里給出答案(重點已經(jīng)用紅筆標(biāo)出來啦):

result

結(jié)果是:

是不是很神奇?至于原理,大家自己回去研究哦。

總結(jié)

以上是生活随笔為你收集整理的datatables 一行数据生成两行_一行代码搞定分组回归的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。