Można zrobić przy użyciu standardowych funkcji R takich jak:
c <- 1
d <- 2
a <- -2
b <- 3.5
ll <- pnorm(a, c, d)
ul <- pnorm(b, c, d)
x <- qnorm(runif(3000, ll, ul), c, d)
hist(x)
range(x)
mean(x)
sd(x)
plot(x, type='l')
Funkcja pnorm służy do określania limitów wykorzystywanych do jednolitego rozłożenia, dane są następnie generowane z jednolitego, a następnie przekształcane z powrotem do normalnego.
To jeszcze prostsze przy użyciu pakietu distr:
library(distr)
N <- Norm(c,d)
N2 <- Truncate(N, lower=a, upper=b)
plot(N2)
x <- r(N2)(3000)
hist(x)
range(x)
mean(x)
sd(x)
plot(x, type='l')
Należy zauważyć, że w obu przypadkach średnia nie jest c i SD nie jest d. Jeśli chcesz, aby średnia i sd uzyskanych skróconych danych wynosiły cid, to potrzebujesz dystrybucji macierzystej (przed obcięciem), aby mieć różne wartości (wyższy sd, średnia zależy od wartości obcięcia), znalezienie tych wartości byłoby dobra praca domowa na kurs teorii matematyki/statystyki. Jeśli tak naprawdę potrzebujesz, dodaj komentarz lub edytuj pytanie, aby tak konkretnie powiedzieć.
Jeśli chcesz wygenerować dane z untruncated normalne, ale tylko wykreślić dane w przedziale [a, b], a następnie po prostu korzystać z ylim argumentu do działki:
plot(rnorm(3000, c, d), ylim=c(a,b))
nie robić to, co OP poprosił o. On chce 3000 punktów po normalnej dystrybucji, więc 'rnorm' jest drogą do przejścia – nico
to źle sformułowane pytania ... Zgadłem. Gdyby to było naprawdę spisek na losowe wartości na osi Y, jak sugeruje to część, co do cholery jest żądanie ograniczenia osi X? To nie ma sensu. Domyślam się, że wartości losowe są wymagane do wygenerowania funkcji gęstości, tak jak @joFrhwld i @Joris Mays. Jest to właściwy sposób generowania funkcji gęstości. – John