Answers:
...我刚刚注意到您那里有“回归”标签。如果您确实有回归问题,则无法查看响应的单变量分布来评估分布形状,因为它取决于x的模式。如果您要检查某种回归或GLM中的响应(y)变量是否具有对数正态分布或帕累托分布,且平均值在观察过程中有所不同,那么这将是一个非常不同的问题(但基本上归结为类似的分析在残差上)。您能否说明这是否是回归问题。目前,我的回答与评估单变量对数正态或帕累托
您在那里有一些完全不同的问题。
如何检查我的数据是否适合日志正态分布?
记录日志并执行正常的QQ图。查看并查看分布是否足够接近您的目的。
我想检查R是否我的数据符合对数正态分布或帕累托分布
从一开始就接受您认为没有任何分布是准确的描述。您正在寻找一个合理的模型。这意味着在小样本量下,您不会拒绝任何合理的选择,但是在足够的样本量下,您将全部拒绝。更糟糕的是,对于大样本量,您将拒绝完美的体面模型,而对于小样本量,您将不会拒绝不良模型。
这样的测试实际上并不是模型选择的有用基础。
简而言之,您感兴趣的问题-诸如“什么是该数据的良好模型,一个足够接近的模型可以使后续推断有用?” 拟合优度根本无法回答。但是,在某些情况下,拟合优度统计信息(而不是基于拒绝统计的拒绝规则得出的决策)在某些情况下可能会提供有关特定类型的缺乏拟合的有用总结。
也许ks.test可以帮助我做到这一点
否。首先,有我刚才提到的问题,其次,Kolmogorov-Smirnov测试是针对完全指定的分布的测试。您没有其中之一。
在许多情况下,我建议使用QQ图和类似的显示。对于像这样的右偏情况,我倾向于使用日志(对数正态将看起来是正常的,而帕累托则将呈指数形式)。在合理的样本量下,不难从视觉上区分数据看起来比指数更接近正常还是反之亦然。首先,从每个样本中获取一些实际数据并将其绘制-至少要说六个样本,这样您才能知道它们的外观。
请参阅下面的示例
如何获得用于数据的pareto分布的alpha和k参数?
如果您需要估计参数,请使用MLE ...,但不要那样做以决定帕累托和对数正态。
您能分辨出哪个是对数正态的,哪个是帕累托的吗?
请注意,使用正常的QQ图(左列),我们看到数据集1的对数给出了一条直线,而数据集2则显示了右偏度。使用指数图,数据集1的对数显示的右尾比指数轻,而数据集2的对数显示一条相当的直线(即使模型正确,右尾的值也趋于摆动一点;这是带有重尾的情况并不罕见;这是为什么您需要绘制几个与您正在查看的样本大小相似的样本以查看其典型外观的原因之一)
用于执行这四个图的代码:
qqnorm(log(y1))
qqnorm(log(y2))
qex <- function(x) qexp((rank(x)-.375)/(length(x)+.25))
plot(qex(y1),log(y1))
plot(qex(y2),log(y2))
如果存在回归类型问题-均值随其他变量而变化的问题,则实际上只能在存在均值的合适模型的情况下评估两种分布假设的适用性。
当然,这是模型选择的问题,假设您只想检查数据是来自一个模型还是另一个模型,并且您的目标不是在分布的无限维中找到正确的模型。因此,一种选择是使用AIC(它倾向于使用具有最低AIC值的模型,在此不再赘述)。看一下下面的模拟数据示例:
rm(list=ls())
set.seed(123)
x = rlnorm(100,0,1)
hist(x)
# Loglikelihood and AIC for lognormal model
ll1 = function(param){
if(param[2]>0) return(-sum(dlnorm(x,param[1],param[2],log=T)))
else return(Inf)
}
AIC1 = 2*optim(c(0,1),ll1)$value + 2*2
# Loglikelihood and AIC for Pareto model
dpareto=function(x, shape=1, location=1) shape * location^shape / x^(shape + 1)
ll2 = function(param){
if(param[1]>0 & min(x)> param[2]) return(-sum(log(dpareto(x,param[1],param[2]))))
else return(Inf)
}
AIC2 = 2*optim(c(1,0.01),ll2)$value + 2*2
# Comparison using AIC, which in this case favours the lognormal model.
c(AIC1,AIC2)
也许fitdistr()?
require(MASS)
hist(x, freq=F)
fit<-fitdistr(x,"log-normal")$estimate
lines(dlnorm(0:max(x),fit[1],fit[2]), lwd=3)
> fit
meanlog sdlog
3.8181643 0.1871289
> dput(x)
c(52.6866903145324, 39.7511298620398, 50.0577071855833, 33.8671245370402,
51.6325665911116, 41.1745418750494, 48.4259060939127, 67.0893697776377,
35.5355051232044, 44.6197404834786, 40.5620805256951, 39.4265590077884,
36.0718655240496, 56.0205581625823, 52.8039852992611, 46.2069383488226,
36.7324212941395, 44.7998046213554, 47.9727885542368, 36.3400338997286,
32.7514839453244, 50.6878893947656, 53.3756089181472, 39.4769689441593,
38.5432770167907, 62.350999487007, 44.5140171935881, 47.4026606915147,
57.3723511479393, 64.4041641945078, 51.2286815562554, 60.4921839777139,
71.6127652225805, 40.6395409719693, 48.681036613906, 52.3489622656967,
46.6219563536878, 55.6136160469819, 62.3003761050482, 42.7865905767138,
50.2413659137295, 45.6327941365187, 46.5621907725798, 48.9734785224035,
40.4828649022511, 59.4982559591637, 42.9450436744074, 66.8393386407167,
40.7248473206552, 45.9114242834839, 34.2671010054407, 45.7569869970351,
50.4358523486278, 44.7445606782492, 44.4173298921541, 41.7506552050873,
34.5657344132409, 47.7099864540652, 38.1680974794929, 42.2126680994737,
35.690599714042, 37.6748157160789, 35.0840798650981, 41.4775827114607,
36.6503753230464, 42.7539062488003, 39.2210050689652, 45.9364763482558,
35.3687017955285, 62.8299659875044, 38.1532612008011, 39.9183076516292,
59.0662388169057, 47.9032427690417, 42.4419580084314, 45.785859495192,
59.5254284342724, 47.9161476636566, 32.6868959277799, 30.1039453246766,
37.7606323857655, 35.754797368422, 35.5239777126187, 43.7874313667592,
53.0328404605954, 37.4550326357314, 42.7226751172495, 44.898430515261,
59.7229655935187, 41.0701258705001, 42.1672231656919, 60.9632847841197,
60.3690132883734, 45.6469334940722, 39.8300067022836, 51.8185235060234,
44.908828102875, 50.8200011497451, 53.7945569828737, 65.0432670527801,
49.0306734716282, 35.9442821219144, 46.8133296904456, 43.7514416949611,
43.7348972849838, 57.592040060118, 48.7913517211383, 38.5555058596449
)