我正在使用 R 編程語言。
我撰寫了以下代碼,從正態分布中生成 20 個隨機點,然后繪制似然函式:
# generate random data
x1 = rnorm(1,5,5)
x2 = rnorm(1,5,5)
x3 = rnorm(1,5,5)
x4 = rnorm(1,5,5)
x5 = rnorm(1,5,5)
x6 = rnorm(1,5,5)
x7 = rnorm(1,5,5)
x8 = rnorm(1,5,5)
x9 = rnorm(1,5,5)
x10 = rnorm(1,5,5)
x11 = rnorm(1,5,5)
x12 = rnorm(1,5,5)
x13 = rnorm(1,5,5)
x14 = rnorm(1,5,5)
x15 = rnorm(1,5,5)
x16 = rnorm(1,5,5)
x17 = rnorm(1,5,5)
x18 = rnorm(1,5,5)
x19 = rnorm(1,5,5)
x20 = rnorm(1,5,5)
# Define Likelihood Function (from here: #https://www.statlect.com/fundamentals-of-statistics/normal-distribution-maximum-likelihood - I broke the Likelihood Function into 4 parts "a", "b", "c", "d" : then I added them together to make the full Likelihood Function "f")
my_function <- function(mu,sigma) {
n = 20
a = -n/2*log(2*pi)
b = -n/2*log(sigma^2)
c = -1/(2*sigma^2)
d = (x1-mu)^2 (x2-mu)^2 (x3-mu)^2 (x4-mu)^2 (x5-mu)^2 (x6-mu)^2 (x7-mu)^2 (x8-mu)^2 (x9-mu)^2 (x10-mu)^2 (x11-mu)^2 (x12-mu)^2 (x13-mu)^2 (x14-mu)^2 (x15-mu)^2 (x16-mu)^2 (x17-mu)^2 (x18-mu)^2 (x19-mu)^2 (x20-mu)^2
f = a b c d
}
# plot results
library(plotly)
input_1 <- seq(-20, 20,0.1)
input_2 <- seq(-20,20, 0.1)
z <- outer(input_1, input_2, my_function)
plot_ly(x = input_1, y = input_2, z = z) %>% add_surface()

我的問題:有人可以告訴我如何制作此代碼的更“高效”版本嗎?
例如,我曾想過一次直接從這個分布中生成 20 個點
my_data = rnorm(20,5,5),然后將它們放入資料框中——但我不知道如何將資料框中的資料“輸入”到函式中由于我有 20 個資料點,我必須手動撰寫
(x_i -mu)^220 個不同的時間 - 是否有可能有一個函式可以“識別”有 20 個點,然后“適應”自己以“容納”這 20 個點而無需必須手動重寫(x_i -mu)^2這么多次?
uj5u.com熱心網友回復:
要將資料存盤到 data.frame 中,您只需執行以下操作:
my_data <- rnorm(20, 5, 5)
df <- data.frame(x = my_data, <other_columns>)
請注意,其他列的長度必須相同。如果不是這種情況,最好將這些數字分開。
然后在 中my_function,您可以擁有:
d = sum((df$my_data - mu)^2)
如果您不使用資料框,則改為:
d = sum((my_data - mu)^2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450547.html
