为什么'曲线'与R中的'线'和'点'如此不同?

Fra*_*ang 6 plot curve r lines points

我想用频率数据拟合离散广义β分布(DGBD).

数据如下所示:

freq = c(1116, 2067, 137 ,  124, 643,  2042, 55  ,47186,  7504, 1488, 211,   1608,   
         3517 , 7  , 896  ,  378, 17 ,3098, 164977  ,  601 ,  196, 637, 149 , 44,2 ,  1801, 882   , 636,5184,  1851,  776 ,   343   , 851, 33  ,4011,   209,  715 , 
         937 , 20,   6922, 2028 , 23,  3045 , 16 , 334,  31 ,  2)

Rank = rank(-freq, ties.method = c("first") )
p = freq/sum(freq)
Run Code Online (Sandbox Code Playgroud)

获取日志表单

log.f = log(freq)
log.p = log(p)
log.rank = log(Rank)
log.inverse.rank = log(length(Rank)+1-Rank)
Run Code Online (Sandbox Code Playgroud)

离散广义β分布的线性回归

co=coef(lm(log.p~log.inverse.rank + log.rank))
zmf = function(x) exp(co[[1]]+ co[[2]]*log(length(x)+1-x) + co[[3]]*log(x))
Run Code Online (Sandbox Code Playgroud)

情节

plot(p~Rank, xlim = c(1, 80), log = "xy",xlab = "Rank (log)", ylab = "Probability (log)")
curve(zmf, col="blue", add = T)
xx=c(1:length(Rank))
lines(zmf(xx)~xx, col = "red")
points(zmf(xx)~xx, col = "purple")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

图1.情节看起来像这样

我的问题是证明结果的正确方法是什么?线(点)或曲线?

更新:

虽然我没有弄清楚底层逻辑,但找到了解决方案:

@Frank提醒我注意在曲线中设置n长度的技巧.它解决了这个问题.因此,当我们尝试拟合原始数据时,曲线中的n是必要的.虽然在许多情况下,n被忽略.

plot(p~Rank, log = "xy",xlab = "Rank (log)", ylab = "Probability (log)")
curve(zmf, col="blue", add = T, n = length(Rank)) # set the the number of x values at which to evaluate.
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

图2使用曲线的正确方法:指定'n'

pla*_*pus 3

您需要在此处指定的原因n是因为您的函数取决于length(x)

zmf = function(x) exp(co[[1]]+ co[[2]]*log(length(x)+1-x) + co[[3]]*log(x))
                                           ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

x这里提供给您的函数的的长度curven

如果您坚持使用默认值,n=101但使用长度为 101 的向量来输入line和 ,则以下是您的绘图:pointsxx

plot(p~Rank, xlim = c(1,80), log = "xy",xlab = "Rank (log)", ylab = "Probability (log)")
curve(zmf, col="blue", add = T)
xx=seq(1,length(Rank),length.out=101)
lines(zmf(xx)~xx, col = "red")
points(zmf(xx)~xx, col = "purple")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

既不是巫术,也不是虫子!:)