簡體   English   中英

R中的日志日志概率圖

[英]Log Log Probability Chart in R

我確信這很容易,但是我一直在試圖找出如何在R中做到這一點。

我有一些數據,我試圖適應冪律分布。 為此,您需要在對數日志累積概率圖表上繪制數據。 y軸是數據頻率的LOG(如果您願意,則為對數概率),x軸是值的對數。 如果它是直線,則它符合冪律分布,並且梯度確定冪律參數。

如果我想要數據的頻率,我可以使用ecdf()函數:

我的數據集叫做Profits.negative,它只是一長串的交易利潤小於零(我將它們全部轉換為正數以避免以后記錄問題)。

所以我可以輸入

plot(ecdf(Profits.negative))

我得到了一個方便的經驗CDF功能。 我需要做的就是將兩個軸轉換為對數刻度。 我可以做x軸:

Profits.negative.logs <- log(Profits.negative)
plot(ecdf(Profits.negative.logs))

差不多了! 我只需要弄清楚如何記錄y軸! 但我似乎無法做到這一點,我無法弄清楚如何從ecdf對象中提取數字。 有人可以幫忙嗎?

我知道有一個power.law.fit函數,但這只是估計參數 - 我想繪制數據並查看它是否排列。

您可以使用poweRlaw包來擬合和繪制冪律。 這是一個例子。 首先,我們從重尾分布中生成一些數據:

set.seed(1)
x = round(rlnorm(100, 3, 2)+1)

接下來,我們加載包並創建一個數據對象和一個displ對象:

library(poweRlaw)
m = displ$new(x)

我們可以估算xmin和縮放參數:

est = estimate_xmin(m))

並設置參數

m$setXmin(est[[2]])
m$setPars(est[[3]])

然后繪制數據並添加擬合線:

plot(m)
lines(m, col=2)

要得到:

在此輸入圖像描述

數據生成首先( 你實際上是分開的 )):

set.seed(1)
Profits.negative <- runif(1e3, 50, 100) + rnorm(1e2, 5, 5)

記錄和ecdf

Profits.negative.logs <- log(Profits.negative)
fn <- ecdf(Profits.negative.logs)

ecdf返回函數,如果你想從中提取一些東西 - 最好查看函數的閉包:

ls(environment(fn))
# [1] "f"      "method" "n"      "nobs"   "x"      "y"      "yleft"  "yright"

那么,現在我們可以訪問xy

x <- environment(fn)$x
y <- environment(fn)$y

可能這就是你需要的。 實際上, plot(fn)plot(x,y,type="l")顯示出幾乎相同的結果。 要記錄y軸,您只需要:

plot(x,log(y),type="l")

這是使用ggplot2的方法:

library(ggplot2)

# data
  set.seed(1)
  x = round(rlnorm(100, 3, 2)+1)

# organize data into a df
  df <- data.frame(x = sort(x, decreasing = T),
                   pk <- ecdf(x)(x),
                   k <- seq_along(x))

# plot
  ggplot(df, aes(x=k, y= pk)) + geom_point(alpha=0.5) + 
    coord_trans(x = 'log10', y = 'log10') +
    scale_x_continuous(breaks = trans_breaks("log10", function(x) 10^x), labels = trans_format("log10", math_format(10^.x))) +
    scale_y_continuous(breaks = trans_breaks("log10", function(x) 10^x), labels = trans_format("log10", math_format(10^.x)))

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM