r - ks.test with left truncated weibull -
the distribution accept values follow left truncated weibull distribution. know parameters a, shape , scale of distribution using ptrunc command:
require(truncdist); ptrunc(x,"weibull",a=a,scale=b,shape=c) so want ks.test command (see below) use described left truncated weibull distribution instead of "normal weibull".
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; so know, in case not necessary left-side truncation. in others be.
ks.test(myvalues,"pweibull",scale=b,shape=c) #for normal weibull but
ks.test(myvalues,ptrunc(x,"weibull",a=a,scale=b,shape=c)) # leftruncated gives wrong result.
first of all, ptrunc should replaced rtrunc. ptrunc gives vector of probability values. documentation of ks.test need sample, , rtrunc gives us. if argument a of rtrunc set -inf, there no truncation , result a=-inf indeed same a=7:
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) <- 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 ) .
> ks1 two-sample kolmogorov-smirnov test data: myvalues , y1 d = 0.21429, p-value = 0.2898 alternative hypothesis: two-sided > ks2 two-sample kolmogorov-smirnov test data: myvalues , y2 d = 0.21429, p-value = 0.2898 alternative hypothesis: two-sided but still result of ks.test( myvalues, "pweibull",scale=scale,shape=shape ) different:
> ks0 one-sample kolmogorov-smirnov test data: myvalues d = 0.15612, p-value = 0.2576 alternative hypothesis: two-sided the reason myvalues small. if make larger in call of rtrunc (not ks.test), ks0, ks1, , ks2 same:
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,"+")) <- 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 ) .
> 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 , y1 d = 0.15655, p-value = 0.2548 alternative hypothesis: two-sided > ks2 two-sample kolmogorov-smirnov test data: myvalues , y2 d = 0.15655, p-value = 0.2548 alternative hypothesis: two-sided now let's see happens when do truncate distribution:
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,"+")) <- 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 ) .
> 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 , y1 d = 0.15655, p-value = 0.2548 alternative hypothesis: two-sided > ks2 two-sample kolmogorov-smirnov test data: myvalues , y2 d = 0.2059, p-value = 0.05683 alternative hypothesis: two-sided
Comments
Post a Comment