首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有左截weibull的ks.test

具有左截weibull的ks.test
EN

Stack Overflow用户
提问于 2016-01-07 15:36:18
回答 2查看 940关注 0票数 1

我接受我要遵循的值的分布是一个左截尾weibull分布。我知道使用ptrunc命令的这个发行版的参数a、形状和规模:

代码语言:javascript
复制
require(truncdist);

ptrunc(x,"weibull",a=a,scale=b,shape=c)

因此,我希望ks.test命令(见下面)使用所描述的左截尾威布尔分布,而不是使用“普通威布尔”。

代码语言:javascript
复制
myvalues<-c(37.5, 35.4, 27.1, 32.9, 35.9, 35.1, 34.1, 32.5, 35.5, 31.5, 38.2, 36.1,,29.9, 30.1, 34.7, 38.7 ,32.3, 38.0, 34.9, 44.2, 35.8, 30.8, 39.3, 26.0, 34.2, 40.0, 36.1 ,41.5 ,32.8, 31.9, 41.3 ,30.5, 39.9, 35.0 ,31.2 ,35.0, 30.3, 29.0, 34.4, 35.7, 34.1, 35.4); 
a<-7;
scale<-36.37516;
shape<-9.437013; 

所以我知道,在这种情况下,没有必要做左侧截断。但在其他情况下,情况将会如此。

代码语言:javascript
复制
ks.test(myvalues,"pweibull",scale=b,shape=c) #for normal weibull

代码语言:javascript
复制
ks.test(myvalues,ptrunc(x,"weibull",a=a,scale=b,shape=c)) # for leftruncated

给出了错误的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-07 18:14:19

首先,ptrunc应该被rtrunc取代。ptrunc给出了概率值的向量。但是根据文件编制 ks.test,我们需要一个样本,这就是rtrunc给我们的。如果参数a of rtrunc设置为-Inf,则不存在截断,使用a=-Inf的结果确实与a=7相同。

代码语言:javascript
复制
library(truncdist)

myvalues <- c(37.5, 35.4, 27.1, 32.9, 35.9, 35.1, 34.1, 32.5, 35.5, 31.5, 38.2, 36.1,29.9, 30.1, 34.7, 38.7 ,32.3, 38.0, 34.9, 44.2, 35.8, 30.8, 39.3, 26.0, 34.2, 40.0, 36.1 ,41.5 ,32.8, 31.9, 41.3 ,30.5, 39.9, 35.0 ,31.2 ,35.0, 30.3, 29.0, 34.4, 35.7, 34.1, 35.4)

a <- 7
scale<-36.37516
shape <- 9.437013

set.seed(1)
y1 <- rtrunc(myvalues,"weibull",a=-Inf,scale=scale,shape=shape)

set.seed(1)
y2 <- rtrunc(myvalues,"weibull",a=a,scale=scale,shape=shape)

set.seed(1)
ks0 <- ks.test( myvalues, "pweibull",scale=scale,shape=shape  )

set.seed(1)
ks1 <- ks.test( myvalues, y1 )

set.seed(1)
ks2 <- ks.test( myvalues, y2 )

代码语言:javascript
复制
> ks1

    Two-sample Kolmogorov-Smirnov test

data:  myvalues and y1
D = 0.21429, p-value = 0.2898
alternative hypothesis: two-sided

> ks2

    Two-sample Kolmogorov-Smirnov test

data:  myvalues and y2
D = 0.21429, p-value = 0.2898
alternative hypothesis: two-sided

但是ks.test( myvalues, "pweibull",scale=scale,shape=shape )的结果还是不同的:

代码语言:javascript
复制
> ks0

    One-sample Kolmogorov-Smirnov test

data:  myvalues
D = 0.15612, p-value = 0.2576
alternative hypothesis: two-sided

原因是myvalues太小了。如果在rtrunc (而不是ks.test)调用中使其更大,则ks0ks1ks2几乎相同:

代码语言:javascript
复制
library(truncdist)

myvalues <- c(37.5, 35.4, 27.1, 32.9, 35.9, 35.1, 34.1, 32.5, 35.5, 31.5, 38.2, 36.1,29.9, 30.1, 34.7, 38.7 ,32.3, 38.0, 34.9, 44.2, 35.8, 30.8, 39.3, 26.0, 34.2, 40.0, 36.1 ,41.5 ,32.8, 31.9, 41.3 ,30.5, 39.9, 35.0 ,31.2 ,35.0, 30.3, 29.0, 34.4, 35.7, 34.1, 35.4)

myManyValues <- c(outer((0:9999)/100000,myvalues,"+"))

a <- 7
scale<-36.37516
shape <- 9.437013

set.seed(1)
y1 <- rtrunc(myManyValues,"weibull",a=-Inf,scale=scale,shape=shape)

set.seed(1)
y2 <- rtrunc(myManyValues,"weibull",a=a,scale=scale,shape=shape)

set.seed(1)
ks0 <- ks.test( myvalues, "pweibull",scale=scale,shape=shape  )

set.seed(1)
ks1 <- ks.test( myvalues, y1 )

set.seed(1)
ks2 <- ks.test( myvalues, y2 )

代码语言:javascript
复制
> ks0

    One-sample Kolmogorov-Smirnov test

data:  myvalues
D = 0.15612, p-value = 0.2576
alternative hypothesis: two-sided

> ks1

    Two-sample Kolmogorov-Smirnov test

data:  myvalues and y1
D = 0.15655, p-value = 0.2548
alternative hypothesis: two-sided

> ks2

    Two-sample Kolmogorov-Smirnov test

data:  myvalues and y2
D = 0.15655, p-value = 0.2548
alternative hypothesis: two-sided

现在,让我们看看当我们截断发行版时会发生什么:

代码语言:javascript
复制
library(truncdist)

myvalues <- c(37.5, 35.4, 27.1, 32.9, 35.9, 35.1, 34.1, 32.5, 35.5, 31.5, 38.2, 36.1,29.9, 30.1, 34.7, 38.7 ,32.3, 38.0, 34.9, 44.2, 35.8, 30.8, 39.3, 26.0, 34.2, 40.0, 36.1 ,41.5 ,32.8, 31.9, 41.3 ,30.5, 39.9, 35.0 ,31.2 ,35.0, 30.3, 29.0, 34.4, 35.7, 34.1, 35.4)

myManyValues <- c(outer((0:9999)/100000,myvalues,"+"))

a <- 29
scale<-36.37516
shape <- 9.437013

set.seed(1)
y1 <- rtrunc(myManyValues,"weibull",a=-Inf,scale=scale,shape=shape)

set.seed(1)
y2 <- rtrunc(myManyValues,"weibull",a=a,scale=scale,shape=shape)

set.seed(1)
ks0 <- ks.test( myvalues, "pweibull",scale=scale,shape=shape  )

set.seed(1)
ks1 <- ks.test( myvalues, y1 )

set.seed(1)
ks2 <- ks.test( myvalues, y2 )

代码语言:javascript
复制
> ks0

    One-sample Kolmogorov-Smirnov test

data:  myvalues
D = 0.15612, p-value = 0.2576
alternative hypothesis: two-sided

> ks1

    Two-sample Kolmogorov-Smirnov test

data:  myvalues and y1
D = 0.15655, p-value = 0.2548
alternative hypothesis: two-sided

> ks2

    Two-sample Kolmogorov-Smirnov test

data:  myvalues and y2
D = 0.2059, p-value = 0.05683
alternative hypothesis: two-sided
票数 2
EN

Stack Overflow用户

发布于 2016-01-07 17:49:04

您不正确地使用ptrunc函数(我假设),它需要得到一个分位数序列。下面我根据你的尺度和形状参数计算威布尔的平均值和标准差,然后从上面和下面的5个标准差中取样,生成一个比较集。

代码语言:javascript
复制
require(truncdist);

myvalues <- c(37.5, 35.4, 27.1, 32.9, 35.9, 35.1, 34.1, 32.5, 35.5, 31.5, 38.2, 36.1,29.9, 30.1, 34.7, 38.7 ,32.3, 38.0, 34.9, 44.2, 35.8, 30.8, 39.3, 26.0, 34.2, 40.0, 36.1 ,41.5 ,32.8, 31.9, 41.3 ,30.5, 39.9, 35.0 ,31.2 ,35.0, 30.3, 29.0, 34.4, 35.7, 34.1, 35.4); 
a <- 7;
scale <- 36.37516;
shape <- 9.437013;

# Calculate standard deviation of the weibull
weib_mean <- scale * gamma(1 + 1/shape)
weib_sd <- sqrt((scale^2) * (gamma(1 + 2/shape) - (gamma(1 + 1/shape))^2))

# Get a sample
quant <- seq(weib_mean - 5 * weib_sd, weib_mean + 5 * weib_sd, length.out = 1E5)
weibull_samp <- ptrunc(quant, "weibull", a = a, scale = scale, shape = shape)

# Take a look
plot(weibull_samp ~ quant)

代码语言:javascript
复制
# Use with test
> ks.test(sort(myvalues), weibull_samp)
       Two-sample Kolmogorov-Smirnov test

data:  sort(myvalues) and weibull_samp
D = 1, p-value < 2.2e-16
alternative hypothesis: two-sided
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34659122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档