2011-07-13 70 views
3

比方說,我有10.000線(佔10.000人)和下面的表:選擇「相似」組 - 從概率開始?

id qualification gender age income 

當我選擇具有一定資格的所有人員(說「水管工」)我得到100線,具有某些性別,年齡和收入分配。

我現在想要做的是選擇某種測試組來檢查收入是否受到資質或其他屬性的分配。

這意味着(現在我回到我的問題)我想獲得另一組100行,具有相同的性別和年齡分佈(但具有不同的限定值)。這100行應該是隨機選擇的。

我的主要問題是,當我選擇隨機行時,我不知道如何編寫一個SQL命令來處理分佈(當然可以或許應該被看作是這種情況下的概率)。

預先感謝您!

回答

2

您似乎在試圖解決與this extremely thorny problem緊密相關的問題。

維基頁面描述了多種檢測數據庫中相關性的方法,其中包含對先前的pg-hacker討論(here's another)的參考,各種(被拒絕)修補程序提案以及討論該主題的科學論文。

如果它聽起來太棘手,我會第二次Catcall的pl/r建議。或者另一個適用的pl,就此而言。

順便說一句,你可能會發現PG-K均值太有用:

http://pgxn.org/dist/kmeans/doc/kmeans.html

除了PostStat(從來沒有嘗試過自己):

http://poststat.projects.postgresql.org/

+0

謝謝!我認爲這對於簡單的測試組檢查來說太複雜了。我會看看我是否可以用重量去代替。 – speendo

0
SELECT * from Table1 order by random() limit 100; 

random()對PostgreSQL有效。對於MySql,你可以使用RAND()而不是Random()

+1

你也一樣,似乎錯過了這部分要求:「具有相同的性別和年齡分佈(但具有不同的資質值)」。 –

1

stats.stackexchange.com可能會更好。

選擇隨機行很容易;匹配分佈是很難的。

可以寫一個存儲過程,

  • 多次隨機選擇100行,
  • 計算統計,
  • 並返回時,發現適合100行。

但是,這似乎很像在海灘上踢死鯨。而且,根據您的數據,它可能永遠不會返回。

在您花費大量時間嘗試在SQL中執行此操作之前,請考慮花一點時間來看看如何使用統計軟件(如R)來處理這些問題有多困難(或多麼容易)。

後來

剛剛發現,有一個名爲pl/R包。

PL/R是一種可加載的過程語言,使您能夠使用R編程語言編寫 PostgreSQL函數和觸發器。 PL/R 提供了R語言中功能編寫者在 中的大部分(如果不是全部)功能。

谷歌postgresql +statistics +r +pl爲文件和教程的其他鏈接。

+0

R將是好的(已經不得不放棄這個問題,並切換到R:http://stackoverflow.com/questions/6425713/smoothing-time-data-can-it-be-done-more-efficient)但當我們談論數百萬行時,我擔心R也不夠。 – speendo

+1

@Marcel:您可以通過從數百萬行獲取樣本來減少輸出到R或SAS或SPSS的行數?你最終會得到一個100行的樣本樣本;我不知道這是否使你的統計資料無效。 –

+0

也應該可以工作,但我可能也會使用權重(http://en.wikipedia.org/wiki/Statistical_weight)來代替(必須檢查它)。使用SQL,random()和概率分佈的解決方案會更加優雅(如果有的話)。 – speendo