为什么是';曲线';如此不同于';行';和';点数';在R?

为什么是';曲线';如此不同于';行';和';点数';在R?,r,plot,lines,points,curve,R,Plot,Lines,Points,Curve,我想用离散广义贝塔分布()拟合频率数据 数据如下所示: 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 , 85

我想用离散广义贝塔分布()拟合频率数据

数据如下所示:

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)
获取日志表格 离散广义beta分布的线性回归 情节

图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.


 图2正确使用曲线的方法:指定“n”此处需要指定
n
的原因是函数取决于
长度(x)

此处,通过
曲线
提供给函数的
x
的长度是
n

如果您坚持使用默认的
n=101
,但使用长度为101的向量
xx
,则这是您的绘图:

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")


既不是巫毒也不是虫子!:)

zmf
只是一个通用函数,就像直线的公式
y=mx+b
或a
y=x**2
它们有通用形式,我们可以绘制,但是如果你用数据拟合它们或设置一些参数(y-截距、斜率等),这将改变图形的形状和位置curve@rawr但是在
@FrankWANG中使用的函数是相同的。请注意,
曲线
log=“xy”
参数被忽略,因为
add=TRUE
。由于前面的
plot
命令,在不带参数的情况下应用对数。这并不能解释这种差异。用粗体表示的问题的答案似乎是,
都是正确的,但是
曲线
有问题。更有趣的问题是,怎么了?我没有太多要补充的解释,但请检查一下当您将
n=length(Rank)
添加到调用
curve
时会发生什么。如果在
plot
命令中指定
xlim=range(Rank)
,而不是
c(1,80)
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")
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.
zmf = function(x) exp(co[[1]]+ co[[2]]*log(length(x)+1-x) + co[[3]]*log(x))
                                           ^^^^^^^^^
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")