我想估計線性回歸模型的引數R。該模型的型別為:y=(alpha) (beta*x) epsilon。該任務要求我將引數值系統地放置在資料框中。因此,我創建了一個空白資料框,然后繼續向其中添加行以獲取引數值。
df<-data.frame(alpha=double(),beta=double()) #blank dataframe
for(i in 1:1000)
{
sample_dat<-sampling_model(100,2,5,16,-2,2) #generating 100 samples
sample_model<-lm(y~x,data=sample_dat) #estimating the linear model
df<-rbind(df,sample_model$coefficients) #appending the values of the parameters
}
基本上,我有一個函式sampling_model,它被設計成為x_i's 和epsilon_i's(兩者都遵循某種分布)生成隨機值,并給出y_i's的值,將這兩個值與一些固定的 alpha 和 beta 值相加。
在上述回圈的每次迭代中,我們將線性模型擬合到引數(alpha 和 beta)的估計值對。我想將它們存盤在一個資料框中,我將其命名為df.
最初(在開始回圈之前),names(df)回傳:
#[1] "alpha" "beta"
但是,在將所有這些 alpha 和 beta 估計值附加到df(即在回圈之后)之后,names(df)回傳:
#[1] "X2.4932268478702" "X5.53432974825338"
我被困在這里,問自己為什么會發生這種情況。最好注意這些名稱也不是恒定的。就像,如果我再運行一次上述回圈,然后檢查列的名稱,則數字都不同。是否有溢位或我在將值附加到資料框時犯了一些錯誤?
此外,我可以(并且確實)通過以下方式解決了“模棱兩可”名稱的問題:
names(df)<-c('alpha','beta')
但這并不能掩蓋我在附加估計引數時出錯的事實,我df無法弄清楚。任何人都可以幫助我解決如何避免這種情況?
sampling_model為方便起見,我還附上了我的功能:
sampling_model<-function(n,alpha,beta,variance,min_range,max_range)
{
x<-runif(n,min=min_range,max=max_range) #n uniform variates as x_i
epsilon<-rnorm(n,mean=0,sd=sqrt(variance)) #n normal variates as epsilon_i
y<-alpha beta*x epsilon #the dependant variable y
return(data.frame(x=x,y=y)) #returns dataframe of x and y
}
uj5u.com熱心網友回復:
我不確定為什么會發生這種情況,它的奇怪行為似乎只發生在第一個rbind引數沒有行時。但是rbind在回圈中將資料幀放在一起是一種非常低效的不良做法,應該避免。它是著名的 R 地獄中的第二圈R 地獄。
最簡單的替代方法是將您的資料初始化為完整大小,然后填寫每一行:
n <- 1000
df <- data.frame(alpha=double(n),beta=double(n)) #blank dataframe
for(i in 1:n)
{
sample_dat <- sampling_model(100,2,5,16,-2,2) #generating 100 samples
sample_model <- lm(y~x,data=sample_dat) #estimating the linear model
df[i, ] <- sample_model$coefficients #filling in the values of the parameters
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/378692.html
